Logo

index : blog

---

  • summary
  • about
  • tree
  • log
  • branches
<< path: root/public/blog.git/html/modules/uniform/tests/050_parse.spec.jai blob: fa8d36fd7fcc5f53a2bdb5afde53da8432d900bd [raw] [clear marker]

        
0Parse_Regexp_Args :: struct {
1 p: string;
2 flags := ParseFlags.NoParseFlags;
3 status := Status.{.Success, ""};
4}
5
6parses_simple_patterns_correctly_params :: Parse_Regexp_Args.[
7 .{p=""},
8 .{p="a"},
9 .{p="abcd"},
10 .{p="ab(cd", status = .{.MissingParen, "ab(cd"}},
11 .{p="ab(cd)"},
12 .{p="ab[cx", status = .{.MissingBracket, "[cx"}},
13 .{p="ab[cx]"},
14 .{p="a{2}"},
15 .{p="a{2,}"},
16 .{p="a{2,4}"},
17 .{p="[ac]{2}"},
18 .{p="[ac]{2,}"},
19 .{p="[ac]{2,4}"},
20 .{p="[ac]{2}x"},
21 .{p="([ac]{2})?"},
22 .{p="a*b?(cd)+"},
23 .{p="(?:foo)?bar", status = .{.RepeatArgument, "?"}},
24 .{p="(?:foo)?bar", flags = .LikePerl},
25 .{p="\\bbar\\B", status = .{.BadEscape, "\\b"}},
26 .{p="\\bbar\\B", flags = .LikePerl},
27 .{p="foo\\sbar", status = .{.BadEscape, "\\s"}},
28 .{p="^fo"},
29 .{p="fo$"},
30 .{p="^fo$"},
31];
32
33parses_simple_patterns_correctly :: (args: Parse_Regexp_Args) {
34 result, status, pool := parse(args.p, args.flags);
35 defer uninit(*pool);
36
37 if args.status.code == .Success {
38 assert_that(status, is(Status.{.Success, ""}, equal_status));
39 assert_that(result, is_not(null));
40 stringified := to_string(result);
41 defer free(stringified);
42 assert_that(stringified, is(args.p));
43 } else {
44 assert_that(result, is(null));
45 assert_that(status, is(args.status, equal_status));
46 }
47} @Test
48
49simplifies_char_classes_if_possible_params :: Stringify_Test_Args.[
50 .{p="[a]", e="a"},
51 .{p="[ac]", e="[ac]"},
52 .{p="[ab]", e="[a-b]"},
53 .{p="[abcdefg]", e="[a-g]"},
54 .{p="[aefbcdg]", e="[a-g]"},
55 .{p="\\s", e="[\\t-\\n\\f-\\r ]", flags = .LikePerl},
56];
57
58simplifies_char_classes_if_possible :: (args: Stringify_Test_Args) {
59 result, status, pool := parse(args.p, args.flags);
60 defer uninit(*pool);
61
62 assert_that(result, is_not(null));
63 stringified := to_string(result);
64 defer free(stringified);
65 assert_that(stringified, is(args.e));
66} @Test
67
68#scope_file
69
70equal_status :: (a: Status, b: Status) -> bool {
71 return a.code == b.code && a.error_arg == b.error_arg;
72}
73
74Stringify_Test_Args :: struct {
75 p: string;
76 flags := ParseFlags.NoParseFlags;
77 e: string;
78}
79
80
Copyright 2026  E766CB298A6D1E64 | Git-Thing heavily inspired by cgit