import 'package:test/test.dart'; import 'package:xml/xml.dart'; import 'utils/matchers.dart'; void main() { group('XmlParentException', () { test('checkNoParent', () { final document = XmlDocument([XmlComment('Comment')]); XmlParentException.checkNoParent(document); expect( () => XmlParentException.checkNoParent(document.firstChild!), throwsA( isXmlParentException( message: 'Node already has a parent, copy or remove it first', node: document.firstChild, parent: document, ), ), ); }); test('checkMatchingParent', () { final document = XmlDocument([XmlComment('Comment')]); XmlParentException.checkMatchingParent(document.firstChild!, document); expect( () => XmlParentException.checkMatchingParent( document, document.firstChild!, ), throwsA( isXmlParentException( message: 'Node already has a non-matching parent', node: document, parent: document.firstChild, ), ), ); }); }); group('XmlParserException', () { test('with properties', () { final exception = XmlParserException( 'Expected foo', buffer: 'hello\nworld', position: 6, ); expect( exception, isXmlParserException( message: 'Expected foo', buffer: 'hello\nworld', position: 6, line: 2, column: 1, ), ); }); test('without anything', () { final exception = XmlParserException('Expected foo'); expect( exception, isXmlParserException( message: 'Expected foo', buffer: isNull, position: isNull, line: 0, column: 0, ), ); }); }); group('XmlNodeTypeException', () { test('checkValidType', () { final commentNode = XmlComment('Comment'); final commentNodeTypes = [XmlNodeType.COMMENT]; final otherNodeTypes = [XmlNodeType.ELEMENT, XmlNodeType.TEXT]; XmlNodeTypeException.checkValidType(commentNode, commentNodeTypes); expect( () => XmlNodeTypeException.checkValidType(commentNode, otherNodeTypes), throwsA( isXmlNodeTypeException( message: 'Got XmlNodeType.COMMENT, but expected one of ' 'XmlNodeType.ELEMENT, XmlNodeType.TEXT', node: commentNode, types: otherNodeTypes, ), ), ); }); }); group('XmlTagException', () { test('mismatchClosingTag', () { final exception = XmlTagException.mismatchClosingTag( 'foo', 'bar', buffer: '\n', position: 6, ); expect( exception, isXmlTagException( message: 'Expected , but found ', expectedName: 'foo', actualName: 'bar', buffer: '\n', position: 6, line: 2, column: 1, ), ); }); test('unexpectedClosingTag', () { final exception = XmlTagException.unexpectedClosingTag( 'bar', buffer: '', position: 0, ); expect( exception, isXmlTagException( message: 'Unexpected ', expectedName: isNull, actualName: 'bar', buffer: '', position: 0, line: 1, column: 1, ), ); }); test('missingClosingTag', () { final exception = XmlTagException.missingClosingTag( 'foo', buffer: '', position: 5, ); expect( exception, isXmlTagException( message: 'Missing ', expectedName: 'foo', actualName: isNull, buffer: '', position: 5, line: 1, column: 6, ), ); }); test('checkClosingTag', () { XmlTagException.checkClosingTag('foo', 'foo'); expect( () => XmlTagException.checkClosingTag( 'foo', 'bar', buffer: '\n', position: 6, ), throwsA( isXmlTagException( message: 'Expected , but found ', expectedName: 'foo', actualName: 'bar', buffer: '\n', position: 6, line: 2, column: 1, ), ), ); }); }); }