Megatest

Hex Artifact Content
Login

Artifact 2688ae0606e40ce36822df28b9c06aa69f474d94:


0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79  ========.;; Copy
0050: 72 69 67 68 74 20 32 30 30 36 2d 32 30 31 32 2c  right 2006-2012,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64   Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70  ..;; .;;  This p
0080: 72 6f 67 72 61 6d 20 69 73 20 6d 61 64 65 20 61  rogram is made a
0090: 76 61 69 6c 61 62 6c 65 20 75 6e 64 65 72 20 74  vailable under t
00a0: 68 65 20 47 4e 55 20 47 50 4c 20 76 65 72 73 69  he GNU GPL versi
00b0: 6f 6e 20 32 2e 30 20 6f 72 0a 3b 3b 20 20 67 72  on 2.0 or.;;  gr
00c0: 65 61 74 65 72 2e 20 53 65 65 20 74 68 65 20 61  eater. See the a
00d0: 63 63 6f 6d 70 61 6e 79 69 6e 67 20 66 69 6c 65  ccompanying file
00e0: 20 43 4f 50 59 49 4e 47 20 66 6f 72 20 64 65 74   COPYING for det
00f0: 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b 20 20 54 68  ails..;; .;;  Th
0100: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69  is program is di
0110: 73 74 72 69 62 75 74 65 64 20 57 49 54 48 4f 55  stributed WITHOU
0120: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20  T ANY WARRANTY; 
0130: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65  without even the
0140: 0a 3b 3b 20 20 69 6d 70 6c 69 65 64 20 77 61 72  .;;  implied war
0150: 72 61 6e 74 79 20 6f 66 20 4d 45 52 43 48 41 4e  ranty of MERCHAN
0160: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
0170: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0180: 55 4c 41 52 0a 3b 3b 20 20 50 55 52 50 4f 53 45  ULAR.;;  PURPOSE
0190: 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..;;============
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 63  ==========..(dec
01e0: 6c 61 72 65 20 28 75 6e 69 74 20 67 65 6e 65 78  lare (unit genex
01f0: 61 6d 70 6c 65 29 29 0a 28 75 73 65 20 70 6f 73  ample)).(use pos
0200: 69 78 29 0a 0a 28 64 65 66 69 6e 65 20 67 65 6e  ix)..(define gen
0210: 65 78 61 6d 70 6c 65 3a 65 78 61 6d 70 6c 65 2d  example:example-
0220: 6c 6f 67 70 72 6f 0a 23 3c 3c 45 4f 46 0a 3b 3b  logpro.#<<EOF.;;
0230: 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65   You should have
0240: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 78   at least one ex
0250: 70 65 63 74 3a 72 65 71 75 69 72 65 64 2e 20 54  pect:required. T
0260: 68 69 73 20 65 6e 73 75 72 65 73 20 74 68 61 74  his ensures that
0270: 20 79 6f 75 72 20 70 72 6f 63 65 73 73 20 72 61   your process ra
0280: 6e 0a 28 65 78 70 65 63 74 3a 72 65 71 75 69 72  n.(expect:requir
0290: 65 64 20 69 6e 20 22 4c 6f 67 46 69 6c 65 42 6f  ed in "LogFileBo
02a0: 64 79 22 20 3e 20 30 20 22 50 75 74 20 64 65 73  dy" > 0 "Put des
02b0: 63 72 69 70 74 69 6f 6e 20 68 65 72 65 22 20 23  cription here" #
02c0: 2f 70 75 74 20 70 61 74 74 65 72 6e 20 68 65 72  /put pattern her
02d0: 65 2f 29 0a 0a 3b 3b 20 59 6f 75 20 6d 61 79 20  e/)..;; You may 
02e0: 6e 65 65 64 20 69 67 6e 6f 72 65 73 20 74 6f 20  need ignores to 
02f0: 73 75 70 70 72 65 73 73 20 66 61 6c 73 65 20 65  suppress false e
0300: 72 72 6f 72 20 6f 72 20 77 61 72 6e 69 6e 67 20  rror or warning 
0310: 68 69 74 73 20 66 72 6f 6d 20 74 68 65 20 6c 61  hits from the la
0320: 74 65 72 20 65 78 70 65 63 74 73 0a 3b 3b 20 4e  ter expects.;; N
0330: 4f 54 45 3a 20 4f 72 64 65 72 20 69 73 20 69 6d  OTE: Order is im
0340: 70 6f 72 74 61 6e 74 20 68 65 72 65 21 0a 28 65  portant here!.(e
0350: 78 70 65 63 74 3a 69 67 6e 6f 72 65 20 20 20 69  xpect:ignore   i
0360: 6e 20 22 4c 6f 67 46 69 6c 65 42 6f 64 79 22 20  n "LogFileBody" 
0370: 20 3c 20 39 39 20 22 49 67 6e 6f 72 65 20 74 68   < 99 "Ignore th
0380: 65 20 77 6f 72 64 20 65 72 72 6f 72 20 69 6e 20  e word error in 
0390: 63 6f 6d 6d 65 6e 74 73 22 20 23 2f 5e 5c 2f 5c  comments" #/^\/\
03a0: 2f 2e 2a 65 72 72 6f 72 2f 29 0a 28 65 78 70 65  /.*error/).(expe
03b0: 63 74 3a 77 61 72 6e 69 6e 67 20 20 69 6e 20 22  ct:warning  in "
03c0: 4c 6f 67 46 69 6c 65 42 6f 64 79 22 20 20 3d 20  LogFileBody"  = 
03d0: 30 20 22 41 6e 79 20 77 61 72 6e 69 6e 67 22 20  0 "Any warning" 
03e0: 23 2f 77 61 72 6e 2f 29 0a 28 65 78 70 65 63 74  #/warn/).(expect
03f0: 3a 65 72 72 6f 72 20 20 20 20 69 6e 20 22 4c 6f  :error    in "Lo
0400: 67 46 69 6c 65 42 6f 64 79 22 20 20 3d 20 30 20  gFileBody"  = 0 
0410: 22 41 6e 79 20 65 72 72 6f 72 22 20 20 28 6c 69  "Any error"  (li
0420: 73 74 20 23 2f 45 52 52 4f 52 2f 20 23 2f 65 72  st #/ERROR/ #/er
0430: 72 6f 72 2f 29 29 20 3b 3b 20 62 75 74 20 64 69  ror/)) ;; but di
0440: 73 61 6c 6c 6f 77 20 61 6e 79 20 6f 74 68 65 72  sallow any other
0450: 20 65 72 72 6f 72 73 0a 45 4f 46 0a 29 0a 0a 28   errors.EOF.)..(
0460: 64 65 66 69 6e 65 20 67 65 6e 65 78 61 6d 70 6c  define genexampl
0470: 65 3a 65 78 61 6d 70 6c 65 2d 73 63 72 69 70 74  e:example-script
0480: 0a 23 3c 3c 45 4f 46 0a 23 21 2f 75 73 72 2f 62  .#<<EOF.#!/usr/b
0490: 69 6e 2f 65 6e 76 20 62 61 73 68 0a 0a 23 20 52  in/env bash..# R
04a0: 75 6e 20 79 6f 75 72 20 73 74 65 70 20 68 65 72  un your step her
04b0: 65 0a 45 4f 46 0a 29 0a 0a 28 64 65 66 69 6e 65  e.EOF.)..(define
04c0: 20 28 67 65 6e 65 78 61 6d 70 6c 65 3a 6d 6b 2d   (genexample:mk-
04d0: 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 29  megatest.config)
04e0: 0a 20 20 28 6c 65 74 20 28 28 6b 65 79 73 74 72  .  (let ((keystr
04f0: 20 23 66 29 0a 09 28 6b 65 79 73 20 20 20 23 66   #f)..(keys   #f
0500: 29 0a 09 28 6c 6e 74 72 65 65 20 23 66 29 0a 09  )..(lntree #f)..
0510: 28 70 61 74 68 20 20 20 23 66 29 0a 09 28 66 69  (path   #f)..(fi
0520: 72 73 74 64 20 23 66 29 29 0a 20 20 20 20 28 70  rstd #f)).    (p
0530: 72 69 6e 74 20 22 4e 6f 74 65 3a 20 64 6f 6e 27  rint "Note: don'
0540: 74 20 77 6f 72 72 79 20 74 6f 6f 20 6d 75 63 68  t worry too much
0550: 20 61 62 6f 75 74 20 74 79 70 6f 73 20 69 6e 20   about typos in 
0560: 74 68 69 73 20 70 72 6f 63 65 73 73 2c 20 79 6f  this process, yo
0570: 75 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  u will be able t
0580: 6f 20 65 64 69 74 0a 74 68 65 20 67 65 6e 65 72  o edit.the gener
0590: 61 74 65 64 20 66 69 6c 65 73 20 62 65 66 6f 72  ated files befor
05a0: 65 20 73 74 61 72 74 69 6e 67 20 79 6f 75 72 20  e starting your 
05b0: 66 69 72 73 74 20 72 75 6e 73 22 29 0a 0a 20 20  first runs")..  
05c0: 20 20 3b 3b 20 63 72 65 61 74 65 20 74 68 65 20    ;; create the 
05d0: 6e 65 65 64 65 64 20 61 72 65 61 0a 20 20 20 20  needed area.    
05e0: 28 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d  (print "========
05f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 57 68 65 72  ==========\nWher
0600: 65 20 63 61 6e 20 49 20 63 72 65 61 74 65 20 79  e can I create y
0610: 6f 75 72 20 4d 65 67 61 74 65 73 74 20 72 65 67  our Megatest reg
0620: 72 65 73 73 73 69 6f 6e 2f 63 6f 6e 74 69 6e 75  resssion/continu
0630: 6f 75 73 20 62 75 69 6c 64 20 61 72 65 61 3f 20  ous build area? 
0640: 4e 6f 74 65 2c 20 79 6f 75 72 20 5c 6e 22 0a 09  Note, your \n"..
0650: 20 20 20 22 74 65 73 74 73 20 77 69 6c 6c 20 6e     "tests will n
0660: 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 62  ot necessarily b
0670: 65 20 72 75 6e 20 69 6e 20 74 68 69 73 20 61 72  e run in this ar
0680: 65 61 2c 20 64 69 73 6b 20 73 70 61 63 65 20 6e  ea, disk space n
0690: 65 65 64 73 20 61 72 65 20 6d 6f 64 65 73 74 2e  eeds are modest.
06a0: 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61 79 20  ").    (display 
06b0: 22 45 6e 74 65 72 20 79 6f 75 72 20 6d 65 67 61  "Enter your mega
06c0: 74 65 73 74 20 64 69 72 65 63 74 6f 72 79 3a 20  test directory: 
06d0: 22 29 0a 20 20 20 20 28 73 65 74 21 20 70 61 74  ").    (set! pat
06e0: 68 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 0a  h (read-line))..
06f0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 64 69      (if (not (di
0700: 72 65 63 74 6f 72 79 3f 20 70 61 74 68 29 29 0a  rectory? path)).
0710: 09 28 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e  .(begin..  (prin
0720: 74 20 22 54 68 65 20 70 61 74 68 20 22 20 70 61  t "The path " pa
0730: 74 68 20 22 20 64 6f 65 73 20 6e 6f 74 20 65 78  th " does not ex
0740: 69 73 74 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ist or is not a 
0750: 64 69 72 65 63 74 6f 72 79 2e 20 41 74 74 65 6d  directory. Attem
0760: 70 74 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20  pting to create 
0770: 69 74 20 6e 6f 77 22 29 0a 09 20 20 28 63 72 65  it now")..  (cre
0780: 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20 70 61  ate-directory pa
0790: 74 68 20 23 74 29 29 29 0a 0a 20 20 20 20 3b 3b  th #t)))..    ;;
07a0: 20 46 69 72 73 74 20 63 68 65 63 6b 20 74 68 61   First check tha
07b0: 74 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69  t megatest.confi
07c0: 67 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  g does not exist
07d0: 21 0a 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d  !.    (if (file-
07e0: 65 78 69 73 74 73 3f 20 28 63 6f 6e 63 20 70 61  exists? (conc pa
07f0: 74 68 20 22 2f 6d 65 67 61 74 65 73 74 2e 63 6f  th "/megatest.co
0800: 6e 66 69 67 22 29 29 0a 09 28 62 65 67 69 6e 0a  nfig"))..(begin.
0810: 09 20 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49  .  (print "WARNI
0820: 4e 47 3a 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e  NG: megatest.con
0830: 66 69 67 20 61 6c 72 65 61 64 79 20 65 78 69 73  fig already exis
0840: 74 73 21 20 44 6f 20 79 6f 75 20 77 69 73 68 20  ts! Do you wish 
0850: 74 6f 20 63 6c 6f 62 62 65 72 20 66 69 6c 65 73  to clobber files
0860: 20 69 6e 20 22 20 70 61 74 68 20 22 3f 22 29 0a   in " path "?").
0870: 09 20 20 28 64 69 73 70 6c 61 79 20 22 45 6e 74  .  (display "Ent
0880: 65 72 20 79 2f 6e 3a 20 22 29 0a 09 20 20 28 69  er y/n: ")..  (i
0890: 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 22  f (not (equal? "
08a0: 79 22 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29  y" (read-line)))
08b0: 0a 09 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09  ..      (begin..
08c0: 09 28 70 72 69 6e 74 20 22 49 4e 46 4f 3a 20 43  .(print "INFO: C
08d0: 72 65 61 74 69 6f 6e 20 6f 66 20 6d 65 67 61 74  reation of megat
08e0: 65 73 74 20 66 69 6c 65 73 20 69 6e 20 22 20 70  est files in " p
08f0: 61 74 68 20 22 20 61 62 6f 72 74 65 64 22 29 0a  ath " aborted").
0900: 09 09 28 65 78 69 74 20 31 29 29 29 29 29 0a 0a  ..(exit 1)))))..
0910: 20 20 20 20 3b 3b 20 66 69 72 73 74 20 70 72 6f      ;; first pro
0920: 6d 70 74 20 75 73 65 72 20 66 6f 72 20 66 69 65  mpt user for fie
0930: 6c 64 73 0a 20 20 20 20 3b 3b 0a 20 20 20 20 28  lds.    ;;.    (
0940: 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d  print "=========
0950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 4e 65 78 74 20  =========\nNext 
0960: 79 6f 75 20 6d 75 73 74 20 73 70 65 63 69 66 79  you must specify
0970: 20 66 69 65 6c 64 73 20 6f 72 20 6b 65 79 73 20   fields or keys 
0980: 66 6f 72 20 79 6f 75 72 20 6d 65 67 61 74 65 73  for your megates
0990: 74 20 61 72 65 61 2e 20 54 68 65 73 65 20 77 69  t area. These wi
09a0: 6c 6c 20 0a 62 65 20 75 73 65 64 20 74 6f 20 6f  ll .be used to o
09b0: 72 67 61 6e 69 73 65 20 79 6f 75 72 20 72 75 6e  rganise your run
09c0: 73 2e 20 4f 6e 65 20 66 69 65 6c 64 20 73 68 6f  s. One field sho
09d0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20  uld probably be 
09e0: 5c 22 52 45 4c 45 41 53 45 5c 22 2e 20 0a 4f 74  \"RELEASE\". .Ot
09f0: 68 65 72 20 65 78 61 6d 70 6c 65 73 20 6f 66 20  her examples of 
0a00: 75 73 65 66 75 6c 20 66 69 65 6c 64 73 20 6d 69  useful fields mi
0a10: 67 68 74 20 62 65 20 5c 22 50 4c 41 54 46 4f 52  ght be \"PLATFOR
0a20: 4d 5c 22 2c 20 5c 22 54 41 52 47 45 54 5f 4f 53  M\", \"TARGET_OS
0a30: 5c 22 20 6f 72 20 69 66 20 79 6f 75 20 61 72 65  \" or if you are
0a40: 20 69 6e 20 74 68 65 0a 73 65 6d 69 63 6f 6e 64   in the.semicond
0a50: 75 63 74 6f 72 20 62 75 73 69 6e 65 73 73 20 70  uctor business p
0a60: 65 72 68 61 70 73 20 74 68 69 6e 67 73 20 6c 69  erhaps things li
0a70: 6b 65 20 5c 22 54 45 43 48 4e 4f 4c 4f 47 59 5f  ke \"TECHNOLOGY_
0a80: 4e 4f 44 45 5c 22 2c 20 5c 22 44 45 53 49 47 4e  NODE\", \"DESIGN
0a90: 5f 4b 49 54 5c 22 20 6f 72 20 5c 22 4d 45 54 41  _KIT\" or \"META
0aa0: 4c 5f 53 54 41 43 4b 5c 22 2e 0a 0a 54 68 65 20  L_STACK\"...The 
0ab0: 61 6c 6c 20 63 61 70 73 20 69 73 20 61 20 63 6f  all caps is a co
0ac0: 6e 76 65 6e 74 69 6f 6e 20 62 65 63 61 75 73 65  nvention because
0ad0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 79   the variables y
0ae0: 6f 75 20 63 68 6f 6f 73 65 20 77 69 6c 6c 20 62  ou choose will b
0af0: 65 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 79  e available to y
0b00: 6f 75 72 20 74 65 73 74 73 0a 61 73 20 65 6e 76  our tests.as env
0b10: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
0b20: 65 73 2e 20 59 6f 75 20 63 61 6e 20 65 64 69 74  es. You can edit
0b30: 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 6c 61   these values la
0b40: 74 65 72 20 62 75 74 20 69 74 20 69 73 20 67 65  ter but it is ge
0b50: 6e 65 72 61 6c 6c 79 20 61 20 67 6f 6f 64 20 69  nerally a good i
0b60: 64 65 61 20 74 6f 0a 73 65 74 74 6c 65 20 6f 6e  dea to.settle on
0b70: 20 74 68 65 6d 20 61 6e 64 20 67 65 74 20 74 68   them and get th
0b80: 65 6d 20 72 69 67 68 74 20 65 61 72 6c 79 20 6f  em right early o
0b90: 6e 2e 20 59 6f 75 72 20 72 75 6e 73 20 77 69 6c  n. Your runs wil
0ba0: 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 64  l be stored in d
0bb0: 69 72 65 63 74 6f 72 69 65 73 20 73 70 65 63 69  irectories speci
0bc0: 66 69 65 64 20 62 79 0a 79 6f 75 72 20 6b 65 79  fied by.your key
0bd0: 73 2e 20 45 78 61 6d 70 6c 65 2c 20 69 66 20 79  s. Example, if y
0be0: 6f 75 20 68 61 76 65 20 6b 65 79 73 20 4f 53 46  ou have keys OSF
0bf0: 41 4d 49 4c 59 2f 56 41 52 49 41 4e 54 2f 4f 53  AMILY/VARIANT/OS
0c00: 56 45 52 2f 52 45 4c 45 41 53 45 20 79 6f 75 20  VER/RELEASE you 
0c10: 6d 61 79 20 67 65 74 20 61 20 74 65 73 74 20 5c  may get a test \
0c20: 22 62 75 69 6c 64 5c 22 0a 69 6e 20 61 20 64 69  "build\".in a di
0c30: 72 65 63 74 6f 72 79 20 6c 69 6b 65 20 74 68 69  rectory like thi
0c40: 73 3a 20 6c 69 6e 75 78 2f 75 62 75 6e 74 75 2f  s: linux/ubuntu/
0c50: 31 31 2e 30 34 2f 72 65 76 5f 31 2e 32 2f 62 75  11.04/rev_1.2/bu
0c60: 69 6c 64 0a 0a 50 6c 65 61 73 65 20 65 6e 74 65  ild..Please ente
0c70: 72 20 79 6f 75 72 20 6b 65 79 73 20 6e 6f 77 2c  r your keys now,
0c80: 20 73 65 70 61 72 61 74 65 64 20 62 79 20 73 70   separated by sp
0c90: 61 63 65 73 20 6f 72 20 73 6c 61 73 68 65 73 2e  aces or slashes.
0ca0: 20 4f 6e 6c 79 20 61 6c 70 68 61 2d 6e 75 6d 65   Only alpha-nume
0cb0: 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 20  ric characters. 
0cc0: 0a 55 70 70 65 72 20 63 61 73 65 20 72 65 63 6f  .Upper case reco
0cd0: 6d 6d 65 6e 64 65 64 2e 22 29 0a 20 20 20 20 28  mmended.").    (
0ce0: 64 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20 6b  display "Enter k
0cf0: 65 79 73 20 73 65 70 61 72 61 74 65 64 20 62 79  eys separated by
0d00: 20 73 70 61 63 65 73 20 6f 72 20 73 6c 61 73 68   spaces or slash
0d10: 65 73 3a 20 22 29 0a 20 20 20 20 28 73 65 74 21  es: ").    (set!
0d20: 20 6b 65 79 73 74 72 20 28 72 65 61 64 2d 6c 69   keystr (read-li
0d30: 6e 65 29 29 0a 20 20 20 20 28 73 65 74 21 20 6b  ne)).    (set! k
0d40: 65 79 73 20 20 20 28 61 70 70 6c 79 20 61 70 70  eys   (apply app
0d50: 65 6e 64 0a 09 09 09 28 6d 61 70 20 73 74 72 69  end....(map stri
0d60: 6e 67 2d 73 70 6c 69 74 20 28 73 74 72 69 6e 67  ng-split (string
0d70: 2d 73 70 6c 69 74 20 6b 65 79 73 74 72 20 22 2f  -split keystr "/
0d80: 22 29 29 29 29 0a 20 20 20 20 0a 20 20 20 20 3b  ")))).    .    ;
0d90: 3b 20 4e 6f 77 20 67 65 74 20 74 68 65 20 6c 69  ; Now get the li
0da0: 6e 6b 20 74 72 65 65 20 6c 6f 63 61 74 69 6f 6e  nk tree location
0db0: 20 61 6e 64 20 61 20 66 69 72 73 74 20 64 69 73   and a first dis
0dc0: 6b 0a 20 20 20 20 28 70 72 69 6e 74 20 22 3d 3d  k.    (print "==
0dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0de0: 5c 6e 4e 6f 77 20 79 6f 75 20 6e 65 65 64 20 61  \nNow you need a
0df0: 6e 20 69 6e 69 74 69 61 6c 20 70 6c 61 63 65 20  n initial place 
0e00: 74 6f 20 73 74 6f 72 65 20 79 6f 75 72 20 72 75  to store your ru
0e10: 6e 73 2e 20 54 68 65 73 65 20 61 72 65 20 63 61  ns. These are ca
0e20: 6c 6c 65 64 20 5c 22 64 69 73 6b 73 5c 22 20 61  lled \"disks\" a
0e30: 6e 64 20 79 6f 75 0a 63 61 6e 20 61 64 64 20 6d  nd you.can add m
0e40: 6f 72 65 20 61 74 20 61 6e 79 20 74 69 6d 65 2e  ore at any time.
0e50: 20 54 6f 20 67 65 74 20 67 6f 69 6e 67 20 70 72   To get going pr
0e60: 6f 76 69 64 65 20 61 20 77 72 69 74 65 61 62 6c  ovide a writeabl
0e70: 65 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65  e directory name
0e80: 2e 20 22 29 0a 20 20 20 20 28 64 69 73 70 6c 61  . ").    (displa
0e90: 79 20 22 45 6e 74 65 72 20 79 6f 75 72 20 74 65  y "Enter your te
0ea0: 73 74 20 72 75 6e 73 20 64 69 72 65 63 74 6f 72  st runs director
0eb0: 79 3a 20 22 29 0a 20 20 20 20 28 73 65 74 21 20  y: ").    (set! 
0ec0: 66 69 72 73 74 64 20 28 72 65 61 64 2d 6c 69 6e  firstd (read-lin
0ed0: 65 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74  e)).    (if (not
0ee0: 20 28 64 69 72 65 63 74 6f 72 79 3f 20 66 69 72   (directory? fir
0ef0: 73 74 64 29 29 0a 09 28 62 65 67 69 6e 0a 09 20  std))..(begin.. 
0f00: 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e 47   (print "WARNING
0f10: 3a 20 79 6f 75 20 68 61 76 65 20 73 70 65 63 69  : you have speci
0f20: 66 69 65 64 20 61 20 70 61 74 68 20 22 20 66 69  fied a path " fi
0f30: 72 73 74 64 20 22 20 74 68 61 74 20 64 6f 65 73  rstd " that does
0f40: 20 6e 6f 74 20 65 78 69 73 74 2e 20 41 74 74 65   not exist. Atte
0f50: 6d 70 74 69 6e 67 20 74 6f 20 63 72 65 61 74 65  mpting to create
0f60: 20 69 74 2e 2e 2e 5c 6e 22 29 0a 09 20 20 28 63   it...\n")..  (c
0f70: 72 65 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20  reate-directory 
0f80: 66 69 72 73 74 64 20 23 74 29 29 29 0a 0a 20 20  firstd #t)))..  
0f90: 20 20 28 70 72 69 6e 74 20 22 3d 3d 3d 3d 3d 3d    (print "======
0fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 4d 65  ============\nMe
0fb0: 67 61 74 65 73 74 20 75 73 65 73 20 61 20 74 72  gatest uses a tr
0fc0: 65 65 20 6f 66 20 73 79 6d 6c 69 6e 6b 73 20 74  ee of symlinks t
0fd0: 6f 20 70 72 6f 76 69 64 65 20 61 20 75 6e 69 66  o provide a unif
0fe0: 6f 72 6d 20 73 74 72 75 63 74 75 72 65 20 66 6f  orm structure fo
0ff0: 72 20 66 69 6e 64 69 6e 67 20 61 6c 6c 20 74 68  r finding all th
1000: 65 20 74 65 73 74 73 0a 79 6f 75 20 72 75 6e 20  e tests.you run 
1010: 6f 76 65 72 20 74 69 6d 65 2e 20 50 6c 65 61 73  over time. Pleas
1020: 65 20 70 72 6f 76 69 64 65 20 61 20 70 61 74 68  e provide a path
1030: 20 77 68 65 72 65 20 77 65 20 63 61 6e 20 63 72   where we can cr
1040: 65 61 74 65 20 74 68 69 73 20 6c 69 6e 6b 20 74  eate this link t
1050: 72 65 65 2e 22 29 0a 20 20 20 20 28 64 69 73 70  ree.").    (disp
1060: 6c 61 79 20 22 45 6e 74 65 72 20 6c 69 6e 6b 20  lay "Enter link 
1070: 74 72 65 65 20 64 69 72 65 63 74 6f 72 79 3a 20  tree directory: 
1080: 22 29 0a 20 20 20 20 28 73 65 74 21 20 6c 6e 74  ").    (set! lnt
1090: 72 65 65 20 28 72 65 61 64 2d 6c 69 6e 65 29 29  ree (read-line))
10a0: 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 64  .    (if (not (d
10b0: 69 72 65 63 74 6f 72 79 3f 20 6c 6e 74 72 65 65  irectory? lntree
10c0: 29 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 70  ))..(begin..  (p
10d0: 72 69 6e 74 20 22 57 41 52 4e 49 4e 47 3a 20 79  rint "WARNING: y
10e0: 6f 75 20 68 61 76 65 20 73 70 65 63 69 66 69 65  ou have specifie
10f0: 64 20 61 20 70 61 74 68 20 22 20 6c 6e 74 72 65  d a path " lntre
1100: 65 20 22 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  e "that does not
1110: 20 65 78 69 73 74 2e 20 41 74 74 65 6d 70 74 69   exist. Attempti
1120: 6e 67 20 74 6f 20 63 72 65 61 74 65 20 69 74 2e  ng to create it.
1130: 2e 2e 5c 6e 22 29 0a 09 20 20 28 63 72 65 61 74  ..\n")..  (creat
1140: 65 2d 64 69 72 65 63 74 6f 72 79 20 6c 6e 74 72  e-directory lntr
1150: 65 65 20 23 74 29 29 29 0a 20 20 20 20 0a 20 20  ee #t))).    .  
1160: 20 20 28 77 69 74 68 2d 6f 75 74 70 75 74 2d 74    (with-output-t
1170: 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20 70 61 74  o-file (conc pat
1180: 68 20 22 2f 6d 65 67 61 74 65 73 74 2e 63 6f 6e  h "/megatest.con
1190: 66 69 67 22 29 0a 20 20 20 20 20 20 28 6c 61 6d  fig").      (lam
11a0: 62 64 61 20 28 29 0a 09 28 70 72 69 6e 74 20 22  bda ()..(print "
11b0: 5b 66 69 65 6c 64 73 5d 22 29 0a 09 28 6d 61 70  [fields]")..(map
11c0: 20 28 6c 61 6d 62 64 61 20 28 6b 29 28 70 72 69   (lambda (k)(pri
11d0: 6e 74 20 6b 20 22 20 54 45 58 54 22 29 29 20 6b  nt k " TEXT")) k
11e0: 65 79 73 29 0a 09 28 70 72 69 6e 74 20 22 22 29  eys)..(print "")
11f0: 0a 09 28 70 72 69 6e 74 20 22 5b 73 65 74 75 70  ..(print "[setup
1200: 5d 22 29 0a 09 28 70 72 69 6e 74 20 22 23 20 41  ]")..(print "# A
1210: 64 6a 75 73 74 20 6d 61 78 5f 63 6f 6e 63 75 72  djust max_concur
1220: 72 65 6e 74 5f 6a 6f 62 73 20 74 6f 20 6c 69 6d  rent_jobs to lim
1230: 69 74 20 68 6f 77 20 6d 75 63 68 20 79 6f 75 20  it how much you 
1240: 6c 6f 61 64 20 79 6f 75 72 20 6d 61 63 68 69 6e  load your machin
1250: 65 73 22 29 0a 09 28 70 72 69 6e 74 20 22 6d 61  es")..(print "ma
1260: 78 5f 63 6f 6e 63 75 72 72 65 6e 74 5f 6a 6f 62  x_concurrent_job
1270: 73 20 35 30 5c 6e 22 29 0a 09 28 70 72 69 6e 74  s 50\n")..(print
1280: 20 22 23 20 54 68 69 73 20 69 73 20 79 6f 75 72   "# This is your
1290: 20 6c 69 6e 6b 20 70 61 74 68 2c 20 79 6f 75 20   link path, you 
12a0: 63 61 6e 20 6d 6f 76 65 20 69 74 20 62 75 74 20  can move it but 
12b0: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
12c0: 62 65 74 74 65 72 20 74 6f 20 6b 65 65 70 20 69  better to keep i
12d0: 74 20 73 74 61 62 6c 65 22 29 0a 09 28 70 72 69  t stable")..(pri
12e0: 6e 74 20 22 6c 69 6e 6b 74 72 65 65 20 22 20 6c  nt "linktree " l
12f0: 6e 74 72 65 65 29 0a 09 28 70 72 69 6e 74 20 22  ntree)..(print "
1300: 5c 6e 23 20 4a 6f 62 20 74 6f 6f 6c 73 20 61 72  \n# Job tools ar
1310: 65 20 6d 6f 72 65 20 61 64 76 61 6e 63 65 64 20  e more advanced 
1320: 77 61 79 73 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  ways to control 
1330: 68 6f 77 20 79 6f 75 72 20 6a 6f 62 73 20 61 72  how your jobs ar
1340: 65 20 6c 61 75 6e 63 68 65 64 22 29 0a 09 28 70  e launched")..(p
1350: 72 69 6e 74 20 22 5b 6a 6f 62 74 6f 6f 6c 73 5d  rint "[jobtools]
1360: 5c 6e 75 73 65 73 68 65 6c 6c 20 79 65 73 5c 6e  \nuseshell yes\n
1370: 6c 61 75 6e 63 68 65 72 20 6e 62 66 69 6e 64 5c  launcher nbfind\
1380: 6e 22 29 0a 09 28 70 72 69 6e 74 20 22 23 20 59  n")..(print "# Y
1390: 6f 75 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20  ou can override 
13a0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
13b0: 61 62 6c 65 73 20 66 6f 72 20 61 6c 6c 20 79 6f  ables for all yo
13c0: 75 72 20 74 65 73 74 73 20 68 65 72 65 22 29 0a  ur tests here").
13d0: 09 28 70 72 69 6e 74 20 22 5b 65 6e 76 2d 6f 76  .(print "[env-ov
13e0: 65 72 72 69 64 65 5d 5c 6e 45 58 41 4d 50 4c 45  erride]\nEXAMPLE
13f0: 5f 56 41 52 20 65 78 61 6d 70 6c 65 20 76 61 6c  _VAR example val
1400: 75 65 5c 6e 22 29 0a 09 28 70 72 69 6e 74 20 22  ue\n")..(print "
1410: 23 20 41 73 20 79 6f 75 20 72 75 6e 20 6d 6f 72  # As you run mor
1420: 65 20 74 65 73 74 73 20 79 6f 75 20 6d 61 79 20  e tests you may 
1430: 6e 65 65 64 20 74 6f 20 61 64 64 20 61 64 64 69  need to add addi
1440: 74 69 6f 6e 61 6c 20 64 69 73 6b 73 2c 20 74 68  tional disks, th
1450: 65 20 6e 61 6d 65 73 20 61 72 65 20 61 72 62 69  e names are arbi
1460: 74 72 61 72 79 20 62 75 74 20 6d 75 73 74 20 62  trary but must b
1470: 65 20 75 6e 69 71 75 65 22 29 0a 09 28 70 72 69  e unique")..(pri
1480: 6e 74 20 22 5b 64 69 73 6b 73 5d 5c 6e 64 69 73  nt "[disks]\ndis
1490: 6b 30 20 22 20 66 69 72 73 74 64 29 29 29 0a 0a  k0 " firstd)))..
14a0: 20 20 20 20 28 70 72 69 6e 74 20 22 3d 3d 3d 3d      (print "====
14b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e  ==============\n
14c0: 49 27 6d 20 6e 6f 77 20 63 72 65 61 74 69 6e 67  I'm now creating
14d0: 20 61 20 72 75 6e 63 6f 6e 66 69 67 73 2e 63 6f   a runconfigs.co
14e0: 6e 66 69 67 20 66 69 6c 65 20 66 6f 72 20 79 6f  nfig file for yo
14f0: 75 20 77 69 74 68 20 61 20 64 65 66 61 75 6c 74  u with a default
1500: 20 73 65 63 74 69 6f 6e 2e 0a 59 6f 75 20 63 61   section..You ca
1510: 6e 20 75 73 65 20 74 68 69 73 20 66 69 6c 65 20  n use this file 
1520: 74 6f 20 73 65 74 20 76 61 72 69 61 62 6c 65 73  to set variables
1530: 20 66 6f 72 20 79 6f 75 72 20 74 65 73 74 73 20   for your tests 
1540: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 5c 22 74  based on the \"t
1550: 61 72 67 65 74 5c 22 20 28 74 68 65 20 63 6f 6d  arget\" (the com
1560: 62 69 6e 61 74 69 6f 6e 0a 6f 66 20 6b 65 79 73  bination.of keys
1570: 29 2e 22 29 0a 20 20 20 20 28 77 69 74 68 2d 6f  ).").    (with-o
1580: 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63  utput-to-file (c
1590: 6f 6e 63 20 70 61 74 68 20 22 2f 72 75 6e 63 6f  onc path "/runco
15a0: 6e 66 69 67 73 2e 63 6f 6e 66 69 67 22 29 0a 20  nfigs.config"). 
15b0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a       (lambda ().
15c0: 09 28 70 72 69 6e 74 20 22 23 20 54 68 65 20 76  .(print "# The v
15d0: 61 72 69 61 62 6c 65 73 20 69 6e 20 74 68 65 20  ariables in the 
15e0: 64 65 66 61 75 6c 74 20 63 61 74 65 67 6f 72 79  default category
15f0: 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20 69 6e   will be seen in
1600: 20 61 6c 6c 20 72 75 6e 73 5c 6e 5b 64 65 66 61   all runs\n[defa
1610: 75 6c 74 5d 5c 6e 41 4c 4c 54 45 53 54 53 20 73  ult]\nALLTESTS s
1620: 65 65 20 74 68 69 73 20 76 61 72 69 61 62 6c 65  ee this variable
1630: 5c 6e 22 29 0a 09 0a 09 28 70 72 69 6e 74 20 22  \n")....(print "
1640: 23 20 59 6f 75 72 20 76 61 72 69 61 62 6c 65 73  # Your variables
1650: 20 68 65 72 65 20 61 72 65 20 67 72 6f 75 70 65   here are groupe
1660: 64 20 62 79 20 74 61 72 67 65 74 73 20 5b 22 20  d by targets [" 
1670: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65  (string-interspe
1680: 72 73 65 20 6b 65 79 73 20 22 2f 22 29 20 22 5d  rse keys "/") "]
1690: 22 29 0a 09 28 6c 65 74 20 28 28 65 78 61 6d 70  ")..(let ((examp
16a0: 6c 65 2d 74 61 72 67 65 74 20 28 73 74 72 69 6e  le-target (strin
16b0: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d  g-intersperse (m
16c0: 61 70 20 28 6c 61 6d 62 64 61 20 28 6b 29 28 63  ap (lambda (k)(c
16d0: 6f 6e 63 20 6b 20 22 5f 76 61 6c 22 29 29 20 6b  onc k "_val")) k
16e0: 65 79 73 29 20 22 2f 22 29 29 29 0a 09 20 20 28  eys) "/")))..  (
16f0: 70 72 69 6e 74 20 22 5b 22 20 65 78 61 6d 70 6c  print "[" exampl
1700: 65 2d 74 61 72 67 65 74 20 22 5d 22 29 0a 09 20  e-target "]").. 
1710: 20 28 70 72 69 6e 74 20 22 41 4e 4f 54 48 45 52   (print "ANOTHER
1720: 56 41 52 20 6f 6e 6c 79 20 64 65 66 69 6e 65 64  VAR only defined
1730: 20 69 66 20 74 61 72 67 65 74 20 69 73 20 22 20   if target is " 
1740: 65 78 61 6d 70 6c 65 2d 74 61 72 67 65 74 29 29  example-target))
1750: 29 29 0a 0a 20 20 20 20 3b 3b 20 4e 6f 77 20 63  ))..    ;; Now c
1760: 72 65 61 74 65 20 61 20 74 65 73 74 20 61 6e 64  reate a test and
1770: 20 6c 6f 67 70 72 6f 20 66 69 6c 65 0a 20 20 20   logpro file.   
1780: 20 28 70 72 69 6e 74 20 22 59 6f 75 20 6e 6f 77   (print "You now
1790: 20 68 61 76 65 20 74 68 65 20 62 61 73 69 63 20   have the basic 
17a0: 63 6f 6d 6d 6f 6e 20 66 69 6c 65 73 20 66 6f 72  common files for
17b0: 20 79 6f 75 72 20 6d 65 67 61 74 65 73 74 20 73   your megatest s
17c0: 65 74 75 70 2e 20 4e 65 78 74 20 72 75 6e 20 5c  etup. Next run \
17d0: 22 6d 65 67 61 74 65 73 74 20 2d 67 65 6e 74 65  "megatest -gente
17e0: 73 74 5c 22 5c 6e 22 0a 09 20 20 20 22 74 6f 20  st\"\n"..   "to 
17f0: 63 72 65 61 74 65 20 61 20 74 65 73 74 2e 5c 6e  create a test.\n
1800: 5c 6e 54 68 61 6e 6b 73 20 66 6f 72 20 75 73 69  \nThanks for usi
1810: 6e 67 20 4d 65 67 61 74 65 73 74 2e 20 59 6f 75  ng Megatest. You
1820: 20 63 61 6e 20 65 64 69 74 20 79 6f 75 72 20 63   can edit your c
1830: 6f 6e 66 69 67 20 66 69 6c 65 73 20 61 6e 64 20  onfig files and 
1840: 63 72 65 61 74 65 20 74 65 73 74 73 5c 6e 22 0a  create tests\n".
1850: 09 20 20 20 22 69 6e 20 74 68 65 20 22 20 70 61  .   "in the " pa
1860: 74 68 20 22 20 64 69 72 65 63 74 6f 72 79 22 29  th " directory")
1870: 29 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d  ))...;;=========
1880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
18a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
18b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b  =============.;;
18c0: 20 63 72 65 61 74 65 20 73 6b 65 6c 65 74 6f 6e   create skeleton
18d0: 20 66 69 6c 65 73 20 66 6f 72 20 61 20 74 65 73   files for a tes
18e0: 74 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  t.;;============
18f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66  ==========..(def
1930: 69 6e 65 20 28 67 65 6e 65 78 61 6d 70 6c 65 3a  ine (genexample:
1940: 6d 6b 2d 6d 65 67 61 74 65 73 74 2d 74 65 73 74  mk-megatest-test
1950: 20 74 65 73 74 6e 61 6d 65 29 0a 20 20 3b 3b 20   testname).  ;; 
1960: 47 61 74 68 65 72 20 6e 65 65 64 65 64 20 64 61  Gather needed da
1970: 74 61 0a 20 20 28 6c 65 74 20 28 28 77 61 69 74  ta.  (let ((wait
1980: 6f 6e 20 20 20 23 66 29 0a 09 28 70 72 69 6f 72  on   #f)..(prior
1990: 69 74 79 20 23 66 29 0a 09 28 64 65 73 63 72 69  ity #f)..(descri
19a0: 70 74 69 6f 6e 20 23 66 29 0a 09 28 73 74 65 70  ption #f)..(step
19b0: 73 20 20 20 20 27 28 29 29 0a 09 28 73 63 72 69  s    '())..(scri
19c0: 70 74 73 20 20 27 28 29 29 0a 09 28 69 74 65 6d  pts  '())..(item
19d0: 73 20 20 20 20 27 28 29 29 0a 09 28 72 65 6c 2d  s    '())..(rel-
19e0: 70 61 74 68 20 23 66 29 29 0a 0a 20 20 20 20 28  path #f))..    (
19f0: 63 6f 6e 64 0a 20 20 20 20 20 28 28 66 69 6c 65  cond.     ((file
1a00: 2d 65 78 69 73 74 73 3f 20 22 6d 65 67 61 74 65  -exists? "megate
1a10: 73 74 2e 63 6f 6e 66 69 67 22 29 20 20 20 20 20  st.config")     
1a20: 20 20 20 20 28 73 65 74 21 20 72 65 6c 2d 70 61      (set! rel-pa
1a30: 74 68 20 22 2e 2f 22 29 29 0a 20 20 20 20 20 28  th "./")).     (
1a40: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e  (file-exists? ".
1a50: 2e 2f 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69  ./megatest.confi
1a60: 67 22 29 20 20 20 20 20 20 28 73 65 74 21 20 72  g")      (set! r
1a70: 65 6c 2d 70 61 74 68 20 22 2e 2e 2f 22 29 29 0a  el-path "../")).
1a80: 20 20 20 20 20 28 28 66 69 6c 65 2d 65 78 69 73       ((file-exis
1a90: 74 73 3f 20 22 2e 2e 2f 2e 2e 2f 6d 65 67 61 74  ts? "../../megat
1aa0: 65 73 74 2e 63 6f 6e 66 69 67 22 29 20 20 20 28  est.config")   (
1ab0: 73 65 74 21 20 72 65 6c 2d 70 61 74 68 20 22 2e  set! rel-path ".
1ac0: 2e 2f 2e 2e 2f 22 29 29 0a 20 20 20 20 20 28 28  ./../")).     ((
1ad0: 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e 2e  file-exists? "..
1ae0: 2f 2e 2e 2f 2e 2e 2f 6d 65 67 61 74 65 73 74 2e  /../../megatest.
1af0: 63 6f 6e 66 69 67 22 29 28 73 65 74 21 20 72 65  config")(set! re
1b00: 6c 2d 70 61 74 68 20 22 2e 2e 2f 2e 2e 2f 2e 2e  l-path "../../..
1b10: 2f 22 29 29 29 20 3b 3b 20 67 6f 6f 64 20 65 6e  /"))) ;; good en
1b20: 6f 75 67 68 20 64 61 6e 67 20 69 74 2e 0a 0a 20  ough dang it... 
1b30: 20 20 20 3b 3b 20 44 6f 6e 27 74 20 67 61 74 68     ;; Don't gath
1b40: 65 72 20 64 61 74 61 20 6f 72 20 63 6f 6e 74 69  er data or conti
1b50: 6e 75 65 20 69 66 20 61 29 20 6d 65 67 61 74 65  nue if a) megate
1b60: 73 74 2e 63 6f 6e 66 69 67 20 63 61 6e 27 74 20  st.config can't 
1b70: 62 65 20 66 6f 75 6e 64 20 6f 72 20 62 29 20 74  be found or b) t
1b80: 65 73 74 63 6f 6e 66 69 67 20 61 6c 72 65 61 64  estconfig alread
1b90: 79 20 65 78 69 73 74 73 0a 20 20 20 20 28 69 66  y exists.    (if
1ba0: 20 28 6e 6f 74 20 72 65 6c 2d 70 61 74 68 29 0a   (not rel-path).
1bb0: 09 28 62 65 67 69 6e 0a 09 20 20 28 70 72 69 6e  .(begin..  (prin
1bc0: 74 20 22 45 52 52 4f 52 3a 20 49 20 63 6f 75 6c  t "ERROR: I coul
1bd0: 64 20 6e 6f 74 20 66 69 6e 64 20 6d 65 67 61 74  d not find megat
1be0: 65 73 74 2e 63 6f 6e 66 69 67 2c 20 70 6c 65 61  est.config, plea
1bf0: 73 65 20 72 75 6e 20 2d 67 65 74 2d 6d 65 67 61  se run -get-mega
1c00: 74 65 73 74 2d 74 65 73 74 20 69 6e 20 74 68 65  test-test in the
1c10: 20 74 6f 70 20 64 69 72 20 6f 66 20 79 6f 75 72   top dir of your
1c20: 20 6d 65 67 61 74 65 73 74 20 61 72 65 61 22 29   megatest area")
1c30: 0a 09 20 20 28 65 78 69 74 20 31 29 29 29 0a 0a  ..  (exit 1)))..
1c40: 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 65 78      (if (file-ex
1c50: 69 73 74 73 3f 20 28 63 6f 6e 63 20 72 65 6c 2d  ists? (conc rel-
1c60: 70 61 74 68 20 22 74 65 73 74 73 2f 22 20 74 65  path "tests/" te
1c70: 73 74 6e 61 6d 65 20 22 2f 74 65 73 74 63 6f 6e  stname "/testcon
1c80: 66 69 67 22 29 29 0a 09 28 62 65 67 69 6e 0a 09  fig"))..(begin..
1c90: 20 20 28 70 72 69 6e 74 20 22 57 41 52 4e 49 4e    (print "WARNIN
1ca0: 47 3a 20 59 6f 75 20 61 6c 72 65 61 64 79 20 68  G: You already h
1cb0: 61 76 65 20 61 20 74 65 73 74 63 6f 6e 66 69 67  ave a testconfig
1cc0: 20 69 6e 20 22 20 72 65 6c 2d 70 61 74 68 20 22   in " rel-path "
1cd0: 74 65 73 74 73 2f 22 20 74 65 73 74 6e 61 6d 65  tests/" testname
1ce0: 20 22 2c 20 64 6f 20 79 6f 75 20 77 61 6e 74 20   ", do you want 
1cf0: 74 6f 20 63 6c 6f 62 62 65 72 20 79 6f 75 72 20  to clobber your 
1d00: 66 69 6c 65 73 3f 22 29 0a 09 20 20 28 64 69 73  files?")..  (dis
1d10: 70 6c 61 79 20 22 45 6e 74 65 72 20 79 2f 6e 3a  play "Enter y/n:
1d20: 20 22 29 0a 09 20 20 28 69 66 20 28 6e 6f 74 20   ")..  (if (not 
1d30: 28 65 71 75 61 6c 3f 20 22 79 22 20 28 72 65 61  (equal? "y" (rea
1d40: 64 2d 6c 69 6e 65 29 29 29 0a 09 20 20 20 20 20  d-line)))..     
1d50: 20 28 62 65 67 69 6e 0a 09 09 28 70 72 69 6e 74   (begin...(print
1d60: 20 22 49 4e 46 4f 3a 20 75 73 65 72 20 61 62 6f   "INFO: user abo
1d70: 72 74 20 6f 66 20 63 72 65 61 74 69 6f 6e 20 6f  rt of creation o
1d80: 66 20 74 65 73 74 20 22 20 74 65 73 74 6e 61 6d  f test " testnam
1d90: 65 29 0a 09 09 28 65 78 69 74 20 31 29 29 29 29  e)...(exit 1))))
1da0: 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20 22 57  )..    (print "W
1db0: 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 67  e are going to g
1dc0: 65 6e 65 72 61 74 65 20 61 20 73 6b 65 6c 65 74  enerate a skelet
1dd0: 6f 6e 20 73 65 74 20 6f 66 20 66 69 6c 65 73 20  on set of files 
1de0: 66 6f 72 20 79 6f 75 72 20 74 65 73 74 20 22 20  for your test " 
1df0: 74 65 73 74 6e 61 6d 65 20 22 5c 6e 22 0a 09 20  testname "\n".. 
1e00: 20 20 22 20 2a 2a 2a 20 4e 6f 74 65 3a 20 64 6f    " *** Note: do
1e10: 20 6e 6f 74 20 77 6f 72 72 79 20 74 6f 6f 20 6d   not worry too m
1e20: 75 63 68 20 61 62 6f 75 74 20 74 79 70 6f 73 2c  uch about typos,
1e30: 20 79 6f 75 20 63 61 6e 20 65 64 69 74 20 74 68   you can edit th
1e40: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
1e50: 77 68 65 6e 20 79 6f 75 20 61 72 65 20 64 6f 6e  when you are don
1e60: 65 2e 22 29 0a 0a 20 20 20 20 28 70 72 69 6e 74  e.")..    (print
1e70: 20 22 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   "\n\n==========
1e80: 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e 50 6c 65 61 73 65  ========\nPlease
1e90: 20 64 65 73 63 72 69 62 65 20 74 68 69 73 20 74   describe this t
1ea0: 65 73 74 2e 20 54 68 65 20 64 65 73 63 72 69 70  est. The descrip
1eb0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 76 69 73  tion will be vis
1ec0: 69 62 6c 65 20 69 6e 20 76 61 72 69 6f 75 73 20  ible in various 
1ed0: 64 69 61 6c 6f 67 73 20 61 6e 64 20 72 65 70 6f  dialogs and repo
1ee0: 72 74 73 22 29 0a 20 20 20 20 28 64 69 73 70 6c  rts").    (displ
1ef0: 61 79 20 22 45 6e 74 65 72 20 6f 6e 65 20 6c 69  ay "Enter one li
1f00: 6e 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 66  ne description f
1f10: 6f 72 20 74 68 69 73 20 74 65 73 74 3a 20 22 29  or this test: ")
1f20: 0a 20 20 20 20 28 73 65 74 21 20 64 65 73 63 72  .    (set! descr
1f30: 69 70 74 69 6f 6e 20 28 72 65 61 64 2d 6c 69 6e  iption (read-lin
1f40: 65 29 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20  e))..    (print 
1f50: 22 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  "\n\n===========
1f60: 3d 3d 3d 3d 3d 3d 3d 5c 6e 44 6f 65 73 20 74 68  =======\nDoes th
1f70: 69 73 20 74 65 73 74 2c 20 22 20 74 65 73 74 6e  is test, " testn
1f80: 61 6d 65 20 22 2c 20 72 65 71 75 69 72 65 20 61  ame ", require a
1f90: 6e 79 20 6f 74 68 65 72 20 74 65 73 74 20 62 65  ny other test be
1fa0: 20 72 75 6e 20 70 72 69 6f 72 20 74 6f 20 6c 61   run prior to la
1fb0: 75 6e 63 68 3f 22 29 0a 20 20 20 20 28 64 69 73  unch?").    (dis
1fc0: 70 6c 61 79 20 28 63 6f 6e 63 20 22 45 6e 74 65  play (conc "Ente
1fd0: 72 20 73 70 61 63 65 20 64 65 6c 69 6d 69 74 65  r space delimite
1fe0: 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74 73 20  d list of tests 
1ff0: 77 68 69 63 68 20 22 20 74 65 73 74 6e 61 6d 65  which " testname
2000: 20 22 20 6d 75 73 74 20 77 61 69 74 20 66 6f 72   " must wait for
2010: 3a 20 22 29 29 0a 20 20 20 20 28 73 65 74 21 20  : ")).    (set! 
2020: 77 61 69 74 6f 6e 20 28 72 65 61 64 2d 6c 69 6e  waiton (read-lin
2030: 65 29 29 0a 0a 20 20 20 20 28 70 72 69 6e 74 20  e))..    (print 
2040: 22 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  "\n\n===========
2050: 3d 3d 3d 3d 3d 3d 3d 5c 6e 44 6f 20 79 6f 75 20  =======\nDo you 
2060: 77 69 73 68 20 74 6f 20 70 72 69 6f 72 69 74 69  wish to prioriti
2070: 7a 65 20 74 68 65 20 72 75 6e 6e 69 6e 67 20 6f  ze the running o
2080: 66 20 74 68 69 73 20 74 65 73 74 20 6f 76 65 72  f this test over
2090: 20 6f 74 68 65 72 20 74 65 73 74 73 3f 20 49 66   other tests? If
20a0: 20 73 6f 22 29 0a 20 20 20 20 28 70 72 69 6e 74   so").    (print
20b0: 20 22 65 6e 74 65 72 20 61 20 6e 75 6d 62 65 72   "enter a number
20c0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
20d0: 72 6f 20 68 65 72 65 22 29 0a 20 20 20 20 28 64  ro here").    (d
20e0: 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20 61 20  isplay "Enter a 
20f0: 70 72 69 6f 72 69 74 79 20 6f 66 20 30 20 28 64  priority of 0 (d
2100: 65 66 61 75 6c 74 29 20 6f 72 20 68 69 67 68 65  efault) or highe
2110: 72 3a 20 22 29 0a 20 20 20 20 28 73 65 74 21 20  r: ").    (set! 
2120: 70 72 69 6f 72 69 74 79 20 28 72 65 61 64 2d 6c  priority (read-l
2130: 69 6e 65 29 29 0a 0a 20 20 20 20 3b 3b 20 47 65  ine))..    ;; Ge
2140: 74 20 74 68 65 20 73 74 65 70 73 0a 20 20 20 20  t the steps.    
2150: 28 70 72 69 6e 74 20 22 5c 6e 5c 6e 3d 3d 3d 3d  (print "\n\n====
2160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e  ==============\n
2170: 4e 6f 77 20 74 6f 20 65 6e 74 65 72 20 74 68 65  Now to enter the
2180: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 74 65   one or more ste
2190: 70 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  ps that make up 
21a0: 79 6f 75 72 20 74 65 73 74 2c 20 6e 6f 74 65 3b  your test, note;
21b0: 20 79 6f 75 20 63 61 6e 20 61 64 64 20 6d 6f 72   you can add mor
21c0: 65 20 6c 61 74 65 72 22 29 0a 20 20 20 20 28 70  e later").    (p
21d0: 72 69 6e 74 20 22 48 69 6e 74 3b 20 75 73 65 20  rint "Hint; use 
21e0: 2e 73 68 20 65 78 74 65 6e 73 69 6f 6e 20 6f 6e  .sh extension on
21f0: 20 74 68 65 20 73 63 72 69 70 74 20 6e 61 6d 65   the script name
2200: 73 20 61 6e 64 20 77 65 27 6c 6c 20 63 72 65 61  s and we'll crea
2210: 74 65 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 73  te placeholder s
2220: 63 72 69 70 74 73 2e 22 0a 0a 20 20 20 20 28 6c  cripts."..    (l
2230: 65 74 20 28 28 73 74 65 70 6e 61 6d 65 20 20 20  et ((stepname   
2240: 23 66 29 0a 09 20 20 28 73 63 72 69 70 74 6e 61  #f)..  (scriptna
2250: 6d 65 20 23 66 29 29 0a 20 20 20 20 20 20 28 6c  me #f)).      (l
2260: 65 74 20 6c 6f 6f 70 20 28 28 64 6f 6e 65 20 23  et loop ((done #
2270: 66 29 29 0a 09 28 64 69 73 70 6c 61 79 20 22 45  f))..(display "E
2280: 6e 74 65 72 20 74 68 65 20 6e 61 6d 65 20 66 6f  nter the name fo
2290: 72 20 74 68 69 73 20 73 74 65 70 20 28 62 6c 61  r this step (bla
22a0: 6e 6b 20 74 6f 20 73 74 6f 70 29 3a 20 22 29 0a  nk to stop): ").
22b0: 09 28 73 65 74 21 20 73 74 65 70 6e 61 6d 65 20  .(set! stepname 
22c0: 28 72 65 61 64 2d 6c 69 6e 65 29 29 0a 09 28 69  (read-line))..(i
22d0: 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 73  f (not (equal? s
22e0: 74 65 70 6e 61 6d 65 20 22 22 29 29 0a 09 20 20  tepname ""))..  
22f0: 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 20 20    (begin..      
2300: 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20  (display "Enter 
2310: 74 68 65 20 73 63 72 69 70 74 20 6f 72 20 70 72  the script or pr
2320: 6f 67 61 6d 20 74 6f 20 72 75 6e 3a 20 22 29 0a  ogam to run: ").
2330: 09 20 20 20 20 20 20 28 73 65 74 21 20 73 63 72  .      (set! scr
2340: 69 70 74 6e 61 6d 65 20 28 72 65 61 64 2d 6c 69  iptname (read-li
2350: 6e 65 29 29 0a 09 20 20 20 20 20 20 28 73 65 74  ne))..      (set
2360: 21 20 73 74 65 70 73 20 28 61 70 70 65 6e 64 20  ! steps (append 
2370: 73 74 65 70 73 20 28 6c 69 73 74 20 28 6c 69 73  steps (list (lis
2380: 74 20 73 74 65 70 6e 61 6d 65 20 73 63 72 69 70  t stepname scrip
2390: 74 6e 61 6d 65 29 29 29 29 29 29 0a 09 28 69 66  tname))))))..(if
23a0: 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 73 74   (not (equal? st
23b0: 65 70 6e 61 6d 65 20 22 22 29 29 0a 09 20 20 20  epname ""))..   
23c0: 20 28 6c 6f 6f 70 20 23 66 29 29 29 29 0a 0a 20   (loop #f)))).. 
23d0: 20 20 20 3b 3b 20 47 65 74 20 74 68 65 20 69 74     ;; Get the it
23e0: 65 6d 73 0a 20 20 20 20 28 70 72 69 6e 74 20 22  ems.    (print "
23f0: 5c 6e 5c 6e 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  \n\n============
2400: 3d 3d 3d 3d 3d 3d 5c 6e 4e 65 78 74 20 77 65 20  ======\nNext we 
2410: 6e 65 65 64 20 74 6f 20 67 65 74 20 74 68 65 20  need to get the 
2420: 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 76 61  variables and va
2430: 6c 75 65 73 20 79 6f 75 20 77 69 73 68 20 74 6f  lues you wish to
2440: 20 69 74 65 72 61 74 65 20 74 68 69 73 20 74 65   iterate this te
2450: 73 74 20 6f 76 65 72 20 28 62 6c 61 6e 6b 20 66  st over (blank f
2460: 6f 72 20 6e 6f 6e 65 29 22 29 0a 20 20 20 20 28  or none)").    (
2470: 6c 65 74 20 28 28 76 61 72 6e 61 6d 65 20 23 66  let ((varname #f
2480: 29 0a 09 20 20 28 76 61 6c 75 65 73 20 20 23 66  )..  (values  #f
2490: 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 6c 6f  )).      (let lo
24a0: 6f 70 20 28 28 64 6f 6e 65 20 23 66 29 29 0a 09  op ((done #f))..
24b0: 28 64 69 73 70 6c 61 79 20 22 45 6e 74 65 72 20  (display "Enter 
24c0: 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  the variable nam
24d0: 65 3a 20 22 29 0a 09 28 73 65 74 21 20 76 61 72  e: ")..(set! var
24e0: 6e 61 6d 65 20 28 72 65 61 64 2d 6c 69 6e 65 29  name (read-line)
24f0: 29 0a 09 28 69 66 20 28 6e 6f 74 20 28 65 71 75  )..(if (not (equ
2500: 61 6c 3f 20 76 61 72 6e 61 6d 65 20 22 22 29 29  al? varname ""))
2510: 0a 09 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20  ..    (begin..  
2520: 20 20 20 20 28 64 69 73 70 6c 61 79 20 28 63 6f      (display (co
2530: 6e 63 20 22 45 6e 74 65 72 20 74 68 65 20 73 70  nc "Enter the sp
2540: 61 63 65 20 73 65 70 61 72 61 74 65 64 20 6c 69  ace separated li
2550: 73 74 20 6f 66 20 76 61 6c 75 65 73 20 66 6f 72  st of values for
2560: 20 22 20 76 61 72 6e 61 6d 65 20 22 3a 20 22 29   " varname ": ")
2570: 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20 76  )..      (set! v
2580: 61 6c 75 65 73 20 28 72 65 61 64 2d 6c 69 6e 65  alues (read-line
2590: 29 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20  ))..      (set! 
25a0: 69 74 65 6d 73 20 28 61 70 70 65 6e 64 20 69 74  items (append it
25b0: 65 6d 73 20 28 6c 69 73 74 20 28 63 6f 6e 63 20  ems (list (conc 
25c0: 76 61 72 6e 61 6d 65 20 22 20 22 20 76 61 6c 75  varname " " valu
25d0: 65 73 29 29 29 29 29 29 0a 09 28 69 66 20 28 6e  es))))))..(if (n
25e0: 6f 74 20 28 65 71 75 61 6c 3f 20 76 61 72 6e 61  ot (equal? varna
25f0: 6d 65 20 22 22 29 29 0a 09 20 20 20 20 28 6c 6f  me ""))..    (lo
2600: 6f 70 20 23 66 29 29 29 29 0a 0a 20 20 20 20 3b  op #f))))..    ;
2610: 3b 20 4e 6f 77 20 63 72 65 61 74 65 20 74 68 65  ; Now create the
2620: 20 74 65 73 74 0a 20 20 20 20 28 69 66 20 28 6e   test.    (if (n
2630: 6f 74 20 72 65 6c 2d 70 61 74 68 29 0a 09 28 62  ot rel-path)..(b
2640: 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20 22  egin..  (print "
2650: 45 52 52 4f 52 3a 20 59 6f 75 20 6d 75 73 74 20  ERROR: You must 
2660: 72 75 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  run this command
2670: 20 69 6e 20 61 20 6d 65 67 61 74 65 73 74 20 61   in a megatest a
2680: 72 65 61 20 75 6e 64 65 72 20 77 68 65 72 65 20  rea under where 
2690: 74 68 65 20 6d 65 67 61 74 65 73 74 2e 63 6f 6e  the megatest.con
26a0: 66 69 67 20 66 69 6c 65 20 65 78 69 73 74 73 2e  fig file exists.
26b0: 22 29 0a 09 20 20 28 65 78 69 74 20 31 29 29 0a  ")..  (exit 1)).
26c0: 09 28 6c 65 74 20 28 28 74 65 73 74 64 69 72 20  .(let ((testdir 
26d0: 28 63 6f 6e 63 20 72 65 6c 2d 70 61 74 68 20 22  (conc rel-path "
26e0: 74 65 73 74 73 2f 22 20 74 65 73 74 6e 61 6d 65  tests/" testname
26f0: 29 29 29 0a 09 20 20 28 63 72 65 61 74 65 2d 64  )))..  (create-d
2700: 69 72 65 63 74 6f 72 79 20 74 65 73 74 64 69 72  irectory testdir
2710: 20 23 74 29 0a 09 20 20 28 77 69 74 68 2d 6f 75   #t)..  (with-ou
2720: 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63 6f  tput-to-file (co
2730: 6e 63 20 74 65 73 74 64 69 72 20 22 2f 74 65 73  nc testdir "/tes
2740: 74 63 6f 6e 66 69 67 22 29 0a 09 20 20 20 20 28  tconfig")..    (
2750: 6c 61 6d 62 64 61 20 28 29 0a 09 20 20 20 20 20  lambda ()..     
2760: 20 28 70 72 69 6e 74 20 22 23 20 41 64 64 20 61   (print "# Add a
2770: 64 64 69 74 69 6f 6e 61 6c 20 73 74 65 70 73 20  dditional steps 
2780: 68 65 72 65 2e 20 46 6f 72 6d 61 74 20 69 73 20  here. Format is 
2790: 5c 22 73 74 65 70 6e 61 6d 65 20 73 63 72 69 70  \"stepname scrip
27a0: 74 5c 22 5c 6e 5b 65 7a 73 74 65 70 73 5d 22 29  t\"\n[ezsteps]")
27b0: 0a 09 20 20 20 20 20 20 28 6d 61 70 20 28 6c 61  ..      (map (la
27c0: 6d 62 64 61 20 28 73 74 70 29 28 70 72 69 6e 74  mbda (stp)(print
27d0: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70   (string-intersp
27e0: 65 72 73 65 20 73 74 70 20 22 20 22 29 29 29 20  erse stp " "))) 
27f0: 73 74 65 70 73 29 0a 09 20 20 20 20 20 20 28 70  steps)..      (p
2800: 72 69 6e 74 20 22 22 29 0a 09 20 20 20 20 20 20  rint "")..      
2810: 28 70 72 69 6e 74 20 22 23 20 54 65 73 74 20 72  (print "# Test r
2820: 65 71 75 69 72 65 6d 65 6e 74 73 20 61 72 65 20  equirements are 
2830: 73 70 65 63 69 66 69 65 64 20 68 65 72 65 5c 6e  specified here\n
2840: 5b 72 65 71 75 69 72 65 6d 65 6e 74 73 5d 22 29  [requirements]")
2850: 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20 22  ..      (print "
2860: 77 61 69 74 6f 6e 20 22 20 77 61 69 74 6f 6e 29  waiton " waiton)
2870: 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20 22  ..      (print "
2880: 70 72 69 6f 72 69 74 79 20 22 20 70 72 69 6f 72  priority " prior
2890: 69 74 79 20 22 5c 6e 22 29 0a 09 20 20 20 20 20  ity "\n")..     
28a0: 20 28 70 72 69 6e 74 20 22 23 20 49 74 65 72 61   (print "# Itera
28b0: 74 69 6f 6e 20 66 6f 72 20 79 6f 75 72 20 74 65  tion for your te
28c0: 73 74 73 20 61 72 65 20 63 6f 6e 74 72 6f 6c 6c  sts are controll
28d0: 65 64 20 62 79 20 74 68 65 20 69 74 65 6d 73 20  ed by the items 
28e0: 73 65 63 74 69 6f 6e 5c 6e 5b 69 74 65 6d 73 5d  section\n[items]
28f0: 22 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20 70  ")..      (map p
2900: 72 69 6e 74 20 69 74 65 6d 73 29 0a 09 20 20 20  rint items)..   
2910: 20 20 20 28 70 72 69 6e 74 20 22 22 29 0a 09 20     (print "").. 
2920: 20 20 20 20 20 28 70 72 69 6e 74 20 22 23 20 74       (print "# t
2930: 65 73 74 5f 6d 65 74 61 20 69 73 20 61 20 73 65  est_meta is a se
2940: 63 74 69 6f 6e 20 66 6f 72 20 73 74 6f 72 69 6e  ction for storin
2950: 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  g additional dat
2960: 61 20 6f 6e 20 79 6f 75 72 20 74 65 73 74 5c 6e  a on your test\n
2970: 5b 74 65 73 74 5f 6d 65 74 61 5d 22 29 0a 09 20  [test_meta]").. 
2980: 20 20 20 20 20 28 70 72 69 6e 74 20 22 61 75 74       (print "aut
2990: 68 6f 72 20 22 20 28 67 65 74 2d 65 6e 76 69 72  hor " (get-envir
29a0: 6f 6e 6d 65 6e 74 2d 76 61 72 69 61 62 6c 65 20  onment-variable 
29b0: 22 55 53 45 52 22 29 29 0a 09 20 20 20 20 20 20  "USER"))..      
29c0: 28 70 72 69 6e 74 20 22 6f 77 6e 65 72 20 20 22  (print "owner  "
29d0: 20 28 67 65 74 2d 65 6e 76 69 72 6f 6e 6d 65 6e   (get-environmen
29e0: 74 2d 76 61 72 69 61 62 6c 65 20 22 55 53 45 52  t-variable "USER
29f0: 22 29 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e  "))..      (prin
2a00: 74 20 22 64 65 73 63 72 69 70 74 69 6f 6e 20 22  t "description "
2a10: 20 64 65 73 63 72 69 70 74 69 6f 6e 29 0a 09 20   description).. 
2a20: 20 20 20 20 20 28 70 72 69 6e 74 20 22 74 61 67       (print "tag
2a30: 73 20 74 61 67 6f 6e 65 2c 74 61 67 74 77 6f 22  s tagone,tagtwo"
2a40: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 20  )..      (print 
2a50: 22 72 65 76 69 65 77 65 64 20 6e 65 76 65 72 22  "reviewed never"
2a60: 29 29 29 0a 09 20 20 3b 3b 20 4e 6f 77 20 63 72  )))..  ;; Now cr
2a70: 65 61 74 65 20 73 68 65 6c 6c 20 73 63 72 69 70  eate shell scrip
2a80: 74 73 20 28 69 66 20 65 78 74 65 6e 73 69 6f 6e  ts (if extension
2a90: 20 69 73 20 2e 73 68 29 20 61 6e 64 20 6c 6f 67   is .sh) and log
2aa0: 70 72 6f 20 66 69 6c 65 73 0a 09 20 20 28 66 6f  pro files..  (fo
2ab0: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28  r-each (lambda (
2ac0: 73 74 70 29 0a 09 09 20 20 20 20 20 20 28 6c 65  stp)...      (le
2ad0: 74 20 28 28 73 74 65 70 6e 61 6d 65 20 28 63 61  t ((stepname (ca
2ae0: 72 20 73 74 70 29 29 0a 09 09 09 20 20 20 20 28  r stp))....    (
2af0: 73 63 72 69 70 74 20 20 20 28 63 61 64 72 20 73  script   (cadr s
2b00: 74 70 29 29 29 0a 09 09 09 28 77 69 74 68 2d 6f  tp)))....(with-o
2b10: 75 74 70 75 74 2d 74 6f 2d 66 69 6c 65 20 28 63  utput-to-file (c
2b20: 6f 6e 63 20 74 65 73 74 64 69 72 20 22 2f 22 20  onc testdir "/" 
2b30: 73 74 65 70 6e 61 6d 65 20 22 2e 6c 6f 67 70 72  stepname ".logpr
2b40: 6f 22 29 0a 09 09 09 20 20 28 6c 61 6d 62 64 61  o")....  (lambda
2b50: 20 28 29 0a 09 09 09 20 20 20 20 28 70 72 69 6e   ()....    (prin
2b60: 74 20 67 65 6e 65 78 61 6d 70 6c 65 3a 65 78 61  t genexample:exa
2b70: 6d 70 6c 65 2d 6c 6f 67 70 72 6f 29 29 29 0a 09  mple-logpro)))..
2b80: 09 09 28 77 69 74 68 2d 6f 75 74 70 75 74 2d 74  ..(with-output-t
2b90: 6f 2d 66 69 6c 65 20 28 63 6f 6e 63 20 74 65 73  o-file (conc tes
2ba0: 74 64 69 72 20 22 2f 22 20 73 63 72 69 70 74 20  tdir "/" script 
2bb0: 22 2e 73 68 22 29 0a 09 09 09 20 20 28 6c 61 6d  ".sh")....  (lam
2bc0: 62 64 61 20 28 29 0a 09 09 09 20 20 20 20 28 70  bda ()....    (p
2bd0: 72 69 6e 74 20 67 65 6e 65 78 61 6d 70 6c 65 3a  rint genexample:
2be0: 65 78 61 6d 70 6c 65 2d 73 63 72 69 70 74 29 29  example-script))
2bf0: 29 0a 09 09 09 28 73 79 73 74 65 6d 20 28 63 6f  )....(system (co
2c00: 6e 63 20 22 63 68 6d 6f 64 20 75 67 2b 72 20 22  nc "chmod ug+r "
2c10: 20 28 63 6f 6e 63 20 74 65 73 74 64 69 72 20 22   (conc testdir "
2c20: 2f 22 20 73 63 72 69 70 74 20 22 2e 73 68 22 29  /" script ".sh")
2c30: 29 29 29 29 0a 09 09 20 20 20 20 73 74 65 70 73  ))))...    steps
2c40: 29 29 29 29 29 29 0a 09 20 20 3b 3b 20 0a        ))))))..  ;; .