/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * 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: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.services.extension; import java.util.SortedSet; import java.util.UUID; import org.eclipse.skalli.model.ExtensionEntityBase; import org.eclipse.skalli.model.Issue; import org.eclipse.skalli.model.Severity; import org.eclipse.skalli.testutil.TestExtension; import org.eclipse.skalli.testutil.TestUUIDs; import org.junit.Assert; import org.junit.Test; @SuppressWarnings("nls") public class PropertyValidatorBaseTest { class TestPropertyValidator extends PropertyValidatorBase { public TestPropertyValidator(Class<? extends ExtensionEntityBase> extension, String propertyName, String invalidValueMessage, String undefinedValueMessage) { super(Severity.FATAL, extension, propertyName, invalidValueMessage, undefinedValueMessage); } public TestPropertyValidator(Class<? extends ExtensionEntityBase> extension, String propertyName, String caption) { super(Severity.FATAL, extension, propertyName, caption); } public TestPropertyValidator(Class<? extends ExtensionEntityBase> extension, String propertyName) { super(Severity.FATAL, extension, propertyName); } @Override protected boolean isValid(UUID entity, Object value) { return "valid".equals(value) ? true : false; } } @Test public void testDefaultMessages() { TestPropertyValidator validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR); Assert.assertEquals(TestExtension.PROPERTY_STR, validator.property); Assert.assertEquals(TestExtension.class, validator.extension); Assert.assertNull(validator.caption); Assert.assertNull(validator.invalidValueMessage); Assert.assertNull(validator.undefinedValueMessage); assertValidIssue(validator); Issue issue = assertInvalidIssue(validator, "value"); Assert.assertEquals(validator.getDefaultInvalidMessage("value"), issue.getMessage()); issue = assertUndefinedIssue(validator, false); Assert.assertEquals(validator.getDefaultUndefinedMessage(), issue.getMessage()); issue = assertUndefinedIssue(validator, true); Assert.assertEquals(validator.getDefaultUndefinedMessage(), issue.getMessage()); } @Test public void testInvalidMessageFromCaption() { TestPropertyValidator validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR, "CAPTION"); Assert.assertEquals(TestExtension.PROPERTY_STR, validator.property); Assert.assertEquals(TestExtension.class, validator.extension); Assert.assertEquals("CAPTION", validator.caption); Assert.assertNull(validator.invalidValueMessage); Assert.assertNull(validator.undefinedValueMessage); assertValidIssue(validator); Issue issue = assertInvalidIssue(validator, "value"); Assert.assertEquals(validator.getInvalidMessageFromCaption("value"), issue.getMessage()); issue = assertUndefinedIssue(validator, false); Assert.assertEquals(validator.getUndefinedMessageFromCaption(), issue.getMessage()); issue = assertUndefinedIssue(validator, true); Assert.assertEquals(validator.getUndefinedMessageFromCaption(), issue.getMessage()); } @Test public void testCustomInvalidMessage() { TestPropertyValidator validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR, "invalid {0}", "undefined {0}"); //$NON-NLS-1$ //$NON-NLS-2$ Assert.assertEquals(TestExtension.PROPERTY_STR, validator.property); Assert.assertEquals(TestExtension.class, validator.extension); Assert.assertNull(validator.caption); Assert.assertEquals("invalid {0}", validator.invalidValueMessage); Assert.assertEquals("undefined {0}", validator.undefinedValueMessage); assertValidIssue(validator); Issue issue = assertInvalidIssue(validator, "value"); Assert.assertEquals("invalid value", issue.getMessage()); issue = assertUndefinedIssue(validator, false); Assert.assertEquals("undefined {0}", issue.getMessage()); issue = assertUndefinedIssue(validator, true); Assert.assertEquals("undefined {0}", issue.getMessage()); } @Test public void testHtmlEnocdingOfMessage() { final String VALUE = "<script>alert('Gotcha!')</script>"; final String ENCODED_VALUE = "<script>alert('Gotcha!')</script>"; TestPropertyValidator validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR); Issue issue = assertInvalidIssue(validator, VALUE); Assert.assertTrue(issue.getMessage().contains(ENCODED_VALUE)); validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR, "CAPTION"); issue = assertInvalidIssue(validator, VALUE); Assert.assertTrue(issue.getMessage().contains(ENCODED_VALUE)); validator = new TestPropertyValidator(TestExtension.class, TestExtension.PROPERTY_STR, "invalid {0}", "undefined {0}"); //$NON-NLS-1$ //$NON-NLS-2$ issue = assertInvalidIssue(validator, VALUE); Assert.assertEquals("invalid " + ENCODED_VALUE, issue.getMessage()); } private void assertValidIssue(TestPropertyValidator validator) { SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], "valid", Severity.FATAL); Assert.assertNotNull(issues); Assert.assertEquals(0, issues.size()); } private Issue assertInvalidIssue(TestPropertyValidator validator, String testValue) { // validation failes => assert issue set with one entry, assert issue correctly initialized SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], testValue, Severity.ERROR); Assert.assertNotNull(issues); Assert.assertEquals(1, issues.size()); Issue issue = issues.first(); Assert.assertNotNull(issue); Assert.assertEquals(Severity.FATAL, issue.getSeverity()); Assert.assertEquals(TestPropertyValidator.class, issue.getIssuer()); Assert.assertEquals(TestUUIDs.TEST_UUIDS[0], issue.getEntityId()); Assert.assertEquals(TestExtension.class, issue.getExtension()); Assert.assertEquals(TestExtension.PROPERTY_STR, issue.getPropertyId()); return issue; } private Issue assertUndefinedIssue(TestPropertyValidator validator, boolean emptyString) { validator.setValueRequired(true); SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], emptyString ? "" : null, Severity.FATAL); Assert.assertNotNull(issues); Assert.assertEquals(1, issues.size()); Issue issue = issues.first(); Assert.assertNotNull(issue); Assert.assertEquals(Severity.FATAL, issue.getSeverity()); Assert.assertEquals(TestPropertyValidator.class, issue.getIssuer()); Assert.assertEquals(TestUUIDs.TEST_UUIDS[0], issue.getEntityId()); Assert.assertEquals(TestExtension.class, issue.getExtension()); Assert.assertEquals(TestExtension.PROPERTY_STR, issue.getPropertyId()); validator.setValueRequired(false); return issue; } }