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