/
handlebars.test.ts
157 lines (135 loc) · 4.32 KB
/
handlebars.test.ts
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
145
146
147
148
149
150
151
152
153
154
155
156
157
import Handlebars from '../src/handlebars'
const data = {
foo: 'bar',
fu: 'bar',
obj: {
a: 'b',
c: 123,
d: ['x', 'y', 'z']
},
text: 'this is a long line of text',
uuid: 'CFE20509-E7CF-4401-9733-7615EF3E8A25',
want: 0,
t: true,
f: false,
empty: [],
commits: ['088fcd5a5bc73a6733edcc58d0d30869ddbe2e2f'],
numbers: [1, 2, 3, 4],
letters: ['abc', 'def', 'ghi'],
foobars: [
{foo: true, bar: 1},
{foo: false, bar: 3},
{foo: true, bar: 3}
],
attendees: ['dave', 'mike', 'jane', 'betty'],
items: [1, 2, 3]
}
// utilities
test('json stringify', () => {
const template = Handlebars.compile('{{{json obj}}}')
const text = template(data)
expect(text).toStrictEqual('{"a":"b","c":123,"d":["x","y","z"]}')
})
test('truncate uuid', () => {
const template = Handlebars.compile('{{truncate uuid 8}}')
const text = template(data)
expect(text).toStrictEqual('CFE20509')
})
test('default is not needed', () => {
const template = Handlebars.compile('{{default want "fallback"}}')
const text = template(data)
expect(text).toStrictEqual('0')
})
test('default is needed', () => {
const template = Handlebars.compile('{{default fallback "fallback"}}')
const text = template(data)
expect(text).toStrictEqual('fallback')
})
test('pluralize empty list', () => {
const template = Handlebars.compile('{{pluralize empty}}')
const text = template(data)
expect(text).toStrictEqual('no items')
})
test('pluralize commits', () => {
const template = Handlebars.compile('{{pluralize commits "commit"}}')
const text = template(data)
expect(text).toStrictEqual('1 commit')
})
test('pluralize attendees', () => {
const template = Handlebars.compile('{{pluralize attendees "attendee"}}')
const text = template(data)
expect(text).toStrictEqual('4 attendees')
})
test('pluralize people', () => {
const template = Handlebars.compile('{{pluralize attendees "person" "people"}}')
const text = template(data)
expect(text).toStrictEqual('4 people')
})
// equality
test('eq is true', () => {
const template = Handlebars.compile('{{#if (eq foo fu)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
test('eq is false', () => {
const template = Handlebars.compile('{{#if (eq foo "foo")}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
test('neq is true', () => {
const template = Handlebars.compile('{{#if (neq foo fu)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
test('neq is false', () => {
const template = Handlebars.compile('{{#if (neq foo "foo")}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
// boolean operators
test('not false', () => {
const template = Handlebars.compile('{{#if (not f)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
test('not true', () => {
const template = Handlebars.compile('{{#if (not t)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
test('not false and (true or false)', () => {
const template = Handlebars.compile('{{#if (and (not f) (or t f))}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
test('or is true', () => {
const template = Handlebars.compile('{{#if (or t f)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
test('and is false', () => {
const template = Handlebars.compile('{{#if (and t f)}}yes{{else}}no{{/if}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
// conditionals
test('#ifeq is true', () => {
const template = Handlebars.compile('{{#ifeq foo fu}}yes{{else}}no{{/ifeq}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})
test('#ifeq is false', () => {
const template = Handlebars.compile('{{#ifeq foo "foo"}}yes{{else}}no{{/ifeq}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
test('#ifneq is true', () => {
const template = Handlebars.compile('{{#ifneq foo fu}}yes{{else}}no{{/ifneq}}')
const text = template(data)
expect(text).toStrictEqual('no')
})
test('#ifneq is false', () => {
const template = Handlebars.compile('{{#ifneq foo "foo"}}yes{{else}}no{{/ifneq}}')
const text = template(data)
expect(text).toStrictEqual('yes')
})