Skip to content

Commit 07c6847

Browse files
Rename test mocks file and update tests
- Rename `test/data.json` to `test/helpers/mocks.json` - Require mocks in test helpers index - Add a test for doctype (should be skipped and not parsed) - Tidy tests
1 parent 0dd9a7d commit 07c6847

File tree

4 files changed

+52
-34
lines changed

4 files changed

+52
-34
lines changed

test/dom-to-react.js

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@ var React = require('react');
88
var htmlToDOM = require('html-dom-parser');
99
var domToReact = require('../lib/dom-to-react');
1010
var helpers = require('./helpers/');
11-
var data = require('./data');
11+
var mocks = helpers.mocks;
12+
var render = helpers.render;
1213

1314
/**
1415
* Tests for `domToReact`.
1516
*/
1617
describe('dom-to-react parser', function() {
1718

1819
it('converts single DOM node to React', function() {
19-
var html = data.html.single;
20+
var html = mocks.html.single;
2021
var reactElement = domToReact(htmlToDOM(html));
22+
2123
assert(React.isValidElement(reactElement));
2224
assert.deepEqual(
2325
reactElement,
@@ -26,12 +28,14 @@ describe('dom-to-react parser', function() {
2628
});
2729

2830
it('converts multiple DOM nodes to React', function() {
29-
var html = data.html.multiple;
31+
var html = mocks.html.multiple;
3032
var reactElements = domToReact(htmlToDOM(html));
33+
3134
reactElements.forEach(function(reactElement) {
3235
assert(React.isValidElement(reactElement));
3336
assert(reactElement.key);
3437
});
38+
3539
assert.deepEqual(
3640
reactElements,
3741
[
@@ -43,8 +47,9 @@ describe('dom-to-react parser', function() {
4347

4448
// https://facebook.github.io/react/docs/forms.html#why-textarea-value
4549
it('converts <textarea> correctly', function() {
46-
var html = data.html.textarea;
50+
var html = mocks.html.textarea;
4751
var reactElement = domToReact(htmlToDOM(html));
52+
4853
assert(React.isValidElement(reactElement));
4954
assert.deepEqual(
5055
reactElement,
@@ -55,8 +60,9 @@ describe('dom-to-react parser', function() {
5560
});
5661

5762
it('does not escape <script> content', function() {
58-
var html = data.html.script;
63+
var html = mocks.html.script;
5964
var reactElement = domToReact(htmlToDOM(html));
65+
6066
assert(React.isValidElement(reactElement));
6167
assert.deepEqual(
6268
reactElement,
@@ -69,8 +75,9 @@ describe('dom-to-react parser', function() {
6975
});
7076

7177
it('does not escape <style> content', function() {
72-
var html = data.html.style;
78+
var html = mocks.html.style;
7379
var reactElement = domToReact(htmlToDOM(html));
80+
7481
assert(React.isValidElement(reactElement));
7582
assert.deepEqual(
7683
reactElement,
@@ -83,32 +90,40 @@ describe('dom-to-react parser', function() {
8390
});
8491

8592
it('does not have `children` for void elements', function() {
86-
var html = data.html.img;
93+
var html = mocks.html.img;
8794
var reactElement = domToReact(htmlToDOM(html));
8895
assert(!reactElement.props.children);
8996
});
9097

9198
it('does not throw an error for void elements', function() {
92-
var html = data.html.void;
99+
var html = mocks.html.void;
93100
var reactElements = domToReact(htmlToDOM(html));
94101
assert.doesNotThrow(function() {
95-
helpers.render(React.createElement('div', {}, reactElements));
102+
render(React.createElement('div', {}, reactElements));
96103
});
97104
});
98105

99-
it('skips HTML comments', function() {
100-
var html = [data.html.single, data.html.comment, data.html.single].join('');
106+
it('skips doctype and comments', function() {
107+
var html = [
108+
mocks.html.doctype,
109+
mocks.html.single,
110+
mocks.html.comment,
111+
mocks.html.single
112+
].join('');
113+
101114
var reactElements = domToReact(htmlToDOM(html));
102115
reactElements.forEach(function(reactElement) {
103116
assert(React.isValidElement(reactElement));
104117
assert(reactElement.key);
105118
});
119+
106120
assert.deepEqual(
107121
reactElements,
108122
[
109-
React.createElement('p', { key: 0 }, 'foo'),
123+
// doctype
124+
React.createElement('p', { key: 1 }, 'foo'),
110125
// comment is in the middle
111-
React.createElement('p', { key: 2 }, 'foo')
126+
React.createElement('p', { key: 3 }, 'foo')
112127
]
113128
);
114129
});

test/helpers/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ function render(reactElement) {
2323
* Export assert helpers.
2424
*/
2525
module.exports = {
26-
render: render
26+
render: render,
27+
mocks: require('./mocks')
2728
};

test/data.json renamed to test/helpers/mocks.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"style": "<style>body > .foo { color: #f00; }</style>",
1111
"img": "<img src=\"http://stat.ic/img.jpg\" alt=\"Image\"/>",
1212
"void": "<link/><meta/><img/><br/><hr/><input/>",
13-
"comment": "<!-- comment -->"
13+
"comment": "<!-- comment -->",
14+
"doctype": "<!DOCTYPE html>"
1415
},
1516
"svg": {
1617
"complex": "<svg height=\"400\" width=\"450\"><path id=\"lineAB\" d=\"M 100 350 l 150 -300\" stroke=\"red\" stroke-width=\"3\" fill=\"none\"></path><g stroke=\"black\" stroke-width=\"3\" fill=\"black\"><circle id=\"pointA\" cx=\"100\" cy=\"350\" r=\"3\"></circle></g><g font-size=\"30\" font-family=\"sans-serif\" fill=\"black\" stroke=\"none\" text-anchor=\"middle\"><text x=\"100\" y=\"350\" dx=\"-30\">A</text></g>Your browser does not support inline SVG.</svg>"

test/html-to-react.js

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ var assert = require('assert');
77
var React = require('react');
88
var Parser = require('../');
99
var helpers = require('./helpers/');
10-
var data = require('./data');
10+
var mocks = helpers.mocks;
11+
var render = helpers.render;
1112

1213
/**
1314
* Tests for `htmlToReact`.
@@ -32,49 +33,49 @@ describe('html-to-react', function() {
3233
});
3334

3435
it('converts single HTML element to React', function() {
35-
var html = data.html.single;
36+
var html = mocks.html.single;
3637
var reactElement = Parser(html);
37-
assert.equal(helpers.render(reactElement), html);
38+
assert.equal(render(reactElement), html);
3839
});
3940

4041
it('converts single HTML element and ignores comment', function() {
41-
var html = data.html.single;
42+
var html = mocks.html.single;
4243
// comment should be ignored
43-
var reactElement = Parser(html + data.html.comment);
44-
assert.equal(helpers.render(reactElement), html);
44+
var reactElement = Parser(html + mocks.html.comment);
45+
assert.equal(render(reactElement), html);
4546
});
4647

4748
it('converts multiple HTML elements to React', function() {
48-
var html = data.html.multiple;
49+
var html = mocks.html.multiple;
4950
var reactElements = Parser(html);
5051
assert.equal(
51-
helpers.render(React.createElement('div', {}, reactElements)),
52+
render(React.createElement('div', {}, reactElements)),
5253
'<div>' + html + '</div>'
5354
);
5455
});
5556

5657
it('converts complex HTML to React', function() {
57-
var html = data.html.complex;
58-
var reactElement = Parser(html);
59-
assert.equal(helpers.render(reactElement), html);
58+
var html = mocks.html.complex;
59+
var reactElement = Parser(mocks.html.doctype + html);
60+
assert.equal(render(reactElement), html);
6061
});
6162

6263
it('converts empty <script> to React', function() {
6364
var html = '<script></script>';
6465
var reactElement = Parser(html);
65-
assert.equal(helpers.render(reactElement), html);
66+
assert.equal(render(reactElement), html);
6667
});
6768

6869
it('converts empty <style> to React', function() {
6970
var html = '<style></style>';
7071
var reactElement = Parser(html);
71-
assert.equal(helpers.render(reactElement), html);
72+
assert.equal(render(reactElement), html);
7273
});
7374

7475
it('converts SVG to React', function() {
75-
var svg = data.svg.complex;
76+
var svg = mocks.svg.complex;
7677
var reactElement = Parser(svg);
77-
assert.equal(helpers.render(reactElement), svg);
78+
assert.equal(render(reactElement), svg);
7879
});
7980

8081
});
@@ -87,7 +88,7 @@ describe('html-to-react', function() {
8788
describe('replace', function() {
8889

8990
it('overrides the element if replace is valid', function() {
90-
var html = data.html.complex;
91+
var html = mocks.html.complex;
9192
var reactElement = Parser(html, {
9293
replace: function(node) {
9394
if (node.name === 'title') {
@@ -96,13 +97,13 @@ describe('html-to-react', function() {
9697
}
9798
});
9899
assert.equal(
99-
helpers.render(reactElement),
100+
render(reactElement),
100101
html.replace('<title>Title</title>', '<title>Replaced Title</title>')
101102
);
102103
});
103104

104105
it('does not override the element if replace is invalid', function() {
105-
var html = data.html.complex;
106+
var html = mocks.html.complex;
106107
var reactElement = Parser(html, {
107108
replace: function(node) {
108109
if (node.attribs && node.attribs.id === 'header') {
@@ -114,7 +115,7 @@ describe('html-to-react', function() {
114115
}
115116
});
116117
assert.notEqual(
117-
helpers.render(reactElement),
118+
render(reactElement),
118119
html.replace(
119120
'<header id="header">Header</header>',
120121
'<h1>Heading</h1>'

0 commit comments

Comments
 (0)