/******************************************************************************* * Copyright (c) 2013 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.foundation.core.test.validate.impl; import junit.framework.TestCase; import org.eclipse.core.runtime.IStatus; import org.jboss.tools.foundation.core.validate.IFileNameValidator; import org.jboss.tools.foundation.core.validate.impl.FileNameValidator; import org.jboss.tools.foundation.core.validate.impl.FileNameValidatorConstants; import org.junit.Test; /** * Test class for the {@link FileNameValidator} */ public class TestFileNameValidator extends TestCase { private static final String WINDOWS = "WINDOWS"; //$NON-NLS-1$ private static final String MAC = "MAC"; //$NON-NLS-1$ /** * @return true if this system is running a Window OS, otherwise false */ private boolean isWindows() { return getOSValue().contains(WINDOWS); } /** * @return true if this system is running a Mac OS, otherwise false */ private boolean isMac() { return getOSValue().contains(MAC); } /** * @return value representation of host OS */ private String getOSValue() { return System.getProperty("os.name").toUpperCase(); //$NON-NLS-1$ } /** * Test validation of valid filenames */ @Test public void testValidateValidFileNames() { String[] validFileNames = { "test345.xml", "test-345.txt", "test_345.doc", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ "test.xmi", "test.txt", "test.xml", "test.csv", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ }; IFileNameValidator validator = new FileNameValidator(); for (String fileName : validFileNames) { IStatus status = validator.validate(fileName); assertEquals(IStatus.OK, status.getSeverity()); } } /** * Test the validation of suffixed and non-suffixed filenames */ @Test public void testValidateSuffixes() { String[] fileNamesNoSuffix = { "test", "test345", "test-345", "test_345", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ }; IFileNameValidator validator = new FileNameValidator(); for (String fileName : fileNamesNoSuffix) { IStatus status = validator.validate(fileName); if (isWindows()) { // Should fail since suffixes are preferred on windows assertEquals(IStatus.ERROR, status.getSeverity()); } else { // Should warn since the filename is not portable assertEquals(IStatus.WARNING, status.getSeverity()); } } for (String fileName : fileNamesNoSuffix) { // Should fail since suffixes are preferred on windows IStatus status = validator.validate(fileName, IFileNameValidator.ERROR_ON_WINDOWS); assertEquals(IStatus.ERROR, status.getSeverity()); // Should fail since suffixes are preferred on windows status = validator.validate(fileName, IFileNameValidator.ERROR_ON_ALL); assertEquals(IStatus.ERROR, status.getSeverity()); // Should warn since we are not validating against windows status = validator.validate(fileName, IFileNameValidator.ERROR_ON_MAC); assertEquals(IStatus.WARNING, status.getSeverity()); } } /** * Tests the validation of filenames using the built-in universal reserved characters */ @Test public void testValidateReservedCharacters() { IFileNameValidator validator = new FileNameValidator(); for (char c : FileNameValidatorConstants.RESERVED_CHARACTERS) { StringBuilder builder = new StringBuilder("te"); //$NON-NLS-1$ builder.append(c); builder.append("st.xmi"); //$NON-NLS-1$ // Should fail since reserved characters are forbidden on all platforms IStatus status = validator.validate(builder.toString()); assertEquals(IStatus.ERROR, status.getSeverity()); } } /** * Tests the validation of filenames using the built-in mac reserved characters */ @Test public void testValidateMacReservedCharacters() { IFileNameValidator validator = new FileNameValidator(); for (char c : FileNameValidatorConstants.MAC_RESERVED_CHARACTERS) { StringBuilder builder = new StringBuilder("te"); //$NON-NLS-1$ builder.append(c); builder.append("st.xmi"); //$NON-NLS-1$ IStatus status = validator.validate(builder.toString()); if (isMac()) { // Should fail since reserved characters are forbidden on mac assertEquals(IStatus.ERROR, status.getSeverity()); } else { // Should warn since the filename is not portable assertEquals(status.getMessage(), IStatus.WARNING, status.getSeverity()); } // Should fail since reserved characters are forbidden on mac status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_MAC); assertEquals(IStatus.ERROR, status.getSeverity()); // Should fail since reserved characters are forbidden on mac status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_ALL); assertEquals(IStatus.ERROR, status.getSeverity()); boolean alsoForbiddenWin = false; for( int i = 0; i < FileNameValidatorConstants.WIN_RESERVED_CHARACTERS.length; i++ ) { if( FileNameValidatorConstants.WIN_RESERVED_CHARACTERS[i] == c ) alsoForbiddenWin = true; } if( alsoForbiddenWin ) assertEquals(IStatus.ERROR, status.getSeverity()); else assertEquals(IStatus.WARNING, status.getSeverity()); } } /** * Tests the validation of filenames using the built-in windows reserved characters */ @Test public void testValidateWindowsReservedCharacters() { IFileNameValidator validator = new FileNameValidator(); for (char c : FileNameValidatorConstants.WIN_RESERVED_CHARACTERS) { StringBuilder builder = new StringBuilder("te"); //$NON-NLS-1$ builder.append(c); builder.append("st.xmi"); //$NON-NLS-1$ IStatus status = validator.validate(builder.toString()); if (isWindows()) { // Should fail since reserved characters are forbidden on windows assertEquals(IStatus.ERROR, status.getSeverity()); } else { // Should warn since the filename is not portable assertEquals(IStatus.WARNING, status.getSeverity()); } // Should warn since the filename is not portable status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_MAC); boolean alsoForbiddenMac = false; for( int i = 0; i < FileNameValidatorConstants.MAC_RESERVED_CHARACTERS.length; i++ ) { if( FileNameValidatorConstants.MAC_RESERVED_CHARACTERS[i] == c ) alsoForbiddenMac = true; } if( alsoForbiddenMac ) assertEquals(IStatus.ERROR, status.getSeverity()); else assertEquals(IStatus.WARNING, status.getSeverity()); // Should fail since reserved characters are forbidden on windows status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_ALL); assertEquals(IStatus.ERROR, status.getSeverity()); // Should fail since reserved characters are forbidden on windows status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_WINDOWS); assertEquals(IStatus.ERROR, status.getSeverity()); } } /** * Tests the loading and validation of added reserved characters */ @Test public void testValidateLoadedReservedCharacters() { IFileNameValidator validator = new FileNameValidator(); char[] reservedChars = new char[] { ')', '(', '[', ']', '@', '~', '#' }; for (char reservedChar : reservedChars) { validator.addReservedCharacter(reservedChar); } for (char c : reservedChars) { StringBuilder builder = new StringBuilder("te"); //$NON-NLS-1$ builder.append(c); builder.append("st.xmi"); //$NON-NLS-1$ IStatus status = validator.validate(builder.toString()); // Should always fail since the user added these reserved characters assertEquals(IStatus.ERROR, status.getSeverity()); } } /** * Tests the validation of filenames using the built-in universal reserved words */ @Test public void testValidateReservedWords() { IFileNameValidator validator = new FileNameValidator(); for (String word : FileNameValidatorConstants.RESERVED_WORDS) { StringBuilder builder = new StringBuilder(word); builder.append(".xmi"); //$NON-NLS-1$ IStatus status = validator.validate(builder.toString()); assertEquals(IStatus.ERROR, status.getSeverity()); } } /** * Tests the validation of filenames using the built-in reserved words */ @Test public void testValidateWindowsReservedWords() { IFileNameValidator validator = new FileNameValidator(); for (String word : FileNameValidatorConstants.WIN_RESERVED_WORDS) { StringBuilder builder = new StringBuilder(word); builder.append(".xmi"); //$NON-NLS-1$ IStatus status = validator.validate(builder.toString()); if (isWindows()) { // Should fail since reserved words are forbidden on windows assertEquals(IStatus.ERROR, status.getSeverity()); } else { // Should warn since the filename is not portable assertEquals(IStatus.WARNING, status.getSeverity()); } // Should warn since the filename is not portable status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_MAC); assertEquals(IStatus.WARNING, status.getSeverity()); // Should fail since reserved characters are forbidden on windows status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_ALL); assertEquals(IStatus.ERROR, status.getSeverity()); // Should fail since reserved characters are forbidden on windows status = validator.validate(builder.toString(), IFileNameValidator.ERROR_ON_WINDOWS); assertEquals(IStatus.ERROR, status.getSeverity()); } } /** * Tests the loading of reserved words and validation of them. * All reserved words, whether singurlarly or with an extension, * should fail the validator. */ @Test public void testValidateLoadedReservedWords() { IFileNameValidator validator = new FileNameValidator(); String[] reservedWords = new String[] { "Select", "From", "TEMP", "SYS", "SYSADMIN" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ }; for (String reservedWord : reservedWords) { validator.addReservedWord(reservedWord); } for (String reservedWord : reservedWords) { // Test the word IStatus status = validator.validate(reservedWord); // Should always fail since the user added these reserved characters assertEquals(IStatus.ERROR, status.getSeverity()); } } }