Browse Source

Update parser tests

pull/3073/head
Artur Arseniev 5 years ago
parent
commit
bfbd179ea0
  1. 2
      src/parser/model/ParserCss.js
  2. 3
      test/specs/parser/model/ParserCss.js
  3. 592
      test/specs/parser/model/ParserHtml.js

2
src/parser/model/ParserCss.js

@ -12,7 +12,7 @@ export default (config = {}) => ({
*/
parse(str) {
let result = [];
const { parserCss, em = {} } = config;
const { parserCss, em } = config;
const editor = em && em.get && em.get('Editor');
const nodes = parserCss ? parserCss(str, editor) : BrowserCssParser(str);
nodes.forEach(node => (result = result.concat(this.checkNode(node))));

3
test/specs/parser/model/ParserCss.js

@ -9,7 +9,8 @@ describe('ParserCss', () => {
beforeEach(() => {
config = {
em: {
getCustomParserCss: () => customParser
getCustomParserCss: () => customParser,
trigger: () => {}
}
};
obj = new ParserCss(config);

592
test/specs/parser/model/ParserHtml.js

@ -20,28 +20,30 @@ describe('ParserHtml', () => {
test('Simple div node', () => {
var str = '<div></div>';
var result = { tagName: 'div' };
var result = [{ tagName: 'div' }];
expect(obj.parse(str).html).toEqual(result);
});
test('Simple article node', () => {
var str = '<article></article>';
var result = { tagName: 'article' };
var result = [{ tagName: 'article' }];
expect(obj.parse(str).html).toEqual(result);
});
test('Node with attributes', () => {
var str =
'<div id="test1" class="test2 test3" data-one="test4" strange="test5"></div>';
var result = {
tagName: 'div',
classes: ['test2', 'test3'],
attributes: {
'data-one': 'test4',
id: 'test1',
strange: 'test5'
var result = [
{
tagName: 'div',
classes: ['test2', 'test3'],
attributes: {
'data-one': 'test4',
id: 'test1',
strange: 'test5'
}
}
};
];
expect(obj.parse(str).html).toEqual(result);
});
@ -79,261 +81,279 @@ describe('ParserHtml', () => {
test('Style attribute is isolated', () => {
var str =
'<div id="test1" style="color:black; width:100px; test:value;"></div>';
var result = {
tagName: 'div',
attributes: { id: 'test1' },
style: {
color: 'black',
width: '100px',
test: 'value'
var result = [
{
tagName: 'div',
attributes: { id: 'test1' },
style: {
color: 'black',
width: '100px',
test: 'value'
}
}
};
];
expect(obj.parse(str).html).toEqual(result);
});
test('Class attribute is isolated', () => {
var str = '<div id="test1" class="test2 test3 test4"></div>';
var result = {
tagName: 'div',
attributes: { id: 'test1' },
classes: ['test2', 'test3', 'test4']
};
var result = [
{
tagName: 'div',
attributes: { id: 'test1' },
classes: ['test2', 'test3', 'test4']
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse images nodes', () => {
var str = '<img id="test1" src="./index.html"/>';
var result = {
tagName: 'img',
type: 'image',
attributes: {
id: 'test1',
src: './index.html'
var result = [
{
tagName: 'img',
type: 'image',
attributes: {
id: 'test1',
src: './index.html'
}
}
};
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse text nodes', () => {
var str = '<div id="test1">test2 </div>';
var result = {
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
content: 'test2 '
};
var result = [
{
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
content: 'test2 '
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse text with few text tags', () => {
var str =
'<div id="test1"><br/> test2 <br/> a b <b>b</b> <i>i</i> <u>u</u> test </div>';
var result = {
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
components: [
{ tagName: 'br' },
{
content: ' test2 ',
type: 'textnode',
tagName: ''
},
{ tagName: 'br' },
{
content: ' a b ',
type: 'textnode',
tagName: ''
},
{
content: 'b',
type: 'text',
tagName: 'b'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'u',
tagName: 'u',
type: 'text'
},
{
content: ' test ',
type: 'textnode',
tagName: ''
}
]
};
var result = [
{
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
components: [
{ tagName: 'br' },
{
content: ' test2 ',
type: 'textnode',
tagName: ''
},
{ tagName: 'br' },
{
content: ' a b ',
type: 'textnode',
tagName: ''
},
{
content: 'b',
type: 'text',
tagName: 'b'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'u',
tagName: 'u',
type: 'text'
},
{
content: ' test ',
type: 'textnode',
tagName: ''
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse text with few text tags and nested node', () => {
var str =
'<div id="test1">a b <b>b</b> <i>i</i>c <div>ABC</div> <i>i</i> <u>u</u> test </div>';
var result = {
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
components: [
{
content: 'a b ',
type: 'textnode',
tagName: ''
},
{
content: 'b',
tagName: 'b',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: 'c ',
type: 'textnode',
tagName: ''
},
{
tagName: 'div',
type: 'text',
content: 'ABC'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'u',
tagName: 'u',
type: 'text'
},
{
content: ' test ',
type: 'textnode',
tagName: ''
}
]
};
var result = [
{
tagName: 'div',
attributes: { id: 'test1' },
type: 'text',
components: [
{
content: 'a b ',
type: 'textnode',
tagName: ''
},
{
content: 'b',
tagName: 'b',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: 'c ',
type: 'textnode',
tagName: ''
},
{
tagName: 'div',
type: 'text',
content: 'ABC'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'i',
tagName: 'i',
type: 'text'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
content: 'u',
tagName: 'u',
type: 'text'
},
{
content: ' test ',
type: 'textnode',
tagName: ''
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse nested nodes', () => {
var str =
'<article id="test1"> <div></div> <footer id="test2"></footer> Text mid <div id="last"></div></article>';
var result = {
tagName: 'article',
attributes: { id: 'test1' },
components: [
{
tagName: 'div'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
tagName: 'footer',
attributes: { id: 'test2' }
},
{
tagName: '',
type: 'textnode',
content: ' Text mid '
},
{
tagName: 'div',
attributes: { id: 'last' }
}
]
};
var result = [
{
tagName: 'article',
attributes: { id: 'test1' },
components: [
{
tagName: 'div'
},
{
content: ' ',
type: 'textnode',
tagName: ''
},
{
tagName: 'footer',
attributes: { id: 'test2' }
},
{
tagName: '',
type: 'textnode',
content: ' Text mid '
},
{
tagName: 'div',
attributes: { id: 'last' }
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse nested text nodes', () => {
var str = '<div>content1 <div>nested</div> content2</div>';
var result = {
tagName: 'div',
type: 'text',
components: [
{
tagName: '',
type: 'textnode',
content: 'content1 '
},
{
tagName: 'div',
type: 'text',
content: 'nested'
},
{
tagName: '',
type: 'textnode',
content: ' content2'
}
]
};
var result = [
{
tagName: 'div',
type: 'text',
components: [
{
tagName: '',
type: 'textnode',
content: 'content1 '
},
{
tagName: 'div',
type: 'text',
content: 'nested'
},
{
tagName: '',
type: 'textnode',
content: ' content2'
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse nested span text nodes', () => {
var str = '<div>content1 <div><span>nested</span></div> content2</div>';
var result = {
tagName: 'div',
components: [
{
tagName: '',
type: 'textnode',
content: 'content1 '
},
{
tagName: 'div',
components: [
{
tagName: 'span',
type: 'text',
content: 'nested'
}
]
},
{
tagName: '',
type: 'textnode',
content: ' content2'
}
]
};
var result = [
{
tagName: 'div',
components: [
{
tagName: '',
type: 'textnode',
content: 'content1 '
},
{
tagName: 'div',
components: [
{
tagName: 'span',
type: 'text',
content: 'nested'
}
]
},
{
tagName: '',
type: 'textnode',
content: ' content2'
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
@ -415,89 +435,99 @@ describe('ParserHtml', () => {
test('Parse nested div with text and spaces', () => {
var str = '<div> <p>TestText</p> </div>';
var result = {
tagName: 'div',
type: 'text',
components: [
{
tagName: '',
type: 'textnode',
content: ' '
},
{
tagName: 'p',
content: 'TestText',
type: 'text'
},
{
tagName: '',
type: 'textnode',
content: ' '
}
]
};
var result = [
{
tagName: 'div',
type: 'text',
components: [
{
tagName: '',
type: 'textnode',
content: ' '
},
{
tagName: 'p',
content: 'TestText',
type: 'text'
},
{
tagName: '',
type: 'textnode',
content: ' '
}
]
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse node with model attributes to fetch', () => {
var str =
'<div id="test1" data-test="test-value" data-gjs-draggable=".myselector" data-gjs-stuff="test">test2 </div>';
var result = {
tagName: 'div',
draggable: '.myselector',
stuff: 'test',
attributes: {
id: 'test1',
'data-test': 'test-value'
},
type: 'text',
content: 'test2 '
};
var result = [
{
tagName: 'div',
draggable: '.myselector',
stuff: 'test',
attributes: {
id: 'test1',
'data-test': 'test-value'
},
type: 'text',
content: 'test2 '
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse model attributes with true and false', () => {
var str =
'<div id="test1" data-test="test-value" data-gjs-draggable="true" data-gjs-stuff="false">test2 </div>';
var result = {
tagName: 'div',
draggable: true,
stuff: false,
attributes: {
id: 'test1',
'data-test': 'test-value'
},
type: 'text',
content: 'test2 '
};
var result = [
{
tagName: 'div',
draggable: true,
stuff: false,
attributes: {
id: 'test1',
'data-test': 'test-value'
},
type: 'text',
content: 'test2 '
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse attributes with object inside', () => {
var str = `<div data-gjs-test='{ "prop1": "value1", "prop2": 10, "prop3": true}'>test2 </div>`;
var result = {
tagName: 'div',
attributes: {},
type: 'text',
test: {
prop1: 'value1',
prop2: 10,
prop3: true
},
content: 'test2 '
};
var result = [
{
tagName: 'div',
attributes: {},
type: 'text',
test: {
prop1: 'value1',
prop2: 10,
prop3: true
},
content: 'test2 '
}
];
expect(obj.parse(str).html).toEqual(result);
});
test('Parse attributes with arrays inside', () => {
var str = `<div data-gjs-test='["value1", "value2"]'>test2 </div>`;
var result = {
tagName: 'div',
attributes: {},
type: 'text',
test: ['value1', 'value2'],
content: 'test2 '
};
var result = [
{
tagName: 'div',
attributes: {},
type: 'text',
test: ['value1', 'value2'],
content: 'test2 '
}
];
expect(obj.parse(str).html).toEqual(result);
});
});

Loading…
Cancel
Save