UNPKG

4.5 kBJavaScriptView Raw
1var test = require('tape')
2var util = require('util')
3var parseView = require('../lib/parse')
4
5test("Parse standard elements", function(t){
6 var view = "<div id='main'>Contents <strong>Some sub content</strong></div>"
7 var expected = {
8 c: ['<div id="main">Contents <strong>Some sub content</strong></div>']
9 }
10 t.deepEqual(parseView(view), expected)
11 t.end()
12})
13
14test("Parse with no whitespace", function(t){
15 var view = "<div id='main'>Contents <div t:whitespace='none'>Some sub content\n <div> Test </div>\n</div></div>"
16 var expected = {
17 c: ["<div id=\"main\">Contents ",{c:["<div>Some sub content<div>Test</div></div>"]},"</div>"]
18 }
19 t.deepEqual(parseView(view), expected)
20 t.end()
21})
22
23
24test("Parse standard elements with repeater", function(t){
25 var view = "<div>Contents <span t:repeat='query'><span t:bind='.test:cat'/></span></div>"
26 var expected = {
27 c: ['<div>Contents ', {
28 r: 'query',
29 c: ['<span><span>', {q: '.test:cat'}, '</span></span>']
30 }, '</div>']
31 }
32
33 t.deepEqual(parseView(view), expected)
34 t.end()
35})
36
37test("Parse standard elements with inner view", function(t){
38 var view = "<div>Contents <strong>Some sub content</strong> <t:placeholder t:view='inline_item'/></div>"
39 //console.log(util.inspect(parseView(view), false, 10))
40
41 var expected = {
42 c: ['<div>Contents <strong>Some sub content</strong> ', {v: 'inline_item'}, '</div>']
43 }
44
45 t.deepEqual(parseView(view), expected)
46 t.end()
47})
48
49test("Parse standard elements with repeating inner view", function(t){
50 var view = "<div>Contents <strong>Some sub content</strong> <div t:repeat='collection' t:view='inline_item'/></div>"
51 //console.log(util.inspect(parseView(view), false, 10))
52
53 var expected = {
54 c: ['<div>Contents <strong>Some sub content</strong> ', {"c":["<div>",{"v":"inline_item"},"</div>"],"r":"collection"}, '</div>']
55 }
56
57 t.deepEqual(parseView(view), expected)
58 t.end()
59})
60
61test("t:by and t:when", function(t){
62 var view = "<div t:by='type'><div t:when='cat'>Cat</div><div t:when='dog'>Dog</div><div t:when='cat|dog'>Either</div></div>"
63 //console.log(util.inspect(parseView(view), false, 10))
64
65 var expected = {
66 c: ['<div>', {c: ['<div>Cat</div>'], f: {type: 'cat'}}, {c: ['<div>Dog</div>'], f: {type: 'dog'}}, {c: ['<div>Either</div>'], f: {type: {$only: ['cat', 'dog']}}}, '</div>']
67 }
68
69 t.deepEqual(parseView(view), expected)
70 t.end()
71})
72
73test("process requires", function(t){
74 var view = "<? require './test.html' as test ?><? require './heading.html' as heading ?><div t:view='test'/>"
75 //console.log(util.inspect(parseView(view), false, 10))
76
77 var expected = {
78 c: ['<div>', {v: 'test'}, '</div>'],
79 requires: {
80 'test': './test.html',
81 'heading': './heading.html'
82 }
83 }
84
85 t.deepEqual(parseView(view), expected)
86 t.end()
87})
88
89test("process resources", function(t){
90 var view = "<? resource './object.css' as Object ?><div t:bind:class=':css(Object)' />"
91 //console.log(util.inspect(parseView(view), false, 10))
92
93 var expected = {
94 c: ['<div class="', {q: ':css(Object)', e: 'attr'}, '"></div>'],
95 resources: {
96 'Object': './object.css'
97 }
98 }
99
100 t.deepEqual(parseView(view), expected)
101 t.end()
102})
103
104test("self closing tags", function(t){
105 var view = "<div><img src='test.jpg' /> <br /> <hr /><script src='test' />"
106
107 var expected = {
108 c: ['<div><img src="test.jpg"/> <br/> <hr/><script src="test"></script>']
109 }
110
111 t.deepEqual(parseView(view), expected)
112 t.end()
113})
114
115test("bind with content already present (discard)", function(t){
116 var view = '<div t:bind="test">Content</div>'
117
118 var expected = {
119 c: ['<div>', {q: 'test'}, '</div>']
120 }
121
122 t.deepEqual(parseView(view), expected)
123 t.end()
124})
125
126test("bind with content already present and is view (discard)", function(t){
127 var view = '<div t:bind="test" t:view="view">Content</div>'
128
129 var expected = {
130 c: ['<div>', {q: 'test', v: 'view', c: ['Content']}, '</div>']
131 }
132
133 t.deepEqual(parseView(view), expected)
134 t.end()
135})
136
137test("bind attributes", function(t){
138 var view = '<div t:bind:id="id">Content</div>'
139
140 var expected = {
141 c: ['<div id="', {q: 'id', e: 'attr'} ,'">Content</div>']
142 }
143
144 t.deepEqual(parseView(view), expected)
145 t.end()
146})
147
148test("parse t:as", function(t){
149 var view = '<div>stuff</div><div t:as="current">Content</div>'
150
151 var expected = {
152 c: ["<div>stuff</div>",{"c":["<div>Content</div>"],"as":"current"}]
153 }
154
155 t.deepEqual(parseView(view), expected)
156 t.end()
157})
\No newline at end of file