-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest-attr.lua
144 lines (140 loc) · 5.17 KB
/
test-attr.lua
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
local tasty = require 'tasty'
local test = tasty.test_case
local group = tasty.test_group
local assert = tasty.assert
return {
group 'Attr' {
group 'Constructor' {
test('Attr is a function', function ()
assert.are_equal(type(Attr), 'function')
end),
test('returns null-Attr if no arguments are given', function ()
local attr = Attr()
assert.are_equal(attr.identifier, '')
assert.are_same(attr.classes, {})
assert.are_same(#attr.attributes, 0)
end),
test(
'accepts string-indexed table or list of pairs as attributes',
function ()
local attributes_list = {{'one', '1'}, {'two', '2'}}
local attr_from_list = Attr('', {}, attributes_list)
assert.are_equal(attr_from_list.attributes.one, '1')
assert.are_equal(attr_from_list.attributes.two, '2')
local attributes_table = {one = '1', two = '2'}
local attr_from_table = Attr('', {}, attributes_table)
assert.are_equal(
attr_from_table.attributes,
AttributeList(attributes_table)
)
assert.are_equal(attr_from_table.attributes.one, '1')
assert.are_equal(attr_from_table.attributes.two, '2')
end
)
},
group 'Properties' {
test('has t and tag property', function ()
local attr = Attr('')
assert.are_equal(attr.t, 'Attr')
assert.are_equal(attr.tag, 'Attr')
end),
test('has field `identifier`', function ()
local attr = Attr 'test'
assert.are_equal(attr.identifier, 'test')
end),
test('can be modified through field `identifier`', function ()
local attr = Attr 'test'
attr.identifier = 'new'
assert.are_equal(attr, Attr 'new')
end),
group 'field classes' {
test('can be read', function ()
local attr = Attr('', {'one'})
assert.are_same(attr.classes, {'one'})
end),
test('can be set', function ()
local attr = Attr()
attr.classes = {'two'}
assert.are_equal(attr, Attr('', {'two'}))
end),
test('contains a pandoc List', function ()
assert.are_equal(getmetatable(Attr().classes), List)
end),
}
},
group 'AttributeList' {
test('allows access via fields', function ()
local attributes = Attr('', {}, {{'a', '1'}, {'b', '2'}}).attributes
assert.are_equal(attributes.a, '1')
assert.are_equal(attributes.b, '2')
end),
test('allows access to pairs via numerical indexing', function ()
local attributes = Attr('', {}, {{'a', '1'}, {'b', '2'}}).attributes
assert.are_same(attributes[1], {'a', '1'})
assert.are_same(attributes[2], {'b', '2'})
end),
test('allows replacing a pair', function ()
local attributes = AttributeList{{'a', '1'}, {'b', '2'}}
attributes[1] = {'t','five'}
assert.are_same(attributes[1], {'t', 'five'})
assert.are_same(attributes[2], {'b', '2'})
end),
test('allows to remove a pair', function ()
local attributes = AttributeList{{'a', '1'}, {'b', '2'}}
attributes[1] = nil
assert.are_equal(#attributes, 1)
end),
test('adds entries by field name', function ()
local attributes = Attr('',{}, {{'c', '1'}, {'d', '2'}}).attributes
attributes.e = '3'
assert.are_same(
attributes,
-- checking the full AttributeList would "duplicate" entries
AttributeList{{'c', '1'}, {'d', '2'}, {'e', '3'}}
)
end),
test('deletes entries by field name', function ()
local attributes = Attr('',{}, {a = '1', b = '2'}).attributes
attributes.a = nil
assert.is_nil(attributes.a)
assert.are_same(attributes, AttributeList{{'b', '2'}})
end),
test('remains unchanged if deleted key did not exist', function ()
local assoc_list = List:new {{'alpha', 'x'}, {'beta', 'y'}}
local attributes = Attr('', {}, assoc_list).attributes
attributes.a = nil
local new_assoc_list = List()
for k, v in pairs(attributes) do
new_assoc_list:insert({k, v})
end
assert.are_same(new_assoc_list, assoc_list)
end),
test('gives key-value pairs when iterated-over', function ()
local attributes = {width = '11', height = '22', name = 'test'}
local attr = Attr('', {}, attributes)
local count = 0
for k, v in pairs(attr.attributes) do
assert.are_equal(attributes[k], v)
count = count + 1
end
assert.are_equal(count, 3)
end)
},
group 'HTML-like attribute tables' {
test('in element constructor', function ()
local html_attributes = {
id = 'the-id',
class = 'class1 class2',
width = '11',
height = '12'
}
local attr = Attr(html_attributes)
assert.are_equal(attr.identifier, 'the-id')
assert.are_equal(attr.classes[1], 'class1')
assert.are_equal(attr.classes[2], 'class2')
assert.are_equal(attr.attributes.width, '11')
assert.are_equal(attr.attributes.height, '12')
end),
}
}
}