/* * Copyright (c) 2004- michael lawley and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation * which accompanies this distribution, and is available by writing to * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Contributors: * michael lawley * * */ package tefkat.model.parser.tests; import antlr.RecognitionException; import antlr.TokenStreamException; import tefkat.model.parser.TefkatLexerTokenTypes; import tefkat.model.parser.TefkatParser; /** * @author lawley * */ public class InstanceRefTest extends ParserTestCase { /** * @param name */ public InstanceRefTest(String name) { super(name); } public void testInstanceRef() { TefkatParser parser = setupParser("<http://tefkat.sourceforge.net/tutorial1/relational.ecore#//Table>"); try { parser.objectlit(); } catch (RecognitionException e) { fail(e.toString()); } catch (TokenStreamException e) { fail(e.toString()); } assertTrue(true); } public void testMissingInstanceRef() { ignoreError = true; TefkatParser parser = setupParser("<http://tefkat.sourceforge.net/tutorial1/relational.ecore#//DoesNotExist>"); try { parser.objectlit(); } catch (RecognitionException e) { assertTrue(e.getMessage(), e.getMessage().startsWith("Could not resolve instance reference: ")); return; } catch (TokenStreamException e) { fail(e.toString()); } fail("Instance reference should not have been resolved."); } public void testBadSyntaxInstanceRefs() { String dev = "http:"; String path = "/tefkat.sourceforge.net/tutorial1/"; String file = "relational.ecore"; String xpath = "#//Table"; String[] inputs = { "<" + dev + " /" + path + file + xpath + ">", "<" + dev + "/" + path + " " + file + xpath + ">", "<" + dev + "/" + path + file + " " + xpath + ">", }; for (int i = 0; i < inputs.length; i++) { try { TefkatParser parser = setupParser(inputs[i]); parser.objectlit(); } catch (NullPointerException e) { StackTraceElement ste = e.getStackTrace()[0]; assertTrue("Expected NPE due to missing fragment", "getEObject".equals(ste.getMethodName())); continue; } catch (RuntimeException e) { assertTrue(e.getMessage(), e.getMessage().startsWith("Cannot create a resource for")); continue; } catch (TokenStreamException e) { assertTrue(e.getMessage(), e.getMessage().startsWith("unexpected char")); continue; } catch (RecognitionException e) { boolean result = e.getMessage().startsWith("expecting " + TefkatParser._tokenNames[TefkatLexerTokenTypes.LANGLE]) | e.getMessage().startsWith("expecting " + TefkatParser._tokenNames[TefkatLexerTokenTypes.URITOK]) | e.getMessage().startsWith("expecting " + TefkatParser._tokenNames[TefkatLexerTokenTypes.RANGLE]); assertTrue(e.getMessage(), result); continue; } fail(inputs[i] + " should be a syntax error"); } } }