--- /dev/null
+/* markupreader.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void positive_1 () {
+ var reporter = new ErrorReporter ();
+
+ string content =
+"""<?xml version="1.0" ?>
+<root-element>
+ <subelement level="1" nested="true">my text</subelement>
+ <simpletag1 level="2" nested="false" />
+ <simpletag2 level="3"/>
+ <simpletag3/>
+</root-element>""";
+
+
+ var reader = new MarkupReader.from_string ("testfile", content, reporter);
+ assert (reader.filename == "testfile");
+
+ MarkupSourceLocation begin;
+ MarkupSourceLocation end;
+ MarkupTokenType token;
+
+
+ token = reader.read_token (out begin, out end);
+ token = reader.read_token (out begin, out end);
+
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "root-element");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 2);
+ assert (end.line == 2);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "subelement");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 2);
+ assert (reader.get_attribute ("nested") == "true");
+ assert (reader.get_attribute ("level") == "1");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.TEXT);
+ assert (reader.name == null);
+ assert (reader.content == "my text");
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "subelement");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag1");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 2);
+ assert (reader.get_attribute ("nested") == "false");
+ assert (reader.get_attribute ("level") == "2");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 4);
+ assert (end.line == 4);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag1");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 4);
+ assert (end.line == 4);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag2");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 1);
+ assert (reader.get_attribute ("level") == "3");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 5);
+ assert (end.line == 5);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag2");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 5);
+ assert (end.line == 5);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag3");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 6);
+ assert (end.line == 6);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag3");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 6);
+ assert (end.line == 6);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "root-element");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 7);
+ assert (end.line == 7);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.EOF);
+ assert (reader.name == null);
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 7);
+ assert (end.line == 7);
+}
+
+
+public static void positive_2 () {
+ var reporter = new ErrorReporter ();
+
+ string content = "AA BB & "' < > %";
+
+ var reader = new MarkupReader.from_string ("testfile", content, reporter);
+ assert (reader.filename == "testfile");
+
+ MarkupSourceLocation begin;
+ MarkupSourceLocation end;
+ MarkupTokenType token;
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.TEXT);
+ assert (reader.content == "AA BB & \"' < > >");
+ assert (reader.name == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 1);
+ assert (end.line == 1);
+
+}
+
+
+public static void main () {
+ positive_1 ();
+ positive_2 ();
+}
+