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*/
022package org.eigenbase.xom;
023
024import 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 */
033public 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