more tests

This commit is contained in:
ido 2014-11-10 16:23:17 +02:00
parent 64071ce507
commit 5d41421e81
6 changed files with 100 additions and 12 deletions

View File

@ -53,7 +53,7 @@ function convertText(txt) {
var start = txt.indexOf('{');
var pre = txt.substr(0,start);
if (pre) {
res += (first?"":"+") + JSON.stringify(pre);
res += (first ? "" : "+") + JSON.stringify(pre);
first = false;
}
var curlyCounter = 1;
@ -175,9 +175,8 @@ function convertHtmlToReact(node, context) {
} else if (node.type === "text") {
if (node.data.trim()) {
return convertText(node.data.trim());
} else {
return "";
}
return "";
}
}

3
test/data/div.html Normal file
View File

@ -0,0 +1,3 @@
<!doctype jsx>
<div>
</div>

6
test/data/div.js Normal file
View File

@ -0,0 +1,6 @@
define([
'react',
'lodash'
], function (React, _) {
return React.DOM.div.apply(this, _.flatten([{}].concat([])));
});

View File

@ -1,4 +1,31 @@
<!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>

View File

@ -2,5 +2,52 @@ define([
'react',
'lodash'
], 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])))])))
])))])));
});

View File

@ -8,11 +8,17 @@ var path = require('path');
var dataPath = path.resolve(__dirname, '..', 'data');
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);
});