Hex Artifact Content

Artifact b6485539c418ea0a43961c80cdbeeb0c653d7cd1:


0000: 70 61 63 6b 61 67 65 20 70 61 72 73 65 0a 0a 69  package parse..i
0010: 6d 70 6f 72 74 20 28 0a 09 22 74 65 73 74 69 6e  mport (.."testin
0020: 67 22 0a 29 0a 0a 66 75 6e 63 20 54 65 73 74 41  g".)..func TestA
0030: 63 63 65 70 74 28 74 20 2a 74 65 73 74 69 6e 67  ccept(t *testing
0040: 2e 54 29 20 7b 0a 09 2f 2f 20 41 63 63 65 70 74  .T) {..// Accept
0050: 28 30 29 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  (0) will always 
0060: 6d 61 74 63 68 20 3a 29 0a 09 70 30 20 3a 3d 20  match :)..p0 := 
0070: 41 63 63 65 70 74 28 30 29 0a 09 69 66 20 6e 2c  Accept(0)..if n,
0080: 20 72 20 3a 3d 20 70 30 28 22 22 29 3b 20 21 6e   r := p0(""); !n
0090: 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f  .Matched || n.Co
00a0: 6e 74 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e  ntent != "" || n
00b0: 2e 4e 6f 64 65 73 20 21 3d 20 6e 69 6c 20 7c 7c  .Nodes != nil ||
00c0: 20 72 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e 45   r != "" {...t.E
00d0: 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72 65  rror("Invalid re
00e0: 73 75 6c 74 20 66 6f 72 20 41 63 63 65 70 74 27  sult for Accept'
00f0: 73 20 6e 65 67 61 74 69 76 65 20 74 65 73 74 22  s negative test"
0100: 2c 20 6e 29 0a 09 7d 0a 09 2f 2f 20 54 65 73 74  , n)..}..// Test
0110: 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a 65 72 6f   with a non-zero
0120: 20 61 6d 6f 75 6e 74 20 6f 66 20 62 79 74 65 73   amount of bytes
0130: 0a 09 70 20 3a 3d 20 41 63 63 65 70 74 28 31 29  ..p := Accept(1)
0140: 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20 70 28 22  ..if n, r := p("
0150: 22 29 3b 20 6e 2e 4d 61 74 63 68 65 64 20 7c 7c  "); n.Matched ||
0160: 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 22   n.Content != ""
0170: 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20 6e   || n.Nodes != n
0180: 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b 0a  il || r != "" {.
0190: 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c  ..t.Error("Inval
01a0: 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20 41 63  id result for Ac
01b0: 63 65 70 74 27 73 20 6e 65 67 61 74 69 76 65 20  cept's negative 
01c0: 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09 69 66  test", n)..}..if
01d0: 20 6e 2c 20 72 20 3a 3d 20 70 28 22 61 22 29 3b   n, r := p("a");
01e0: 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e   !n.Matched || n
01f0: 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61 22 20  .Content != "a" 
0200: 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20 6e 69  || n.Nodes != ni
0210: 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b 0a 09  l || r != "" {..
0220: 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c 69  .t.Error("Invali
0230: 64 20 72 65 73 75 6c 74 20 66 6f 72 20 41 63 63  d result for Acc
0240: 65 70 74 27 73 20 70 6f 73 69 74 69 76 65 20 74  ept's positive t
0250: 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 7d 0a 0a 66  est", n)..}.}..f
0260: 75 6e 63 20 54 65 73 74 4b 28 74 20 2a 74 65 73  unc TestK(t *tes
0270: 74 69 6e 67 2e 54 29 20 7b 0a 09 70 20 3a 3d 20  ting.T) {..p := 
0280: 41 63 63 65 70 74 28 31 29 0a 09 6b 20 3a 3d 20  Accept(1)..k := 
0290: 4b 28 70 29 0a 09 69 66 20 6e 2c 20 72 20 3a 3d  K(p)..if n, r :=
02a0: 20 6b 28 22 61 61 61 22 29 3b 20 21 6e 2e 4d 61   k("aaa"); !n.Ma
02b0: 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e 74 65  tched || n.Conte
02c0: 6e 74 20 21 3d 20 22 61 61 61 22 20 7c 7c 20 6e  nt != "aaa" || n
02d0: 2e 4e 6f 64 65 73 20 3d 3d 20 6e 69 6c 20 7c 7c  .Nodes == nil ||
02e0: 20 72 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e 45   r != "" {...t.E
02f0: 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72 65  rror("Invalid re
0300: 73 75 6c 74 20 66 6f 72 20 4b 2a 20 6d 61 74 63  sult for K* matc
0310: 68 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09  h test", n)..}..
0320: 69 66 20 6e 2c 20 72 20 3a 3d 20 6b 28 22 22 29  if n, r := k("")
0330: 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c 20  ; !n.Matched || 
0340: 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 22 20  n.Content != "" 
0350: 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20 6e 69  || n.Nodes != ni
0360: 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b 0a 09  l || r != "" {..
0370: 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c 69  .t.Error("Invali
0380: 64 20 72 65 73 75 6c 74 20 66 6f 72 20 4b 2a 20  d result for K* 
0390: 6e 6f 2d 6d 61 74 63 68 20 74 65 73 74 22 2c 20  no-match test", 
03a0: 6e 29 0a 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65  n)..}.}..func Te
03b0: 73 74 53 65 71 28 74 20 2a 74 65 73 74 69 6e 67  stSeq(t *testing
03c0: 2e 54 29 20 7b 0a 09 70 31 2c 20 70 32 20 3a 3d  .T) {..p1, p2 :=
03d0: 20 41 63 63 65 70 74 28 31 29 2c 20 41 63 63 65   Accept(1), Acce
03e0: 70 74 28 31 29 0a 09 73 20 3a 3d 20 53 65 71 28  pt(1)..s := Seq(
03f0: 70 31 2c 20 70 32 29 0a 09 69 66 20 6e 2c 20 72  p1, p2)..if n, r
0400: 20 3a 3d 20 73 28 22 61 61 22 29 3b 20 21 6e 2e   := s("aa"); !n.
0410: 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e  Matched || n.Con
0420: 74 65 6e 74 20 21 3d 20 22 61 61 22 20 7c 7c 20  tent != "aa" || 
0430: 6e 2e 4e 6f 64 65 73 20 3d 3d 20 6e 69 6c 20 7c  n.Nodes == nil |
0440: 7c 20 72 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e  | r != "" {...t.
0450: 45 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72  Error("Invalid r
0460: 65 73 75 6c 74 20 66 6f 72 20 53 65 71 20 70 6f  esult for Seq po
0470: 73 69 74 69 76 65 20 74 65 73 74 22 2c 20 6e 29  sitive test", n)
0480: 0a 09 7d 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20  ..}..if n, r := 
0490: 73 28 22 61 22 29 3b 20 6e 2e 4d 61 74 63 68 65  s("a"); n.Matche
04a0: 64 20 7c 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21  d || n.Content !
04b0: 3d 20 22 61 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73  = "a" || n.Nodes
04c0: 20 3d 3d 20 6e 69 6c 20 7c 7c 20 72 20 21 3d 20   == nil || r != 
04d0: 22 22 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22  "" {...t.Error("
04e0: 49 6e 76 61 6c 69 64 20 72 65 73 75 6c 74 20 66  Invalid result f
04f0: 6f 72 20 53 65 71 20 70 61 72 74 69 61 6c 20 6d  or Seq partial m
0500: 61 74 63 68 20 74 65 73 74 22 2c 20 6e 29 0a 09  atch test", n)..
0510: 7d 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20 73 28  }..if n, r := s(
0520: 22 22 29 3b 20 6e 2e 4d 61 74 63 68 65 64 20 7c  ""); n.Matched |
0530: 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22  | n.Content != "
0540: 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 3d 3d 20  " || n.Nodes == 
0550: 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b  nil || r != "" {
0560: 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61  ...t.Error("Inva
0570: 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20 53  lid result for S
0580: 65 71 20 6e 6f 2d 6d 61 74 63 68 20 74 65 73 74  eq no-match test
0590: 22 2c 20 6e 29 0a 09 7d 0a 7d 0a 0a 66 75 6e 63  ", n)..}.}..func
05a0: 20 54 65 73 74 41 6e 79 28 74 20 2a 74 65 73 74   TestAny(t *test
05b0: 69 6e 67 2e 54 29 20 7b 0a 09 70 2c 20 70 30 20  ing.T) {..p, p0 
05c0: 3a 3d 20 41 63 63 65 70 74 28 31 29 2c 20 41 63  := Accept(1), Ac
05d0: 63 65 70 74 28 30 29 0a 09 61 20 3a 3d 20 41 6e  cept(0)..a := An
05e0: 79 28 70 2c 20 70 30 29 0a 09 69 66 20 6e 2c 20  y(p, p0)..if n, 
05f0: 72 20 3a 3d 20 61 28 22 22 29 3b 20 21 6e 2e 4d  r := a(""); !n.M
0600: 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e 74  atched || n.Cont
0610: 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e 2e 4e  ent != "" || n.N
0620: 6f 64 65 73 20 21 3d 20 6e 69 6c 20 7c 7c 20 72  odes != nil || r
0630: 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e 45 72 72   != "" {...t.Err
0640: 6f 72 28 22 49 6e 76 61 6c 69 64 20 72 65 73 75  or("Invalid resu
0650: 6c 74 20 66 6f 72 20 41 6e 79 20 6d 61 74 63 68  lt for Any match
0660: 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09 69   test", n)..}..i
0670: 66 20 6e 2c 20 72 20 3a 3d 20 61 28 22 61 61 22  f n, r := a("aa"
0680: 29 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c  ); !n.Matched ||
0690: 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61   n.Content != "a
06a0: 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20  " || n.Nodes != 
06b0: 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 61 22 20  nil || r != "a" 
06c0: 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76  {...t.Error("Inv
06d0: 61 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20  alid result for 
06e0: 41 6e 79 20 6d 61 74 63 68 20 74 65 73 74 22 2c  Any match test",
06f0: 20 6e 29 0a 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54   n)..}.}..func T
0700: 65 73 74 53 74 72 69 6e 67 28 74 20 2a 74 65 73  estString(t *tes
0710: 74 69 6e 67 2e 54 29 20 7b 0a 09 73 20 3a 3d 20  ting.T) {..s := 
0720: 53 74 72 69 6e 67 28 22 61 61 22 29 0a 09 69 66  String("aa")..if
0730: 20 6e 2c 20 72 20 3a 3d 20 73 28 22 61 61 22 29   n, r := s("aa")
0740: 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c 20  ; !n.Matched || 
0750: 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61 61  n.Content != "aa
0760: 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20  " || n.Nodes != 
0770: 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b  nil || r != "" {
0780: 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61  ...t.Error("Inva
0790: 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20 53  lid result for S
07a0: 74 72 69 6e 67 20 6d 61 74 63 68 20 74 65 73 74  tring match test
07b0: 22 2c 20 6e 29 0a 09 7d 0a 09 69 66 20 6e 2c 20  ", n)..}..if n, 
07c0: 72 20 3a 3d 20 73 28 22 61 62 22 29 3b 20 6e 2e  r := s("ab"); n.
07d0: 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e  Matched || n.Con
07e0: 74 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e 2e  tent != "" || n.
07f0: 4e 6f 64 65 73 20 3d 3d 20 6e 69 6c 20 7c 7c 20  Nodes == nil || 
0800: 72 20 21 3d 20 22 61 62 22 20 7b 0a 09 09 74 2e  r != "ab" {...t.
0810: 45 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72  Error("Invalid r
0820: 65 73 75 6c 74 20 66 6f 72 20 53 74 72 69 6e 67  esult for String
0830: 20 6e 6f 2d 6d 61 74 63 68 20 74 65 73 74 22 2c   no-match test",
0840: 20 6e 2c 20 72 2c 20 6c 65 6e 28 72 29 29 0a 09   n, r, len(r))..
0850: 7d 0a 7d 0a                                      }.}.