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(); }); }); });