1 | var test = require('tape')
|
2 | var util = require('util')
|
3 | var parseView = require('../lib/parse')
|
4 |
|
5 | test("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 |
|
14 | test("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 |
|
24 | test("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 |
|
37 | test("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 |
|
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 |
|
49 | test("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 |
|
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 |
|
61 | test("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 |
|
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 |
|
73 | test("process requires", function(t){
|
74 | var view = "<? require './test.html' as test ?><? require './heading.html' as heading ?><div t:view='test'/>"
|
75 |
|
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 |
|
89 | test("process resources", function(t){
|
90 | var view = "<? resource './object.css' as Object ?><div t:bind:class=':css(Object)' />"
|
91 |
|
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 |
|
104 | test("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 |
|
115 | test("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 |
|
126 | test("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 |
|
137 | test("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 |
|
148 | test("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 |