/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.validation.rules; import java.util.ArrayList; import java.util.List; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.teiid.designer.metamodels.core.CoreFactory; import org.teiid.designer.metamodels.core.CorePackage; import org.teiid.designer.metamodels.core.ModelAnnotation; import org.teiid.designer.metamodels.core.ModelImport; import org.teiid.designer.metamodels.core.impl.CoreFactoryImpl; /** * TestStringNameValidator */ public class TestStringNameValidator extends TestCase { public static final int INVALID_MINIUM = -1; public static final int INVALID_MAXIMUM = -1; public static final char REPLACEMENT_CHAR = 'Z'; public static final char[] ILLEGAL_CHARS = new char[]{'a','b','c','d'}; public static final char[] VALID_CHARS = new char[]{'f','g','h','i','1','2'}; public static final String MODEL_IMPORT_NAME_PREFIX = "ModelImportX"; //$NON-NLS-1$ public static final String NAME_SHORTER_THAN_DEFAULT = buildString(0); public static final String NAME_LONGER_THAN_DEFAULT = buildString(StringNameValidator.DEFAULT_MAXIMUM_LENGTH + 3); public static final String NAME_WITH_GOOD_DEFAULT_LENGTH = buildString(10); public static final String NAME_WITH_INVALID_FIRST_CHARACTER = "4This string has invalid$%^ characters"; //$NON-NLS-1$ public static final String NAME_WITH_INVALID_FIRST_CHARACTER_CORRECTED = "This_string_has_invalid____characters"; //$NON-NLS-1$ public static final String NAME_WITH_INVALID_CHARACTERS = "This string has invalid$%^ characters"; //$NON-NLS-1$ public static final String NAME_WITH_INVALID_CHARACTERS_CORRECTED = "This_string_has_invalid____characters"; //$NON-NLS-1$ public static final String NAME_WITH_VALID_CHARACTERS = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789_"; //$NON-NLS-1$ public static String buildString( final int length ) { final StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; ++i) { sb.append('c'); } return sb.toString(); } private StringNameValidator defaultValidator; private StringNameValidator invalidCharValidator; private List siblings; private ModelImport eObject; private final int nameFeatureId = CorePackage.MODEL_IMPORT__NAME; private final CoreFactory factory = new CoreFactoryImpl(); /** * Constructor for TestStringNameValidator. * @param name */ public TestStringNameValidator(String name) { super(name); } /* * @see TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); this.defaultValidator = new StringNameValidator(); this.invalidCharValidator = new StringNameValidator(ILLEGAL_CHARS); // Create the model objects ... this.siblings = new ArrayList(); final ModelAnnotation annotation = factory.createModelAnnotation(); for (int i = 0; i < 10; ++i) { final ModelImport modelImport = factory.createModelImport(); modelImport.setModel(annotation); if ( i==0 ) { eObject = modelImport; modelImport.setName(MODEL_IMPORT_NAME_PREFIX); } else { this.siblings.add(modelImport); modelImport.setName(MODEL_IMPORT_NAME_PREFIX + i); } } } /* * @see TestCase#tearDown() */ @Override protected void tearDown() throws Exception { super.tearDown(); } /** * Test suite, with one-time setup. */ public static Test suite() { TestSuite suite = new TestSuite("TestStringNameValidator"); //$NON-NLS-1$ suite.addTestSuite(TestStringNameValidator.class); // One-time setup and teardown return new TestSetup(suite) { @Override public void setUp() { } @Override public void tearDown() { } }; } // ========================================================================= // H E L P E R M E T H O D S // ========================================================================= protected void helpCheckValidator(final StringNameValidator v, int min, int max, boolean caseSensitive, char replacementChar) { if ( min < 0 ) { min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; } if ( max < 0 ) { max = StringNameValidator.MAXIMUM_LENGTH; } assertEquals(min, v.getMinimumLength()); assertEquals(max, v.getMaximumLength()); assertEquals(caseSensitive, v.isCaseSensitive()); assertEquals(replacementChar,v.getReplacementCharacter()); } // ========================================================================= // T E S T C A S E S // ========================================================================= // public void testDataPathSupplied() { // UnitTestUtil.assertTestDataPathSet(); // } /* * Test for void StringNameValidator(int, int, boolean, char, char[]) */ public void testStringNameValidatorintintbooleancharcharArray1() { final int min = 4; final int max = 10; final boolean caseSensitive = true; final char replacementChar = REPLACEMENT_CHAR; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean, char, char[]) */ public void testStringNameValidatorintintbooleancharcharArray2() { final int min = -1; final int max = 10; final boolean caseSensitive = true; final char replacementChar = REPLACEMENT_CHAR; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean, char, char[]) */ public void testStringNameValidatorintintbooleancharcharArray3() { final int min = 2; final int max = -10; final boolean caseSensitive = true; final char replacementChar = REPLACEMENT_CHAR; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean, char, char[]) */ public void testStringNameValidatorintintbooleancharcharArray4() { final int min = 2; final int max = 10; final boolean caseSensitive = false; final char replacementChar = REPLACEMENT_CHAR; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean, char, char[]) */ public void testStringNameValidatorintintbooleancharcharArray5() { final int min = 2; final int max = 10; final boolean caseSensitive = false; final char replacementChar = 'C'; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(boolean) */ public void testStringNameValidatorboolean() { final int min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; final int max = StringNameValidator.DEFAULT_MAXIMUM_LENGTH; final boolean caseSensitive = !StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(char[]) */ public void testStringNameValidatorcharArray() { final int min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; final int max = StringNameValidator.DEFAULT_MAXIMUM_LENGTH; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, char[]) */ public void testStringNameValidatorintcharArray() { final int min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; final int max = 50; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(max); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, char[]) */ public void testStringNameValidatorintintcharArray() { final int min = 4; final int max = 50; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(min,max); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean, char) */ public void testStringNameValidatorintintbooleanchar() { final int min = 4; final int max = 50; final boolean caseSensitive = !StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = 'C'; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive,replacementChar); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int, boolean) */ public void testStringNameValidatorintintboolean() { final int min = 4; final int max = 50; final boolean caseSensitive = !StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(min,max,caseSensitive); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int, int) */ public void testStringNameValidatorintint() { final int min = 4; final int max = 50; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(min,max); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator(int) */ public void testStringNameValidatorint() { final int min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; final int max = 50; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(max); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } /* * Test for void StringNameValidator() */ public void testStringNameValidator() { final int min = StringNameValidator.DEFAULT_MINIMUM_LENGTH; final int max = StringNameValidator.DEFAULT_MAXIMUM_LENGTH; final boolean caseSensitive = StringNameValidator.DEFAULT_CASE_SENSITIVE_NAME_COMPARISON; final char replacementChar = StringNameValidator.DEFAULT_REPLACEMENT_CHARACTER; final StringNameValidator v = new StringNameValidator(); helpCheckValidator(v,min,max,caseSensitive,replacementChar); } public void testCheckNameLengthWithTooShort() { final StringNameValidator val = this.defaultValidator; final String name = NAME_SHORTER_THAN_DEFAULT; final String reason = val.checkNameLength(name); assertNotNull(reason); assertTrue(reason.startsWith("The name must be at least " + val.getMinimumLength())); //$NON-NLS-1$ } public void testCheckNameLengthWithTooLong() { final StringNameValidator val = this.defaultValidator; final String name = NAME_LONGER_THAN_DEFAULT; final String reason = val.checkNameLength(name); assertNotNull(reason); assertTrue(reason.startsWith("The name length (" + name.length() + ") is longer than")); //$NON-NLS-1$ //$NON-NLS-2$ } public void testCheckNameLengthWithValidLength() { final StringNameValidator val = this.defaultValidator; final String name = NAME_WITH_GOOD_DEFAULT_LENGTH; final String reason = val.checkNameLength(name); assertNull(reason); } public void testCheckNameCharactersInvalidCharacters() { final StringNameValidator val = this.defaultValidator; final String name = NAME_LONGER_THAN_DEFAULT; final String reason = val.checkNameLength(name); assertNotNull(reason); assertTrue(reason.startsWith("The name length (" + name.length() + ") is longer than")); //$NON-NLS-1$ //$NON-NLS-2$ } public void testCheckNameCharactersWithInvalidFirstCharacter() { final StringNameValidator val = this.defaultValidator; final String name = NAME_WITH_INVALID_FIRST_CHARACTER; final String reason = val.checkNameCharacters(name); assertNotNull(reason); assertTrue(reason.startsWith("The first character of the name ")); //$NON-NLS-1$ } public void testCheckNameCharactersWithInvalidCharacter() { final StringNameValidator val = this.defaultValidator; final String name = NAME_WITH_INVALID_CHARACTERS; final String reason = val.checkNameCharacters(name); assertNotNull(reason); assertTrue(reason.startsWith("The character ")); //$NON-NLS-1$ } public void testCheckNameCharactersWithValidCharacters() { final StringNameValidator val = this.defaultValidator; final String name = NAME_WITH_VALID_CHARACTERS; final String reason = val.checkNameCharacters(name); assertNull(reason); } public void testIsValidName1() { assertEquals(true, this.defaultValidator.isValidName(NAME_WITH_VALID_CHARACTERS)); assertEquals(false, this.invalidCharValidator.isValidName(NAME_WITH_VALID_CHARACTERS)); } public void testIsValidName2() { assertEquals(false, this.defaultValidator.isValidName(NAME_WITH_INVALID_CHARACTERS)); assertEquals(false, this.invalidCharValidator.isValidName(NAME_WITH_INVALID_CHARACTERS)); } public void testIsValidName3() { assertEquals(false, this.defaultValidator.isValidName(NAME_WITH_INVALID_FIRST_CHARACTER)); assertEquals(false, this.invalidCharValidator.isValidName(NAME_WITH_INVALID_FIRST_CHARACTER)); } public void testCheckValidName() { } public void testCheckUniquenessForUniquelyNamedObject() { final StringNameValidator val = this.defaultValidator; final String name = MODEL_IMPORT_NAME_PREFIX + "XX"; //$NON-NLS-1$ final String reason = val.checkUniqueness(name,eObject,siblings,nameFeatureId); assertNull(reason); } public void testCheckUniquenessWithFailure() { final StringNameValidator val = this.defaultValidator; final String name = MODEL_IMPORT_NAME_PREFIX + 3; final String reason = val.checkUniqueness(name,eObject,siblings,nameFeatureId); assertNotNull(reason); } /* * Test for String createValidName(String) */ public void testCreateValidNameStringWithValidName() { final String newName = this.defaultValidator.createValidName(NAME_WITH_VALID_CHARACTERS); assertEquals(NAME_WITH_VALID_CHARACTERS, newName); } public void testCreateValidNameStringWithInvalidName() { final String newName = this.defaultValidator.createValidName(NAME_WITH_INVALID_CHARACTERS); assertNotNull(newName); assertEquals(NAME_WITH_INVALID_CHARACTERS_CORRECTED, newName); } public void testCreateValidNameStringWithInvalidFirstCharName() { final String newName = this.defaultValidator.createValidName(NAME_WITH_INVALID_FIRST_CHARACTER); assertNotNull(newName); assertEquals(NAME_WITH_INVALID_FIRST_CHARACTER_CORRECTED, newName); } /* * Test method that checks against invalid char string only. This method supplies some invalid Strings. * Expected behavior is that the message string is not null - there is an error */ public void testCheckStringInvalidCharOnly() { StringNameValidator invalidCharOnlyValidator = new StringNameValidator(); // Test string String msg = invalidCharOnlyValidator.checkValidName("Test&1"); //$NON-NLS-1$ assertNotNull(msg); // Test string msg = invalidCharOnlyValidator.checkValidName("Test = Me"); //$NON-NLS-1$ assertNotNull(msg); // Test string msg = invalidCharOnlyValidator.checkValidName("& Another #"); //$NON-NLS-1$ assertNotNull(msg); // Test string msg = invalidCharOnlyValidator.checkValidName("1 + 2 = 3"); //$NON-NLS-1$ assertNotNull(msg); } /* * Test for String createValidName(String, boolean) */ public void testCreateValidNameStringboolean() { } public void testCreateValidUniqueName() { } public void testCreateUniqueName6() { helpTestCreateUniqueName(this.defaultValidator,6,MODEL_IMPORT_NAME_PREFIX+6); } public void testCreateUniqueName21() { helpTestCreateUniqueName(this.defaultValidator,21,MODEL_IMPORT_NAME_PREFIX+21); } public void testCreateUniqueName21NearLimit() { final int length = MODEL_IMPORT_NAME_PREFIX.length(); final StringNameValidator val = new StringNameValidator( length + 2 ); helpTestCreateUniqueName(val,21,MODEL_IMPORT_NAME_PREFIX+21); } // public void testCreateUniqueName21WithTooMany() { // final int length = MODEL_IMPORT_NAME_PREFIX.length(); // final StringNameValidator val = new StringNameValidator( length + 1 ); // helpTestCreateUniqueName(val,21,MODEL_IMPORT_NAME_PREFIX.substring(0,length-1)+10); // } public void testCreateUniqueName21WithWayTooMany() { final int length = MODEL_IMPORT_NAME_PREFIX.length(); final StringNameValidator val = new StringNameValidator( length + 2 ); helpTestCreateUniqueName(val,201,MODEL_IMPORT_NAME_PREFIX.substring(0,length-1)+100); } public void testCreateUniqueName21WithWayWayTooMany() { final int length = MODEL_IMPORT_NAME_PREFIX.length(); final StringNameValidator val = new StringNameValidator( length + 1 ); helpTestCreateUniqueName(val,201,MODEL_IMPORT_NAME_PREFIX.substring(0,length-1)+10); } public void testCaseSensitiveValidator() { StringNameValidator val = new StringNameValidator(true); String existingName = "objectName"; //$NON-NLS-1$ val.addExistingName(existingName); String name = val.createUniqueName(existingName.toUpperCase()); assertNull(name); } public void testCaseInsensitiveValidator() { StringNameValidator val = new StringNameValidator(false); String existingName = "objectName"; //$NON-NLS-1$ val.addExistingName(existingName); String name = val.createUniqueName(existingName.toUpperCase()); assertNotNull(name); } protected void helpTestCreateUniqueName( final StringNameValidator val, final int largest, final String expectedName ) { final String name = MODEL_IMPORT_NAME_PREFIX; val.addExistingName(MODEL_IMPORT_NAME_PREFIX); for ( int j=0;j!=3;j++) { // add 3 sets of duplicates for ( int i=1;i!=largest;++i ) { val.addExistingName(MODEL_IMPORT_NAME_PREFIX+i); } } final String newName = val.createUniqueName(name); assertNotNull(newName); assertEquals(expectedName, newName); } public void testDoubleQuotedName() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("\"XXX.YYY\""); //$NON-NLS-1$ assertNull(result); } public void testInvalidDoubleQuotedName() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("\"XXX.YYY\"\""); //$NON-NLS-1$ assertNotNull(result); } public void testInvalidNameWithDelimiter() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("XXX.YYY"); //$NON-NLS-1$ assertNotNull(result); } public void testValidNestedDoubleQuotedName_1() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("\"X.Y.Z\""); //$NON-NLS-1$ assertNull(result); } public void testInvalidValidNameWithDQuote() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("XXX\"XXX"); //$NON-NLS-1$ assertNotNull(result); } public void testInvalidValidNameWithSQuote() { StringNameValidator val = new StringNameValidator(false); String result = val.checkValidName("XXX'XXX"); //$NON-NLS-1$ assertNotNull(result); } }