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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
def H opts
opts
end
def A *opts
opts
end
def assert_format args, assert, hash, expected
actual = args.fn.pretty_format hash
assert.are_equal! actual, expected
end
def test_pretty_print args, assert
# =============================
# hash with single value
# =============================
input = (H first_name: "John")
expected = <<-S
{:first_name "John"}
S
(assert_format args, assert, input, expected)
# =============================
# hash with two values
# =============================
input = (H first_name: "John", last_name: "Smith")
expected = <<-S
{:first_name "John"
:last_name "Smith"}
S
(assert_format args, assert, input, expected)
# =============================
# hash with inner hash
# =============================
input = (H first_name: "John",
last_name: "Smith",
middle_initial: "I",
so: (H first_name: "Pocahontas",
last_name: "Tsenacommacah"),
friends: (A (H first_name: "Side", last_name: "Kick"),
(H first_name: "Tim", last_name: "Wizard")))
expected = <<-S
{:first_name "John"
:last_name "Smith"
:middle_initial "I"
:so {:first_name "Pocahontas"
:last_name "Tsenacommacah"}
:friends [{:first_name "Side"
:last_name "Kick"}
{:first_name "Tim"
:last_name "Wizard"}]}
S
(assert_format args, assert, input, expected)
# =============================
# array with one value
# =============================
input = (A 1)
expected = <<-S
[1]
S
(assert_format args, assert, input, expected)
# =============================
# array with multiple values
# =============================
input = (A 1, 2, 3)
expected = <<-S
[1
2
3]
S
(assert_format args, assert, input, expected)
# =============================
# array with multiple values hashes
# =============================
input = (A (H first_name: "Side", last_name: "Kick"),
(H first_name: "Tim", last_name: "Wizard"))
expected = <<-S
[{:first_name "Side"
:last_name "Kick"}
{:first_name "Tim"
:last_name "Wizard"}]
S
(assert_format args, assert, input, expected)
end
def test_nested_nested args, assert
# =============================
# nested array in nested hash
# =============================
input = (H type: :root,
text: "Root",
children: (A (H level: 1,
text: "Level 1",
children: (A (H level: 2,
text: "Level 2",
children: [])))))
expected = <<-S
{:type :root
:text "Root"
:children [{:level 1
:text "Level 1"
:children [{:level 2
:text "Level 2"
:children []}]}]}
S
(assert_format args, assert, input, expected)
end
def test_scene args, assert
script = <<-S
* Scene 1
** Narrator
They say happy endings don't exist.
** Narrator
They say true love is a lie.
S
input = parse_org args, script
puts (args.fn.pretty_format input)
end
|