mirror of
https://github.com/bobwen-dev/react-templates
synced 2025-04-12 00:56:39 +02:00
more tests
This commit is contained in:
parent
64071ce507
commit
5d41421e81
@ -53,7 +53,7 @@ function convertText(txt) {
|
|||||||
var start = txt.indexOf('{');
|
var start = txt.indexOf('{');
|
||||||
var pre = txt.substr(0,start);
|
var pre = txt.substr(0,start);
|
||||||
if (pre) {
|
if (pre) {
|
||||||
res += (first?"":"+") + JSON.stringify(pre);
|
res += (first ? "" : "+") + JSON.stringify(pre);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
var curlyCounter = 1;
|
var curlyCounter = 1;
|
||||||
@ -175,9 +175,8 @@ function convertHtmlToReact(node, context) {
|
|||||||
} else if (node.type === "text") {
|
} else if (node.type === "text") {
|
||||||
if (node.data.trim()) {
|
if (node.data.trim()) {
|
||||||
return convertText(node.data.trim());
|
return convertText(node.data.trim());
|
||||||
} else {
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
test/data/div.html
Normal file
3
test/data/div.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<!doctype jsx>
|
||||||
|
<div>
|
||||||
|
</div>
|
6
test/data/div.js
Normal file
6
test/data/div.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
define([
|
||||||
|
'react',
|
||||||
|
'lodash'
|
||||||
|
], function (React, _) {
|
||||||
|
return React.DOM.div.apply(this, _.flatten([{}].concat([])));
|
||||||
|
});
|
@ -1,4 +1,31 @@
|
|||||||
<!doctype jsx>
|
<!doctype jsx>
|
||||||
<div>
|
<div className="nav">
|
||||||
|
<div jsx-repeat="category in this.props.model.nav">
|
||||||
|
<div className="category-title">{category.name}</div>
|
||||||
|
|
||||||
|
<div className="category-entries">
|
||||||
|
<div jsx-if="category.items.length > 0">
|
||||||
|
<div jsx-repeat="entry in category.items">
|
||||||
|
<div jsx-if="entry.type == 'query'"
|
||||||
|
className="{this.cs({selected: entry.name == this.props.model.selected.name, navlink: true})}"
|
||||||
|
onClick="=>this.props.controller.onQueryItemClicked(entry)">{entry.name}</div>
|
||||||
|
<div jsx-if="entry.type == 'tree'">
|
||||||
|
<ul>
|
||||||
|
<li jsx-repeat="node in entry.model">
|
||||||
|
<div onClick="=>this.props.controller.onTreeItemClicked(entry, node)"
|
||||||
|
className="{this.cs({selected: this.isNodeSelected(entry, node), treelink1: true})}">{node.title}</div>
|
||||||
|
<ul jsx-if="node.children.length > 0">
|
||||||
|
<li jsx-repeat="child in node.children" onClick="=>this.props.controller.onTreeItemClicked(entry, child)">
|
||||||
|
<div className="{this.cs({selected: this.isNodeSelected(entry, child), treelink2: true})}">{child.title}</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button className="new-item-btn" jsx-repeat="typeInfo in category.newTypes" onClick="=>this.openAddItem(typeInfo.collectionId, typeInfo.typeName)"><span>Add {typeInfo.friendlyName}</span></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
@ -2,5 +2,52 @@ define([
|
|||||||
'react',
|
'react',
|
||||||
'lodash'
|
'lodash'
|
||||||
], function (React, _) {
|
], function (React, _) {
|
||||||
return React.DOM.div.apply(this, _.flatten([{}].concat([])));
|
function generated1() {
|
||||||
|
this.props.controller.onQueryItemClicked(entry);
|
||||||
|
}
|
||||||
|
function generated2() {
|
||||||
|
this.props.controller.onTreeItemClicked(entry, node);
|
||||||
|
}
|
||||||
|
function generated3() {
|
||||||
|
this.props.controller.onTreeItemClicked(entry, child);
|
||||||
|
}
|
||||||
|
function generated4() {
|
||||||
|
this.openAddItem(typeInfo.collectionId, typeInfo.typeName);
|
||||||
|
}
|
||||||
|
return React.DOM.div.apply(this, _.flatten([{ 'className': 'nav' }].concat([React.DOM.div.apply(this, _.flatten([{ 'jsx-repeat': 'category in this.props.model.nav' }].concat([
|
||||||
|
React.DOM.div.apply(this, _.flatten([{ 'className': 'category-title' }].concat([category.name]))),
|
||||||
|
React.DOM.div.apply(this, _.flatten([{ 'className': 'category-entries' }].concat([React.DOM.div.apply(this, _.flatten([{ 'jsx-if': 'category.items.length > 0' }].concat([React.DOM.div.apply(this, _.flatten([{ 'jsx-repeat': 'entry in category.items' }].concat([
|
||||||
|
React.DOM.div.apply(this, _.flatten([{
|
||||||
|
'jsx-if': 'entry.type == \'query\'',
|
||||||
|
'className': this.cs({
|
||||||
|
selected: entry.name == this.props.model.selected.name,
|
||||||
|
navlink: true
|
||||||
|
}),
|
||||||
|
'onClick': generated1.bind(this)
|
||||||
|
}].concat([entry.name]))),
|
||||||
|
React.DOM.div.apply(this, _.flatten([{ 'jsx-if': 'entry.type == \'tree\'' }].concat([React.DOM.ul.apply(this, _.flatten([{}].concat([React.DOM.li.apply(this, _.flatten([{ 'jsx-repeat': 'node in entry.model' }].concat([
|
||||||
|
React.DOM.div.apply(this, _.flatten([{
|
||||||
|
'onClick': generated2.bind(this),
|
||||||
|
'className': this.cs({
|
||||||
|
selected: this.isNodeSelected(entry, node),
|
||||||
|
treelink1: true
|
||||||
|
})
|
||||||
|
}].concat([node.title]))),
|
||||||
|
React.DOM.ul.apply(this, _.flatten([{ 'jsx-if': 'node.children.length > 0' }].concat([React.DOM.li.apply(this, _.flatten([{
|
||||||
|
'jsx-repeat': 'child in node.children',
|
||||||
|
'onClick': generated3.bind(this)
|
||||||
|
}].concat([React.DOM.div.apply(this, _.flatten([{
|
||||||
|
'className': this.cs({
|
||||||
|
selected: this.isNodeSelected(entry, child),
|
||||||
|
treelink2: true
|
||||||
|
})
|
||||||
|
}].concat([child.title])))])))])))
|
||||||
|
])))])))])))
|
||||||
|
])))])))]))),
|
||||||
|
React.DOM.button.apply(this, _.flatten([{
|
||||||
|
'className': 'new-item-btn',
|
||||||
|
'jsx-repeat': 'typeInfo in category.newTypes',
|
||||||
|
'onClick': generated4.bind(this)
|
||||||
|
}].concat([React.DOM.span.apply(this, _.flatten([{}].concat(['Add ' + typeInfo.friendlyName])))])))
|
||||||
|
])))])));
|
||||||
});
|
});
|
@ -8,11 +8,17 @@ var path = require('path');
|
|||||||
var dataPath = path.resolve(__dirname, '..', 'data');
|
var dataPath = path.resolve(__dirname, '..', 'data');
|
||||||
|
|
||||||
test('timing test', function (t) {
|
test('timing test', function (t) {
|
||||||
t.plan(1);
|
t.plan(2);
|
||||||
|
|
||||||
|
check('div.html');
|
||||||
|
check('test.html');
|
||||||
|
|
||||||
|
function check(testFile) {
|
||||||
|
var filename = path.join(dataPath, testFile);
|
||||||
|
var html = fs.readFileSync(filename).toString();
|
||||||
|
var expected = fs.readFileSync(filename.replace(".html", ".js")).toString();
|
||||||
|
var actual = reactTemplates.convertTemplateToReact(html);
|
||||||
|
t.equal(actual, expected);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var filename = path.join(dataPath, 'test.html');
|
|
||||||
var html = fs.readFileSync(filename).toString();
|
|
||||||
var expected = fs.readFileSync(filename.replace(".html", ".js")).toString();
|
|
||||||
var actual = reactTemplates.convertTemplateToReact(html);
|
|
||||||
t.equal(actual, expected);
|
|
||||||
});
|
|
Loading…
x
Reference in New Issue
Block a user