/* * Copyright (c) 2006 Borland Software Corporation * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Michael Golubev (Borland) - initial API and implementation */ package org.eclipse.uml2.diagram.clazz.tests.parser; import java.util.Arrays; import org.eclipse.uml2.diagram.parser.ExternalParserException; import org.eclipse.uml2.uml.LiteralUnlimitedNatural; import org.eclipse.uml2.uml.Property; import org.eclipse.uml2.uml.VisibilityKind; public class PropertyParserTest extends PropertyParserTestBase { public void testName() throws ExternalParserException { String simple = "abcDEF"; assertEquals(simple, parse(simple).getName()); String withSpaces = "abc def klm"; assertEquals(withSpaces, parse(withSpaces).getName()); String withDigits = "abc12345 def67890"; assertEquals(withDigits, parse(withDigits).getName()); assertParseError("123 starts with digit"); String withUnderscore = "_____"; assertEquals(withUnderscore, parse(withUnderscore).getName()); String russian = "\u043f\u0440\u0435\u0432\u0435\u0434"; assertEquals(russian, parse(russian).getName()); assertParseError("a, b"); assertParseError("a+b"); assertParseError("a-b"); assertParseError("a.b.c"); assertParseError(""); assertParseError(" "); } public void testNormalizeSpaces() throws ExternalParserException { assertEquals("a b", parse("a b").getName()); assertEquals("a b", parse(" a b").getName()); assertEquals("a b", parse("a b ").getName()); assertEquals("a b", parse("a b").getName()); assertEquals("a b", parse("a\tb").getName()); assertEquals("a b", parse("a \t \t \t b").getName()); } public void testVisibility() throws ExternalParserException { assertEquals(VisibilityKind.PACKAGE_LITERAL, parse("~abc").getVisibility()); assertEquals(VisibilityKind.PUBLIC_LITERAL, parse("+abc").getVisibility()); assertEquals(VisibilityKind.PRIVATE_LITERAL, parse("-abc").getVisibility()); assertEquals(VisibilityKind.PROTECTED_LITERAL, parse("#abc").getVisibility()); assertEquals(VisibilityKind.PACKAGE_LITERAL, parse("~ def").getVisibility()); assertEquals(VisibilityKind.PUBLIC_LITERAL, parse("+\tdef").getVisibility()); assertEquals(VisibilityKind.PRIVATE_LITERAL, parse(" -def").getVisibility()); assertEquals(VisibilityKind.PROTECTED_LITERAL, parse(" # def").getVisibility()); assertEquals(newProperty().getVisibility(), parse("abc").getVisibility()); assertParseError("+#abc"); assertParseError("++abc"); assertParseError("+#abc"); assertParseError("+"); assertParseError("-"); assertParseError("#"); assertParseError("~"); } public void testMultiplicity() throws ExternalParserException { assertEquals(1, parse("a[1..2]").getLower()); assertEquals(2, parse("a[1..2]").getUpper()); assertEquals(3, parse("a[3..3]").getLower()); assertEquals(3, parse("a[3..3]").getUpper()); assertEquals(9999, parse("a[9999..0]").getLower()); assertEquals(0, parse("a[9999..0]").getUpper()); assertEquals(57, parse("a[57]").getLower()); assertEquals(57, parse("a[57]").getUpper()); assertEquals(0, parse("a[*]").getLower()); assertEquals(LiteralUnlimitedNatural.UNLIMITED, parse("a[*]").getUpper()); assertEquals(LiteralUnlimitedNatural.UNLIMITED, parse("a[1..*]").getUpper()); assertEquals(42, parse("a [ 42 \t .. 84 ]").getLower()); assertEquals(84, parse("a [ 42 \t .. 84 ]").getUpper()); assertEquals(1, parse("a[0001]").getLower()); assertParseError("b[]"); assertParseError("b[c]"); assertParseError("b[c..d]"); assertParseError("b[1][2][3]"); assertParseError("a[999999999999999999]"); } public void testIsDerived() throws ExternalParserException { assertFalse(parse("abc").isDerived()); assertTrue(parse("/abc").isDerived()); assertTrue(parse("+/abc").isDerived()); assertTrue(parse("~ / \t abc").isDerived()); } public void testType() throws ExternalParserException { parse("abc"); getTypeLookup().assertNoSearches(); parse("abc : CDE"); getTypeLookup().assertSearches("CDE"); parse("abc cde : DEF KLM"); getTypeLookup().assertSearches("DEF KLM"); parse("a1 b2 : C3 D4 E5"); getTypeLookup().assertSearches("C3 D4 E5"); parse("abc : A B C [6]"); getTypeLookup().assertSearches("A B C"); assertParseError("abc : [*]"); assertParseError("abc : ABC : DEF "); assertParseError("abc :: ABC"); } public void testDefault() throws ExternalParserException { assertEquals("5", parse("abc = 5").getDefault()); assertEquals("5", parse("abc : int = 5").getDefault()); assertEquals("5", parse("abc : boolean = 5").getDefault()); assertEquals("ABC", parse("abc : int = ABC").getDefault()); assertEquals(newProperty().getDefault(), parse("abc : int").getDefault()); assertParseError("abc = "); assertParseError("abc == 5"); } public void testModifiers() throws ExternalParserException { assertTrue(parse("abc {readOnly}").isReadOnly()); assertTrue(parse("abc {unique}").isUnique()); assertTrue(parse("abc {ordered}").isOrdered()); assertTrue(parse("abc {unique, ordered}").isOrdered()); assertTrue(parse("abc {unique, ordered}").isUnique()); assertTrue(parse("abc {ordered, unique}").isUnique()); assertFalse(parse("abc {ordered, nonunique, union}").isUnique()); assertFalse(parse("abc {unordered, unique}").isOrdered()); assertTrue(parse("abc {union}").isDerivedUnion()); assertFalse(parse("abc {unique, nonunique}").isUnique()); assertTrue(parse("abc {nonunique, unique}").isUnique()); Property aLot = parse("abc {ordered, nonunique, redefines def, subsets xyz, union }"); assertFalse(aLot.isUnique()); assertTrue(aLot.isOrdered()); assertTrue(aLot.isDerivedUnion()); assertParseError("abc {}"); assertParseError("abc {set}"); assertParseError("abc {unique ordered}"); } public void testRedefines() throws ExternalParserException { parse("abc"); getRedefinesLookup().assertNoSearches(); parse("abc { unique }"); getRedefinesLookup().assertNoSearches(); parse("abc { redefines a }"); getRedefinesLookup().assertSearches("a"); parse("abc { redefines a b c }"); getRedefinesLookup().assertSearches("a b c"); parse("abc {redefines a, redefines b, redefines c}"); getRedefinesLookup().assertSearches(Arrays.asList(new String[] {"a", "b", "c"})); parse("abc {redefines a, ordered, redefines b, unique, redefines c}"); getRedefinesLookup().assertSearches(Arrays.asList(new String[] {"a", "b", "c"})); } public void testSubsets() throws ExternalParserException { parse("abc"); getSubsetsLookup().assertNoSearches(); parse("abc { unique }"); getSubsetsLookup().assertNoSearches(); parse("abc { subsets c }"); getSubsetsLookup().assertSearches("c"); parse("abc { subsets d e f}"); getSubsetsLookup().assertSearches("d e f"); parse("abc {subsets f, subsets e, subsets d}"); getSubsetsLookup().assertSearches(Arrays.asList(new String[] {"f", "e", "d"})); parse("abc {subsets a, unique, ordered, subsets b, subsets c}"); getSubsetsLookup().assertSearches(Arrays.asList(new String[] {"a", "b", "c"})); } }