Hex Artifact Content

Artifact 174270376e84ec93f254c6fda8ad6763b70c4a28:


0000: 70 61 63 6b 61 67 65 20 6d 61 69 6e 0a 0a 69 6d  package main..im
0010: 70 6f 72 74 20 28 0a 09 22 73 74 72 69 6e 67 73  port (.."strings
0020: 22 0a 09 22 74 65 73 74 69 6e 67 22 0a 29 0a 0a  ".."testing".)..
0030: 76 61 72 20 28 0a 09 74 62 64 61 74 61 20 73 74  var (..tbdata st
0040: 72 69 6e 67 20 3d 20 60 69 6d 70 6c 65 6d 65 6e  ring = `implemen
0050: 74 20 6d 6f 72 65 20 23 74 65 73 74 73 0a 65 78  t more #tests.ex
0060: 74 72 61 63 74 20 63 6f 64 65 20 6f 75 74 20 6f  tract code out o
0070: 66 20 23 6d 61 69 6e 0a 73 75 70 70 6f 72 74 20  f #main.support 
0080: 63 67 69 2f 66 61 73 74 2d 63 67 69 20 69 6e 20  cgi/fast-cgi in 
0090: 23 6d 61 69 6e 60 0a 29 0a 0a 66 75 6e 63 20 54  #main`.)..func T
00a0: 65 73 74 4e 6f 41 72 67 73 28 74 20 2a 74 65 73  estNoArgs(t *tes
00b0: 74 69 6e 67 2e 54 29 20 7b 0a 09 2f 2f 20 43 6f  ting.T) {..// Co
00c0: 6e 66 69 67 75 72 65 20 74 68 65 20 68 61 6e 64  nfigure the hand
00d0: 6c 65 72 73 20 2e 2e 2e 0a 09 2f 2f 20 55 73 65  lers .....// Use
00e0: 20 61 20 63 6f 6c 6c 65 63 74 69 6e 67 20 68 61   a collecting ha
00f0: 6e 64 6c 65 72 20 74 6f 20 63 61 74 63 68 20 61  ndler to catch a
0100: 6c 6c 20 74 61 73 6b 73 20 72 69 67 68 74 20 61  ll tasks right a
0110: 66 74 65 72 20 74 68 65 79 20 61 72 65 20 70 61  fter they are pa
0120: 72 73 65 64 0a 09 2f 2f 20 73 6f 20 77 65 20 68  rsed..// so we h
0130: 61 76 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 6f  ave something to
0140: 20 65 61 73 69 6c 79 20 63 6f 6d 70 61 72 65 20   easily compare 
0150: 61 67 61 69 6e 73 74 20 74 68 65 20 66 69 6e 61  against the fina
0160: 6c 20 73 74 61 67 65 27 73 20 6f 75 74 70 75 74  l stage's output
0170: 0a 09 63 6f 6c 6c 65 63 74 54 65 73 74 2c 20 6f  ..collectTest, o
0180: 75 74 70 75 74 54 65 73 74 20 3a 3d 20 63 6f 6c  utputTest := col
0190: 6c 65 63 74 69 6e 67 28 29 0a 09 63 6f 6c 6c 65  lecting()..colle
01a0: 63 74 46 69 6e 61 6c 2c 20 6f 75 74 70 75 74 46  ctFinal, outputF
01b0: 69 6e 61 6c 20 3a 3d 20 63 6f 6c 6c 65 63 74 69  inal := collecti
01c0: 6e 67 28 29 0a 09 68 61 6e 64 6c 65 72 73 20 3a  ng()..handlers :
01d0: 3d 20 5b 5d 68 61 6e 64 6c 65 72 7b 63 6f 6c 6c  = []handler{coll
01e0: 65 63 74 54 65 73 74 2c 20 63 6f 75 6e 74 69 6e  ectTest, countin
01f0: 67 28 29 2c 20 74 72 61 63 69 6e 67 28 29 2c 20  g(), tracing(), 
0200: 63 75 74 6f 66 66 28 29 2c 20 63 6f 6c 6c 65 63  cutoff(), collec
0210: 74 46 69 6e 61 6c 7d 0a 0a 09 2f 2f 20 2e 2e 2e  tFinal}...// ...
0220: 20 61 6e 64 20 65 78 65 63 75 74 65 20 74 68 65   and execute the
0230: 6d 20 61 67 61 69 6e 73 74 20 74 68 65 20 73 61  m against the sa
0240: 6d 70 6c 65 20 74 62 64 61 74 61 0a 09 72 65 61  mple tbdata..rea
0250: 64 65 72 20 3a 3d 20 73 74 72 69 6e 67 73 2e 4e  der := strings.N
0260: 65 77 52 65 61 64 65 72 28 74 62 64 61 74 61 29  ewReader(tbdata)
0270: 0a 09 65 78 69 74 20 3a 3d 20 70 72 6f 63 65 73  ..exit := proces
0280: 73 28 72 65 61 64 65 72 2c 20 68 61 6e 64 6c 65  s(reader, handle
0290: 72 73 29 0a 0a 09 69 66 20 65 78 69 74 20 21 3d  rs)...if exit !=
02a0: 20 30 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22   0 {...t.Error("
02b0: 55 6e 65 78 70 65 63 74 65 64 20 65 78 69 74 20  Unexpected exit 
02c0: 63 6f 64 65 2e 22 2c 20 65 78 69 74 29 0a 09 7d  code.", exit)..}
02d0: 0a 0a 09 69 6e 69 74 69 61 6c 20 3a 3d 20 6f 75  ...initial := ou
02e0: 74 70 75 74 54 65 73 74 28 29 0a 09 72 65 73 75  tputTest()..resu
02f0: 6c 74 20 3a 3d 20 6f 75 74 70 75 74 46 69 6e 61  lt := outputFina
0300: 6c 28 29 0a 09 69 66 20 6c 65 6e 28 72 65 73 75  l()..if len(resu
0310: 6c 74 29 20 21 3d 20 32 20 7b 0a 09 09 74 2e 45  lt) != 2 {...t.E
0320: 72 72 6f 72 28 22 55 6e 65 78 70 65 63 74 65 64  rror("Unexpected
0330: 20 72 65 73 75 6c 74 20 6c 65 6e 67 74 68 22 2c   result length",
0340: 20 32 29 0a 09 7d 0a 09 69 66 20 72 65 73 75 6c   2)..}..if resul
0350: 74 5b 30 5d 20 21 3d 20 69 6e 69 74 69 61 6c 5b  t[0] != initial[
0360: 30 5d 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22  0] {...t.Error("
0370: 55 6e 65 78 70 65 63 74 65 64 20 74 61 73 6b 20  Unexpected task 
0380: 61 74 20 72 65 73 75 6c 74 5b 30 5d 22 2c 20 72  at result[0]", r
0390: 65 73 75 6c 74 5b 30 5d 29 0a 09 7d 0a 09 69 66  esult[0])..}..if
03a0: 20 72 65 73 75 6c 74 5b 31 5d 20 21 3d 20 69 6e   result[1] != in
03b0: 69 74 69 61 6c 5b 31 5d 20 7b 0a 09 09 74 2e 45  itial[1] {...t.E
03c0: 72 72 6f 72 28 22 55 6e 65 78 70 65 63 74 65 64  rror("Unexpected
03d0: 20 74 61 73 6b 20 61 74 20 72 65 73 75 6c 74 5b   task at result[
03e0: 31 5d 22 2c 20 72 65 73 75 6c 74 5b 31 5d 29 0a  1]", result[1]).
03f0: 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65 73 74 41  .}.}..func TestA
0400: 72 67 73 28 74 20 2a 74 65 73 74 69 6e 67 2e 54  rgs(t *testing.T
0410: 29 20 7b 0a 09 2f 2f 20 43 6f 6e 66 69 67 75 72  ) {..// Configur
0420: 65 20 74 68 65 20 68 61 6e 64 6c 65 72 73 20 2e  e the handlers .
0430: 2e 2e 0a 09 2f 2f 20 55 73 65 20 61 20 63 6f 6c  ....// Use a col
0440: 6c 65 63 74 69 6e 67 20 68 61 6e 64 6c 65 72 20  lecting handler 
0450: 74 6f 20 63 61 74 63 68 20 61 6c 6c 20 74 61 73  to catch all tas
0460: 6b 73 20 72 69 67 68 74 20 61 66 74 65 72 20 74  ks right after t
0470: 68 65 79 20 61 72 65 20 70 61 72 73 65 64 0a 09  hey are parsed..
0480: 2f 2f 20 73 6f 20 77 65 20 68 61 76 65 20 73 6f  // so we have so
0490: 6d 65 74 68 69 6e 67 20 74 6f 20 65 61 73 69 6c  mething to easil
04a0: 79 20 63 6f 6d 70 61 72 65 20 61 67 61 69 6e 73  y compare agains
04b0: 74 20 74 68 65 20 66 69 6e 61 6c 20 73 74 61 67  t the final stag
04c0: 65 27 73 20 6f 75 74 70 75 74 0a 09 63 6f 6c 6c  e's output..coll
04d0: 65 63 74 54 65 73 74 2c 20 6f 75 74 70 75 74 54  ectTest, outputT
04e0: 65 73 74 20 3a 3d 20 63 6f 6c 6c 65 63 74 69 6e  est := collectin
04f0: 67 28 29 0a 09 63 6f 6c 6c 65 63 74 46 69 6e 61  g()..collectFina
0500: 6c 2c 20 6f 75 74 70 75 74 46 69 6e 61 6c 20 3a  l, outputFinal :
0510: 3d 20 63 6f 6c 6c 65 63 74 69 6e 67 28 29 0a 09  = collecting()..
0520: 68 61 6e 64 6c 65 72 73 20 3a 3d 20 5b 5d 68 61  handlers := []ha
0530: 6e 64 6c 65 72 7b 63 6f 6c 6c 65 63 74 54 65 73  ndler{collectTes
0540: 74 2c 20 63 6f 75 6e 74 69 6e 67 28 29 2c 20 74  t, counting(), t
0550: 72 61 63 69 6e 67 28 29 2c 20 6d 61 74 63 68 69  racing(), matchi
0560: 6e 67 28 5b 5d 73 74 72 69 6e 67 7b 22 6d 61 69  ng([]string{"mai
0570: 6e 22 7d 29 2c 20 63 6f 6c 6c 65 63 74 46 69 6e  n"}), collectFin
0580: 61 6c 7d 0a 0a 09 2f 2f 20 2e 2e 2e 20 61 6e 64  al}...// ... and
0590: 20 65 78 65 63 75 74 65 20 74 68 65 6d 20 61 67   execute them ag
05a0: 61 69 6e 73 74 20 74 68 65 20 73 61 6d 70 6c 65  ainst the sample
05b0: 20 74 62 64 61 74 61 0a 09 72 65 61 64 65 72 20   tbdata..reader 
05c0: 3a 3d 20 73 74 72 69 6e 67 73 2e 4e 65 77 52 65  := strings.NewRe
05d0: 61 64 65 72 28 74 62 64 61 74 61 29 0a 09 65 78  ader(tbdata)..ex
05e0: 69 74 20 3a 3d 20 70 72 6f 63 65 73 73 28 72 65  it := process(re
05f0: 61 64 65 72 2c 20 68 61 6e 64 6c 65 72 73 29 0a  ader, handlers).
0600: 0a 09 69 66 20 65 78 69 74 20 21 3d 20 30 20 7b  ..if exit != 0 {
0610: 0a 09 09 74 2e 45 72 72 6f 72 28 22 55 6e 65 78  ...t.Error("Unex
0620: 70 65 63 74 65 64 20 65 78 69 74 20 63 6f 64 65  pected exit code
0630: 2e 22 2c 20 65 78 69 74 29 0a 09 7d 0a 0a 09 69  .", exit)..}...i
0640: 6e 69 74 69 61 6c 20 3a 3d 20 6f 75 74 70 75 74  nitial := output
0650: 54 65 73 74 28 29 0a 09 72 65 73 75 6c 74 20 3a  Test()..result :
0660: 3d 20 6f 75 74 70 75 74 46 69 6e 61 6c 28 29 0a  = outputFinal().
0670: 09 69 66 20 6c 65 6e 28 72 65 73 75 6c 74 29 20  .if len(result) 
0680: 21 3d 20 32 20 7b 0a 09 09 74 2e 45 72 72 6f 72  != 2 {...t.Error
0690: 28 22 55 6e 65 78 70 65 63 74 65 64 20 72 65 73  ("Unexpected res
06a0: 75 6c 74 20 6c 65 6e 67 74 68 22 2c 20 32 29 0a  ult length", 2).
06b0: 09 7d 0a 09 69 66 20 72 65 73 75 6c 74 5b 30 5d  .}..if result[0]
06c0: 20 21 3d 20 69 6e 69 74 69 61 6c 5b 31 5d 20 7b   != initial[1] {
06d0: 0a 09 09 74 2e 45 72 72 6f 72 28 22 55 6e 65 78  ...t.Error("Unex
06e0: 70 65 63 74 65 64 20 74 61 73 6b 20 61 74 20 72  pected task at r
06f0: 65 73 75 6c 74 5b 30 5d 22 2c 20 72 65 73 75 6c  esult[0]", resul
0700: 74 5b 30 5d 29 0a 09 7d 0a 09 69 66 20 72 65 73  t[0])..}..if res
0710: 75 6c 74 5b 31 5d 20 21 3d 20 69 6e 69 74 69 61  ult[1] != initia
0720: 6c 5b 32 5d 20 7b 0a 09 09 74 2e 45 72 72 6f 72  l[2] {...t.Error
0730: 28 22 55 6e 65 78 70 65 63 74 65 64 20 74 61 73  ("Unexpected tas
0740: 6b 20 61 74 20 72 65 73 75 6c 74 5b 31 5d 22 2c  k at result[1]",
0750: 20 72 65 73 75 6c 74 5b 31 5d 29 0a 09 7d 0a 7d   result[1])..}.}
0760: 0a                                               .