-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_selector_guard.exs
More file actions
75 lines (63 loc) · 1.88 KB
/
test_selector_guard.exs
File metadata and controls
75 lines (63 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env elixir
# Load the guards module
Code.require_file("lib/selector/parser/guards.ex")
import Selector.Parser.Guards
IO.puts("Testing is_selector_char guard...")
# Test cases
test_cases = [
# Should pass
{?a, true, "letter 'a'"},
{?Z, true, "letter 'Z'"},
{?0, true, "digit '0'"},
{?#, true, "hash '#'"},
{?., true, "dot '.'"},
{?:, true, "colon ':'"},
{?,, true, "comma ','"},
{?>, true, "greater than '>'"},
{?+, true, "plus '+'"},
{?~, true, "tilde '~'"},
{?*, true, "asterisk '*'"},
{?|, true, "pipe '|'"},
{?[, true, "bracket '['"},
{?], true, "bracket ']'"},
{?", true, "double quote"},
{?', true, "single quote"},
{?\\, true, "backslash"},
{0x0020, true, "space"},
{0x4E2D, true, "Chinese character 中"},
{0x0391, true, "Greek letter Α"},
# Should fail
{0x0000, false, "null character"},
{0x0001, false, "control character"},
{0x007F, false, "DEL character"},
{0xD800, false, "surrogate codepoint"},
]
# Run tests
passed = 0
failed = 0
for {codepoint, expected, description} <- test_cases do
result = is_selector_char(codepoint)
status = if result == expected do
passed = passed + 1
"✓"
else
failed = failed + 1
"✗"
end
IO.puts("#{status} #{description}: is_selector_char(#{inspect(codepoint)}) => #{result} (expected #{expected})")
end
IO.puts("\nSummary: #{passed} passed, #{failed} failed")
# Test with actual selector strings
IO.puts("\nTesting complete selector strings:")
selectors = [
"div.class#id",
"[data-value~=\"test\"]:nth-child(2n+1)",
".クラス#标识符[атрибут=\"القيمة\"]",
"ns|element > .class + #id ~ [attr]",
"div, .class, #id"
]
for selector <- selectors do
all_valid = Enum.all?(String.to_charlist(selector), &is_selector_char/1)
status = if all_valid, do: "✓", else: "✗"
IO.puts("#{status} \"#{selector}\" - all characters valid: #{all_valid}")
end