/*******************************************************************************
* 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.validators;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import org.eclipse.skalli.model.ExtensibleEntityBase;
import org.eclipse.skalli.model.Issue;
import org.eclipse.skalli.model.PropertyName;
import org.eclipse.skalli.model.Severity;
import org.eclipse.skalli.testutil.TestUUIDs;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("nls")
public class MinMaxSizeValidatorTest {
class TestExtension extends ExtensibleEntityBase {
Set<String> items = new HashSet<String>();
@PropertyName
public static final String PROPERTY_ITEMS = "items";
public Set<String> getItems() {
return items;
}
}
private Set<String> items;
@Before
public void before() {
items = new HashSet<String>();
items.add("item1");
items.add("item2");
items.add("item3");
}
private MinMaxSizeValidator createValidator(int minExpectedOccurrences, int maxAllowedOccurrences) {
return new MinMaxSizeValidator(Severity.WARNING, TestExtension.class, TestExtension.PROPERTY_ITEMS,
"Items", minExpectedOccurrences, maxAllowedOccurrences);
}
private MinMaxSizeValidator createValidatorNoCaption(int minExpectedOccurrences, int maxAllowedOccurrences) {
return new MinMaxSizeValidator(Severity.WARNING, TestExtension.class, TestExtension.PROPERTY_ITEMS,
null, minExpectedOccurrences, maxAllowedOccurrences);
}
@Test
public void testValidateServerityIsLess() {
SortedSet<Issue> itmes = createValidator(0, 1).validate(TestUUIDs.TEST_UUIDS[0], items,
Severity.INFO);
Assert.assertEquals(1, itmes.size());
}
@Test
public void testValidateServerityIsEquals() {
SortedSet<Issue> itmes = createValidator(0, 1)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
}
@Test
public void testValidateServerityIsGreater() {
SortedSet<Issue> itmes = createValidator(0, 1)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.FATAL);
Assert.assertEquals(0, itmes.size());
}
@Test
public void testValidateAtMost() {
SortedSet<Issue> itmes = createValidator(0, 2)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Issue itme1 = itmes.first();
Assert.assertEquals("Items should have at most 2 entries, but it currently has 3",
itme1.getMessage());
}
@Test
public void testValidateAtMostNoCaption() throws Exception {
SortedSet<Issue> itmes = createValidatorNoCaption(0, 2)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Issue itme1 = itmes.first();
Assert.assertEquals("Property 'items' should have at most 2 entries, but it currently has 3",
itme1.getMessage());
}
@Test
public void testValidateAtMostOne() {
SortedSet<Issue> itmes = createValidator(0, 1)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Issue itme1 = itmes.first();
Assert.assertEquals("Items should have at most one entry, but it currently has 3",
itme1.getMessage());
}
@Test
public void testValidateAtMostOneNoCaption() throws Exception {
SortedSet<Issue> itmes = createValidatorNoCaption(0, 1)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Issue itme1 = itmes.first();
Assert.assertEquals("Property 'items' should have at most one entry, but it currently has 3",
itme1.getMessage());
}
@Test
public void testValidateAtLeast() {
SortedSet<Issue> itmes = createValidator(5, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
Issue itme1 = itmes.first();
Assert.assertEquals("Items should have at least 5 entries, but it currently has only 3",
itme1.getMessage());
}
@Test
public void testValidateAtLeastNoCaption() {
SortedSet<Issue> itmes = createValidatorNoCaption(5, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
Issue itme1 = itmes.first();
Assert.assertEquals("Property 'items' should have at least 5 entries, but it currently has only 3",
itme1.getMessage());
}
@Test
public void testValidateAtLeastOne() {
SortedSet<Issue> itmes = createValidator(1, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], Collections.emptySet(), Severity.WARNING);
Assert.assertEquals(1, itmes.size());
Issue itme1 = itmes.first();
Assert.assertEquals("Items should have at least one entry",
itme1.getMessage());
}
@Test
public void testValidateAtLeastOneNoCaption() {
SortedSet<Issue> itmes = createValidatorNoCaption(1, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], Collections.emptySet(), Severity.WARNING);
Assert.assertEquals(1, itmes.size());
Issue itme1 = itmes.first();
Assert.assertEquals("Property 'items' should have at least one entry",
itme1.getMessage());
}
@Test
public void testValidateMinMaxIssues() {
SortedSet<Issue> itmes = createValidator(5, 5)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
int minIssues = 0;
int maxIssues = 0;
for (Issue issue : itmes) {
if (issue.getMessage().contains("should have at least")) {
minIssues++;
}
if (issue.getMessage().contains("should not have more than")) {
maxIssues++;
}
}
Assert.assertEquals(1, minIssues);
Assert.assertEquals(0, maxIssues);
}
@Test
public void testValidateMinMaxNoIssues() {
SortedSet<Issue> itmes = createValidator(3, 3)
.validate(TestUUIDs.TEST_UUIDS[0], items, Severity.WARNING);
Assert.assertEquals(0, itmes.size());
}
@Test
public void testValidateMinValue() {
SortedSet<Issue> itmes = createValidator(1, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], null, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
}
@Test
public void testValidatePropertyOptional() {
SortedSet<Issue> itmes = createValidator(0, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], null, Severity.WARNING);
Assert.assertEquals(0, itmes.size());
}
@Test
public void testValidatePropertyNotOptionalButOccurrenceIs0() {
SortedSet<Issue> itmes = createValidator(1, Integer.MAX_VALUE)
.validate(TestUUIDs.TEST_UUIDS[0], null, Severity.WARNING);
Assert.assertEquals(1, itmes.size());
}
@Test
public void testValidateMinMaxValueNoIssue() {
SortedSet<Issue> itmes = createValidator(1, 1)
.validate(TestUUIDs.TEST_UUIDS[0], "a single value", Severity.WARNING);
Assert.assertEquals(0, itmes.size());
}
@Test
public void testValidateMinMaxValueOneIssue() {
SortedSet<Issue> itmes = createValidator(2, 2)
.validate(TestUUIDs.TEST_UUIDS[0], "a single value", Severity.WARNING);
Assert.assertEquals(1, itmes.size());
}
}