-
Notifications
You must be signed in to change notification settings - Fork 0
/
object_test.go
75 lines (64 loc) · 2.01 KB
/
object_test.go
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
// Copyright 2016 David Lavieri. All rights reserved.
// Use of this source code is governed by a MIT License
// License that can be found in the LICENSE file.
package main
import "testing"
// ------------ INLINE OBJECT
var inlineObject = []string{
`var car = {type:"Fiat", model:"500", color:"white"};`,
`var person = {firstName: '{$firstName}', lastName: "Doe", age: {json_decode($age)}, eyeColor: {$var}};`,
`const myObject = {hello: "world", myObject:{one: 1, two: [2, 2]}}`,
`inline_call({hello: "world", myObject:{one: 1, two: [2, 2]}})`,
}
var expInlineObject = []string{
`var car = {ldelim}type:"Fiat", model:"500", color:"white"{rdelim};`,
`var person = {ldelim}firstName: '{$firstName}', lastName: "Doe", age: {json_decode($age)}, eyeColor: {$var}{rdelim};`,
`const myObject = {ldelim}hello: "world", myObject:{ldelim}one: 1, two: [2, 2]{rdelim}{rdelim}`,
`inline_call({ldelim}hello: "world", myObject:{ldelim}one: 1, two: [2, 2]{rdelim}{rdelim})`,
}
var nonInlineObject = []string{
`<body>`,
`{$some_variable}`,
`Outside the script tag may be pure html or may not`,
`<script type="text/javascript">`,
`let myVar = {json_decode($jsonVariable)}`,
`let myOtherVar = '{$wuuuu}'`,
`console.log({include file=$myCustomFile})`,
`funcion () {`,
`}`,
`call({`,
`hello: "world"`,
`}, {`,
`world: "hello"`,
`})`,
`let array = [{`,
`hello: "world",`,
`myObject:{`,
`one: 1,`,
`two: [2, 2]`,
`}`,
`}]`,
`const strangeObject = {maybe: {it: {wont: {work: "?"`,
`}, maybe: ""}, not: "did"}, work: "entirely"}`,
`</script>`,
`</body>`,
}
func TestParseInlineObjectMatch(t *testing.T) {
for i, line := range inlineObject {
nl, matched := parseInlineObject(line)
if !matched {
t.Fatalf("Should parse")
}
if nl != expInlineObject[i] {
t.Fatalf("Expected inline object parsed: %s; got: %s", expInlineObject[i], nl)
}
}
}
func TestParseInlineObjectNoMatch(t *testing.T) {
for _, line := range nonInlineObject {
_, matched := parseInlineObject(line)
if matched {
t.Fatalf("Should not match")
}
}
}