Hex Artifact Content

Artifact eebf67dde7fca356f7ed66875aa1ffcf09477dc0:


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 20  sult for Accept 
00f0: 65 6d 70 74 79 20 6d 61 74 63 68 20 74 65 73 74  empty match test
0100: 22 2c 20 6e 29 0a 09 7d 0a 09 2f 2f 20 54 65 73  ", n)..}..// Tes
0110: 74 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a 65 72  t with a non-zer
0120: 6f 20 61 6d 6f 75 6e 74 20 6f 66 20 62 79 74 65  o amount of byte
0130: 73 0a 09 70 20 3a 3d 20 41 63 63 65 70 74 28 31  s..p := Accept(1
0140: 29 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20 70 28  )..if n, r := p(
0150: 22 22 29 3b 20 6e 2e 4d 61 74 63 68 65 64 20 7c  ""); n.Matched |
0160: 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22  | n.Content != "
0170: 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20  " || n.Nodes != 
0180: 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b  nil || r != "" {
0190: 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61  ...t.Error("Inva
01a0: 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20 41  lid result for A
01b0: 63 63 65 70 74 20 6e 6f 2d 6d 61 74 63 68 20 74  ccept no-match t
01c0: 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09 69 66 20  est", n)..}..if 
01d0: 6e 2c 20 72 20 3a 3d 20 70 28 22 61 22 29 3b 20  n, r := p("a"); 
01e0: 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e  !n.Matched || n.
01f0: 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61 22 20 7c  Content != "a" |
0200: 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20 6e 69 6c  | n.Nodes != nil
0210: 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b 0a 09 09   || r != "" {...
0220: 74 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c 69 64  t.Error("Invalid
0230: 20 72 65 73 75 6c 74 20 66 6f 72 20 41 63 63 65   result for Acce
0240: 70 74 20 6d 61 74 63 68 20 74 65 73 74 22 2c 20  pt match test", 
0250: 6e 29 0a 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65  n)..}.}..func Te
0260: 73 74 4b 28 74 20 2a 74 65 73 74 69 6e 67 2e 54  stK(t *testing.T
0270: 29 20 7b 0a 09 70 20 3a 3d 20 41 63 63 65 70 74  ) {..p := Accept
0280: 28 31 29 0a 09 6b 20 3a 3d 20 4b 28 70 29 0a 09  (1)..k := K(p)..
0290: 69 66 20 6e 2c 20 72 20 3a 3d 20 6b 28 22 61 61  if n, r := k("aa
02a0: 61 22 29 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20  a"); !n.Matched 
02b0: 7c 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20  || n.Content != 
02c0: 22 61 61 61 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73  "aaa" || n.Nodes
02d0: 20 3d 3d 20 6e 69 6c 20 7c 7c 20 72 20 21 3d 20   == nil || r != 
02e0: 22 22 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22  "" {...t.Error("
02f0: 49 6e 76 61 6c 69 64 20 72 65 73 75 6c 74 20 66  Invalid result f
0300: 6f 72 20 4b 2a 20 6d 61 74 63 68 20 74 65 73 74  or K* match test
0310: 22 2c 20 6e 29 0a 09 7d 0a 09 69 66 20 6e 2c 20  ", n)..}..if n, 
0320: 72 20 3a 3d 20 6b 28 22 22 29 3b 20 21 6e 2e 4d  r := k(""); !n.M
0330: 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e 74  atched || n.Cont
0340: 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e 2e 4e  ent != "" || n.N
0350: 6f 64 65 73 20 21 3d 20 6e 69 6c 20 7c 7c 20 72  odes != nil || r
0360: 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e 45 72 72   != "" {...t.Err
0370: 6f 72 28 22 49 6e 76 61 6c 69 64 20 72 65 73 75  or("Invalid resu
0380: 6c 74 20 66 6f 72 20 4b 2a 20 6e 6f 2d 6d 61 74  lt for K* no-mat
0390: 63 68 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a  ch test", n)..}.
03a0: 7d 0a 0a 66 75 6e 63 20 54 65 73 74 53 65 71 28  }..func TestSeq(
03b0: 74 20 2a 74 65 73 74 69 6e 67 2e 54 29 20 7b 0a  t *testing.T) {.
03c0: 09 70 31 2c 20 70 32 20 3a 3d 20 41 63 63 65 70  .p1, p2 := Accep
03d0: 74 28 31 29 2c 20 41 63 63 65 70 74 28 31 29 0a  t(1), Accept(1).
03e0: 09 73 20 3a 3d 20 53 65 71 28 70 31 2c 20 70 32  .s := Seq(p1, p2
03f0: 29 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20 73 28  )..if n, r := s(
0400: 22 61 61 22 29 3b 20 21 6e 2e 4d 61 74 63 68 65  "aa"); !n.Matche
0410: 64 20 7c 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21  d || n.Content !
0420: 3d 20 22 61 61 22 20 7c 7c 20 6e 2e 4e 6f 64 65  = "aa" || n.Node
0430: 73 20 3d 3d 20 6e 69 6c 20 7c 7c 20 72 20 21 3d  s == nil || r !=
0440: 20 22 22 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28   "" {...t.Error(
0450: 22 49 6e 76 61 6c 69 64 20 72 65 73 75 6c 74 20  "Invalid result 
0460: 66 6f 72 20 53 65 71 20 70 6f 73 69 74 69 76 65  for Seq positive
0470: 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09 69   test", n)..}..i
0480: 66 20 6e 2c 20 72 20 3a 3d 20 73 28 22 61 22 29  f n, r := s("a")
0490: 3b 20 6e 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e  ; n.Matched || n
04a0: 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61 22 20  .Content != "a" 
04b0: 7c 7c 20 6e 2e 4e 6f 64 65 73 20 3d 3d 20 6e 69  || n.Nodes == ni
04c0: 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b 0a 09  l || r != "" {..
04d0: 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c 69  .t.Error("Invali
04e0: 64 20 72 65 73 75 6c 74 20 66 6f 72 20 53 65 71  d result for Seq
04f0: 20 70 61 72 74 69 61 6c 20 6d 61 74 63 68 20 74   partial match t
0500: 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09 69 66 20  est", n)..}..if 
0510: 6e 2c 20 72 20 3a 3d 20 73 28 22 22 29 3b 20 6e  n, r := s(""); n
0520: 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f  .Matched || n.Co
0530: 6e 74 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e  ntent != "" || n
0540: 2e 4e 6f 64 65 73 20 3d 3d 20 6e 69 6c 20 7c 7c  .Nodes == nil ||
0550: 20 72 20 21 3d 20 22 22 20 7b 0a 09 09 74 2e 45   r != "" {...t.E
0560: 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72 65  rror("Invalid re
0570: 73 75 6c 74 20 66 6f 72 20 53 65 71 20 6e 6f 2d  sult for Seq no-
0580: 6d 61 74 63 68 20 74 65 73 74 22 2c 20 6e 29 0a  match test", n).
0590: 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65 73 74 41  .}.}..func TestA
05a0: 6e 79 28 74 20 2a 74 65 73 74 69 6e 67 2e 54 29  ny(t *testing.T)
05b0: 20 7b 0a 09 70 2c 20 70 30 20 3a 3d 20 41 63 63   {..p, p0 := Acc
05c0: 65 70 74 28 31 29 2c 20 41 63 63 65 70 74 28 30  ept(1), Accept(0
05d0: 29 0a 09 61 20 3a 3d 20 41 6e 79 28 70 2c 20 70  )..a := Any(p, p
05e0: 30 29 0a 09 69 66 20 6e 2c 20 72 20 3a 3d 20 61  0)..if n, r := a
05f0: 28 22 22 29 3b 20 21 6e 2e 4d 61 74 63 68 65 64  (""); !n.Matched
0600: 20 7c 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d   || n.Content !=
0610: 20 22 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21   "" || n.Nodes !
0620: 3d 20 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22  = nil || r != ""
0630: 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e   {...t.Error("In
0640: 76 61 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72  valid result for
0650: 20 41 6e 79 20 6d 61 74 63 68 20 74 65 73 74 22   Any match test"
0660: 2c 20 6e 29 0a 09 7d 0a 09 69 66 20 6e 2c 20 72  , n)..}..if n, r
0670: 20 3a 3d 20 61 28 22 61 61 22 29 3b 20 21 6e 2e   := a("aa"); !n.
0680: 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f 6e  Matched || n.Con
0690: 74 65 6e 74 20 21 3d 20 22 61 22 20 7c 7c 20 6e  tent != "a" || n
06a0: 2e 4e 6f 64 65 73 20 21 3d 20 6e 69 6c 20 7c 7c  .Nodes != nil ||
06b0: 20 72 20 21 3d 20 22 61 22 20 7b 0a 09 09 74 2e   r != "a" {...t.
06c0: 45 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20 72  Error("Invalid r
06d0: 65 73 75 6c 74 20 66 6f 72 20 41 6e 79 20 6d 61  esult for Any ma
06e0: 74 63 68 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d  tch test", n)..}
06f0: 0a 7d 0a 0a 66 75 6e 63 20 54 65 73 74 44 65 66  .}..func TestDef
0700: 65 72 28 74 20 2a 74 65 73 74 69 6e 67 2e 54 29  er(t *testing.T)
0710: 20 7b 0a 09 64 2c 20 64 70 20 3a 3d 20 44 65 66   {..d, dp := Def
0720: 65 72 28 29 0a 09 2a 64 70 20 3d 20 41 63 63 65  er()..*dp = Acce
0730: 70 74 28 31 29 0a 09 69 66 20 6e 2c 20 72 20 3a  pt(1)..if n, r :
0740: 3d 20 64 28 22 22 29 3b 20 6e 2e 4d 61 74 63 68  = d(""); n.Match
0750: 65 64 20 7c 7c 20 6e 2e 43 6f 6e 74 65 6e 74 20  ed || n.Content 
0760: 21 3d 20 22 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73  != "" || n.Nodes
0770: 20 21 3d 20 6e 69 6c 20 7c 7c 20 72 20 21 3d 20   != nil || r != 
0780: 22 22 20 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22  "" {...t.Error("
0790: 49 6e 76 61 6c 69 64 20 72 65 73 75 6c 74 20 66  Invalid result f
07a0: 6f 72 20 44 65 66 65 72 20 6e 6f 2d 6d 61 74 63  or Defer no-matc
07b0: 68 20 74 65 73 74 22 2c 20 6e 29 0a 09 7d 0a 09  h test", n)..}..
07c0: 69 66 20 6e 2c 20 72 20 3a 3d 20 64 28 22 61 22  if n, r := d("a"
07d0: 29 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c  ); !n.Matched ||
07e0: 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61   n.Content != "a
07f0: 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d 20  " || n.Nodes != 
0800: 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20 7b  nil || r != "" {
0810: 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76 61  ...t.Error("Inva
0820: 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20 44  lid result for D
0830: 65 66 65 72 20 6d 61 74 63 68 20 74 65 73 74 22  efer match test"
0840: 2c 20 6e 29 0a 09 7d 0a 7d 0a 0a 66 75 6e 63 20  , n)..}.}..func 
0850: 54 65 73 74 53 74 72 69 6e 67 28 74 20 2a 74 65  TestString(t *te
0860: 73 74 69 6e 67 2e 54 29 20 7b 0a 09 73 20 3a 3d  sting.T) {..s :=
0870: 20 53 74 72 69 6e 67 28 22 61 61 22 29 0a 09 69   String("aa")..i
0880: 66 20 6e 2c 20 72 20 3a 3d 20 73 28 22 61 61 22  f n, r := s("aa"
0890: 29 3b 20 21 6e 2e 4d 61 74 63 68 65 64 20 7c 7c  ); !n.Matched ||
08a0: 20 6e 2e 43 6f 6e 74 65 6e 74 20 21 3d 20 22 61   n.Content != "a
08b0: 61 22 20 7c 7c 20 6e 2e 4e 6f 64 65 73 20 21 3d  a" || n.Nodes !=
08c0: 20 6e 69 6c 20 7c 7c 20 72 20 21 3d 20 22 22 20   nil || r != "" 
08d0: 7b 0a 09 09 74 2e 45 72 72 6f 72 28 22 49 6e 76  {...t.Error("Inv
08e0: 61 6c 69 64 20 72 65 73 75 6c 74 20 66 6f 72 20  alid result for 
08f0: 53 74 72 69 6e 67 20 6d 61 74 63 68 20 74 65 73  String match tes
0900: 74 22 2c 20 6e 29 0a 09 7d 0a 09 69 66 20 6e 2c  t", n)..}..if n,
0910: 20 72 20 3a 3d 20 73 28 22 61 62 22 29 3b 20 6e   r := s("ab"); n
0920: 2e 4d 61 74 63 68 65 64 20 7c 7c 20 6e 2e 43 6f  .Matched || n.Co
0930: 6e 74 65 6e 74 20 21 3d 20 22 22 20 7c 7c 20 6e  ntent != "" || n
0940: 2e 4e 6f 64 65 73 20 3d 3d 20 6e 69 6c 20 7c 7c  .Nodes == nil ||
0950: 20 72 20 21 3d 20 22 61 62 22 20 7b 0a 09 09 74   r != "ab" {...t
0960: 2e 45 72 72 6f 72 28 22 49 6e 76 61 6c 69 64 20  .Error("Invalid 
0970: 72 65 73 75 6c 74 20 66 6f 72 20 53 74 72 69 6e  result for Strin
0980: 67 20 6e 6f 2d 6d 61 74 63 68 20 74 65 73 74 22  g no-match test"
0990: 2c 20 6e 2c 20 72 2c 20 6c 65 6e 28 72 29 29 0a  , n, r, len(r)).
09a0: 09 7d 0a 7d 0a                                   .}.}.