// ignore_for_file: deprecated_member_use_from_same_package, unnecessary_lambdas import 'package:test/test.dart'; import 'package:xml/xml_events.dart'; import 'utils/examples.dart'; import 'utils/matchers.dart'; void assertComplete(Iterator iterator) { for (var i = 0; i < 2; i++) { expect(iterator.moveNext(), isFalse); } } void main() { group('events', () { test('empty', () { final iterator = parseEvents('').iterator; assertComplete(iterator); }); test('cdata', () { final iterator = parseEvents(']]>').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlCDATAEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.CDATA); expect(event.value, ''); final other = XmlCDATAEvent(event.value); expect(event, other); expect(event.hashCode, other.hashCode); }); test('comment', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlCommentEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.COMMENT); expect(event.value, 'for amusement only'); final other = XmlCommentEvent(event.value); expect(event, other); expect(event.hashCode, other.hashCode); }); test('declaration', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlDeclarationEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.DECLARATION); expect(event.attributes, isEmpty); final other = XmlDeclarationEvent(event.attributes); expect(event, other); expect(event.hashCode, other.hashCode); }); test('declaration (attributes)', () { final iterator = parseEvents( '', ).iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlDeclarationEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.DECLARATION); expect(event.attributes, hasLength(2)); expect(event.attributes[0].name, 'version'); expect(event.attributes[0].value, '1.0'); expect(event.attributes[0].attributeType, XmlAttributeType.DOUBLE_QUOTE); expect(event.attributes[1].name, 'author'); expect(event.attributes[1].value, 'lfr'); expect(event.attributes[1].attributeType, XmlAttributeType.SINGLE_QUOTE); final other = XmlDeclarationEvent(event.attributes); expect(event, other); expect(event.hashCode, other.hashCode); }); test('doctype', () { final iterator = parseEvents( ']\n' '>', ).iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlDoctypeEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.DOCUMENT_TYPE); expect(event.name, 'note'); expect(event.externalId, isNotNull); expect(event.externalId!.publicId, 'public.dtd'); expect(event.externalId!.systemId, 'system.dtd'); expect(event.internalSubset, ''); final other = XmlDoctypeEvent( event.name, event.externalId, event.internalSubset, ); expect(event, other); expect(event.hashCode, other.hashCode); }); test('end element', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlEndElementEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.ELEMENT); expect(event.name, 'bar'); final other = XmlEndElementEvent(event.name); expect(event, other); expect(event.hashCode, other.hashCode); }); test('processing', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlProcessingEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.PROCESSING); expect(event.target, 'pi'); expect(event.value, 'test'); final other = XmlProcessingEvent(event.target, event.value); expect(event, other); expect(event.hashCode, other.hashCode); }); test('start element', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlStartElementEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.ELEMENT); expect(event.name, 'foo'); expect(event.attributes, isEmpty); expect(event.isSelfClosing, isFalse); final other = XmlStartElementEvent( event.name, event.attributes, event.isSelfClosing, ); expect(event, other); expect(event.hashCode, other.hashCode); }); test('start element (attributes, self-closing)', () { final iterator = parseEvents('').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlStartElementEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.ELEMENT); expect(event.name, 'foo'); expect(event.attributes, hasLength(2)); expect(event.attributes[0].name, 'a'); expect(event.attributes[0].value, '1'); expect(event.attributes[0].attributeType, XmlAttributeType.DOUBLE_QUOTE); expect(event.attributes[1].name, 'b'); expect(event.attributes[1].value, '2'); expect(event.attributes[1].attributeType, XmlAttributeType.SINGLE_QUOTE); expect(event.isSelfClosing, isTrue); final other = XmlStartElementEvent( event.name, event.attributes .map( (attr) => XmlEventAttribute(attr.name, attr.value, attr.attributeType), ) .toList(), event.isSelfClosing, ); expect(event, other); expect(event.hashCode, other.hashCode); }); test('text', () { final iterator = parseEvents('Hello World!').iterator; expect(iterator.moveNext(), isTrue); final event = iterator.current as XmlTextEvent; assertComplete(iterator); expect(event.nodeType, XmlNodeType.TEXT); expect(event.value, 'Hello World!'); final other = XmlTextEvent(event.value); expect(event, other); expect(event.hashCode, other.hashCode); }); }); group('errors', () { group('parser error', () { test('missing tag closing', () { final iterator = parseEvents('" expected', buffer: '" expected', buffer: '" expected', buffer: '