import { XmlParser, ParserEventType } from '.';
describe('XmlParser', () => {
// Flavors:
describe('Vanilla', () => {
let last_element = null;
let last_attrs = null;
let last_data = null;
let parser = null;
beforeEach(() => {
parser = new XmlParser(function (event) {
switch (event.eventType) {
case ParserEventType.StartElement:
last_element = event.elementName;
last_attrs = event.attributes;
break;
case ParserEventType.Text:
last_data = event.data;
break;
}
});
});
it('handles whitespace around attribute =', () => {
parser.parse("");
expect(last_element).toBe('TextField');
expect(last_attrs['text']).toBe('hello');
});
it('resolves entities', () => {
parser.parse('<>"&'');
expect(last_data).toBe('<>"&\'');
});
it('resolves greek letter entities in attributes', () => {
parser.parse("blah");
expect(last_attrs.text).toBe('Ω');
});
it('resolves entities in element text', () => {
parser.parse('Ω');
expect(last_data).toBe('Ω');
});
it('resolves <> inside quotes', () => {
parser.parse('\' blah="b"/>');
expect(last_attrs.name).toBe('<&>');
expect(last_attrs.blah).toBe('b');
});
});
describe('Angular', () => {
let last_element = null;
let last_attrs = null;
let parser = null;
beforeEach(() => {
parser = new XmlParser(function (event) {
switch (event.eventType) {
case ParserEventType.StartElement:
last_element = event.elementName;
last_attrs = event.attributes;
break;
}
});
parser.angularSyntax = true;
});
it('parses [property] binding', () => {
parser.parse("");
expect(last_element).toBe('TextField');
expect(last_attrs['[text]']).toBe('somevar');
});
it('parses (event) binding', () => {
parser.parse("");
expect(last_element).toBe('TextField');
expect(last_attrs['(tap)']).toBe('onTap(blah)');
});
it('parses (^event) binding', () => {
parser.parse("");
expect(last_element).toBe('TextField');
expect(last_attrs['(^tap)']).toBe('onTap(blah)');
});
it('parses #id attribute', () => {
parser.parse('');
expect(last_element).toBe('TextField');
expect(last_attrs['#firstName']).toBe('');
});
it('parses #id attribute followed by another', () => {
parser.parse("");
expect(last_element).toBe('TextField');
expect(last_attrs['#firstName']).toBe('');
expect(last_attrs['text']).toBe('Name');
});
it('detects equals without value', () => {
parser.parse('');
expect(last_attrs).toBeFalsy();
});
it('detects no equals with quoted value', () => {
parser.parse("");
expect(last_attrs).toBeFalsy();
});
it('detects unclosed tag after no value attribute', () => {
parser.parse(' {
parser.angularSyntax = false;
parser.parse("");
expect(last_attrs).toBeFalsy();
});
});
});