001 /*
002 // $Id: //open/util/resgen/src/org/eigenbase/xom/XomTest.java#1 $
003 // Package org.eigenbase.xom is an XML Object Mapper.
004 // Copyright (C) 2008-2008 The Eigenbase Project
005 // Copyright (C) 2008-2008 Disruptive Tech
006 // Copyright (C) 2008-2008 LucidEra, Inc.
007 //
008 // This library is free software; you can redistribute it and/or modify it
009 // under the terms of the GNU Lesser General Public License as published by the
010 // Free Software Foundation; either version 2 of the License, or (at your
011 // option) any later version approved by The Eigenbase Project.
012 //
013 // This library is distributed in the hope that it will be useful,
014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016 // GNU Lesser General Public License for more details.
017 //
018 // You should have received a copy of the GNU Lesser General Public License
019 // along with this library; if not, write to the Free Software
020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021 */
022 package org.eigenbase.xom;
023
024 import junit.framework.TestCase;
025
026 /**
027 * Unit tests for XOM module.
028 *
029 * @author jhyde
030 * @version $Id: //open/util/resgen/src/org/eigenbase/xom/XomTest.java#1 $
031 * @since Jun 6, 2008
032 */
033 public class XomTest extends TestCase {
034 public void testFoo() throws XOMException {
035 final Parser xmlParser = XOMUtil.createDefaultParser();
036 xmlParser.setKeepPositions(true);
037 final String lineSep = System.getProperty("line.separator");
038 final String xml = "<Model" + lineSep
039 + " name=\"meta\"" + lineSep
040 + " dtdName=\"meta.dtd\"" + lineSep
041 + " className=\"MetaDef\"" + lineSep
042 + " packageName=\"org.eigenbase.xom\"" + lineSep
043 + " root=\"Model\"" + lineSep
044 + " version=\"1.0\"" + lineSep
045 + ">" + lineSep
046 + " <!-- a comment" + lineSep
047 + " spread across multiple lines -->" + lineSep
048 + "<Doc>" + lineSep
049 + " This model is the XOM Meta Model. It is the specification of the model used" + lineSep
050 + " to define new XML-based models. It is also an instance of itself." + lineSep
051 + "" + lineSep
052 + "</Doc>" + lineSep
053 + "" + lineSep
054 + "<Element type=\"Model\">" + lineSep
055 + " <Doc>" + lineSep
056 + " Contains a \"single\" apostrope '." + lineSep
057 + " </Doc>" + lineSep
058 + "" + lineSep
059 + " <Attribute name=\"name\" required=\"true\"/>" + lineSep
060 + " <Attribute name=\"dtdName\"/>" + lineSep
061 + "</Element>" + lineSep
062 + "</Model>";
063 DOMWrapper def = xmlParser.parse(xml);
064 assertNotNull(def);
065 final MetaDef.Model model = new MetaDef.Model(def);
066 assertNotNull(model);
067
068 Location location = model.getLocation();
069 assertEquals("Model", model.getName());
070 assertEquals(1, location.getStartLine());
071 assertEquals(1, location.getStartColumn());
072 assertEquals(25, location.getEndLine());
073 assertEquals(9, location.getEndColumn());
074
075 // Model only has one child, Element. Doc is Cdata, so becomes an
076 // attribute.
077 NodeDef[] children = model.getChildren();
078 assertEquals(1, children.length);
079 final NodeDef element = children[0];
080 assertEquals("Element", element.getName());
081 location = element.getLocation();
082 assertEquals(17, location.getStartLine());
083 assertEquals(1, location.getStartColumn());
084 assertEquals(24, location.getEndLine());
085 assertEquals(11, location.getEndColumn());
086
087 children = element.getChildren();
088 assertEquals(4, children.length);
089 NodeDef attribute = children[1];
090 assertEquals("Attribute", attribute.getName());
091 location = attribute.getLocation();
092 assertEquals(23, location.getStartLine());
093 assertEquals(5, location.getStartColumn());
094 assertEquals(23, location.getEndLine());
095 assertEquals(32, location.getEndColumn());
096 }
097 }
098
099 // End XomTest.java