blob: 3c3460869913fb61f69d36e30d64006b65ed2c74 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015-2016 University of York.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License, v. 2.0 are satisfied: GNU General Public License, version 3.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-3.0
*
* Contributors:
* Antonio Garcia-Dominguez - initial API and implementation
*******************************************************************************/
package org.eclipse.hawk.service.emf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Properties;
import org.eclipse.hawk.service.api.EffectiveMetamodelRuleset;
import org.eclipse.hawk.service.emf.EffectiveMetamodelRulesetSerializer;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ImmutableSet;
public class EffectiveMetamodelRulesetTest {
private static final String PROPERTY_EMM_PREFIX = "hawk.effectiveMetamodel";
private EffectiveMetamodelRulesetSerializer serializer;
private Properties props;
@Before
public void setup() {
this.serializer = new EffectiveMetamodelRulesetSerializer(PROPERTY_EMM_PREFIX);
this.props = new Properties();
}
@Test
public void saveLoadEmpty() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertTrue(loaded.isEverythingIncluded());
assertTrue(loaded.isIncluded("x"));
assertTrue(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertTrue(loaded.isFullyIncluded("x", "y"));
assertTrue(loaded.isIncluded("a", "b", "c"));
assertEquals(ImmutableSet.of(EffectiveMetamodelRuleset.WILDCARD), loaded.getIncludedSlots("f", "g"));
}
@Test
public void saveLoadIncludeMetamodel() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertFalse(loaded.isEverythingIncluded());
assertTrue(loaded.isIncluded("x"));
assertTrue(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertTrue(loaded.isFullyIncluded("x", "y"));
assertTrue(loaded.isIncluded("x", "y", "z"));
assertFalse(loaded.isIncluded("y"));
assertFalse(loaded.isFullyIncluded("y"));
assertFalse(loaded.isIncluded("y"));
assertFalse(loaded.isFullyIncluded("y"));
assertFalse(loaded.isIncluded("y", "y"));
assertFalse(loaded.isFullyIncluded("y", "y"));
assertFalse(loaded.isIncluded("y", "y", "z"));
}
@Test
public void saveLoadExcludeMetamodel() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.exclude("x");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertFalse(loaded.isEverythingIncluded());
assertFalse(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertFalse(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isIncluded("x", "y", "z"));
assertEquals(ImmutableSet.of(), loaded.getIncludedSlots("x", "y"));
assertTrue(loaded.isIncluded("y"));
assertTrue(loaded.isFullyIncluded("y"));
assertTrue(loaded.isIncluded("y"));
assertTrue(loaded.isFullyIncluded("y"));
assertTrue(loaded.isIncluded("y", "y"));
assertTrue(loaded.isFullyIncluded("y", "y"));
assertTrue(loaded.isIncluded("y", "y", "z"));
}
@Test
public void saveLoadEmptyUnrelated() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
serializer.save(saved, props);
props.put("ignore", "me");
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertTrue(loaded.isEverythingIncluded());
}
@Test
public void saveLoadEmptyNoIncludeExcludeSuffix() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
serializer.save(saved, props);
props.put(PROPERTY_EMM_PREFIX + "0.0.0.0", "imbad");
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertTrue(loaded.isEverythingIncluded());
}
@Test(expected=IllegalArgumentException.class)
public void saveLoadEmptyTooManyParts() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
serializer.save(saved, props);
props.put(PROPERTY_EMM_PREFIX + EffectiveMetamodelRulesetSerializer.INCLUDES_SUFFIX + "0.0.0.0", "imbad");
serializer.load(props);
}
@Test
public void saveLoadMetamodelWithNoTypes() {
props.put(PROPERTY_EMM_PREFIX + EffectiveMetamodelRulesetSerializer.INCLUDES_SUFFIX + "0", "http://foo/bar");
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(new EffectiveMetamodelRuleset(), loaded);
assertTrue(loaded.isEverythingIncluded());
}
@Test
public void saveLoadOneTypeAllSlotsExplicit() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x", "y");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(saved, loaded);
assertFalse(loaded.isEverythingIncluded());
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertTrue(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isIncluded("x", "z"));
assertFalse(loaded.isFullyIncluded("x", "z"));
assertFalse(loaded.isIncluded("y", "x"));
assertFalse(loaded.isFullyIncluded("y", "x"));
assertTrue(loaded.isIncluded("x", "y", "z"));
assertEquals(ImmutableSet.of(), loaded.getIncludedSlots("a", "b"));
}
@Test
public void saveLoadSomeTypesSomeSlots() {
final ImmutableSet<String> empty = ImmutableSet.of();
final ImmutableSet<String> xzSlots = ImmutableSet.of("a", "b");
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x", "y", empty);
saved.include("x", "z", xzSlots);
saved.include("u", "w", ImmutableSet.of("f"));
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertFalse(loaded.isEverythingIncluded());
assertTrue(loaded.isIncluded("x", "y"));
assertTrue(loaded.isIncluded("x", "z"));
assertTrue(loaded.isIncluded("u", "w"));
assertFalse(loaded.isIncluded("u", "z"));
assertFalse(loaded.isIncluded("v", "z"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "z"));
assertFalse(loaded.isFullyIncluded("u", "w"));
assertFalse(loaded.isFullyIncluded("u", "z"));
assertFalse(loaded.isFullyIncluded("v", "z"));
assertFalse(loaded.isIncluded("x", "y", "z"));
assertTrue(loaded.isIncluded("x", "z", "a"));
assertTrue(loaded.isIncluded("x", "z", "b"));
assertTrue(loaded.isIncluded("u", "w", "f"));
assertFalse(loaded.isIncluded("u", "w", "g"));
assertFalse(loaded.isIncluded("v", "z", "h"));
assertEquals(empty, loaded.getIncludedSlots("x", "y"));
assertEquals(xzSlots, loaded.getIncludedSlots("x", "z"));
}
@Test
public void saveLoadIncludeTypeExcludeSlots() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x", "y");
saved.exclude("x", "y", ImmutableSet.of("f"));
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertTrue(loaded.isIncluded("x", "y", "a"));
assertFalse(loaded.isIncluded("x", "y", "f"));
}
/**
* Sanity check: including a slot should not matter if we have excluded the entire type.
*/
@Test
public void saveLoadExcludeTypeIncludeSlots() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.exclude("x", "y");
saved.include("x", "y", ImmutableSet.of("f"));
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertFalse(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isIncluded("x", "y", "a"));
assertFalse(loaded.isIncluded("x", "y", "f"));
}
@Test
public void saveLoadIncludeExcludeSlots() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x", "y", ImmutableSet.of("f", "g"));
saved.exclude("x", "y", ImmutableSet.of("f"));
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertTrue(loaded.isIncluded("x", "y", "g"));
assertFalse(loaded.isIncluded("x", "y", "f"));
assertEquals(ImmutableSet.of("g"), loaded.getIncludedSlots("x", "y"));
}
@Test
public void saveLoadIncludeMetamodelExcludeTypes() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x");
saved.exclude("x", "y");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertFalse(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isIncluded("x", "y", "a"));
assertFalse(loaded.isIncluded("x", "y", "f"));
assertTrue(loaded.isIncluded("x", "z"));
assertTrue(loaded.isFullyIncluded("x", "z"));
assertTrue(loaded.isIncluded("x", "z", "a"));
assertTrue(loaded.isIncluded("x", "z", "f"));
}
@Test
public void saveLoadExcludeMetamodelIncludeTypes() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.exclude("x");
saved.include("x", "y");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertFalse(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertFalse(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isIncluded("x", "y", "a"));
assertFalse(loaded.isIncluded("x", "y", "f"));
assertFalse(loaded.isIncluded("x", "z"));
assertFalse(loaded.isFullyIncluded("x", "z"));
assertFalse(loaded.isIncluded("x", "z", "a"));
assertFalse(loaded.isIncluded("x", "z", "f"));
}
@Test
public void saveLoadIncludeMetamodelExcludeSlots() {
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x");
saved.exclude("x", "y", ImmutableSet.of("f"));
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertTrue(loaded.isIncluded("x"));
assertFalse(loaded.isFullyIncluded("x"));
assertTrue(loaded.isIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertTrue(loaded.isIncluded("x", "y", "a"));
assertFalse(loaded.isIncluded("x", "y", "f"));
}
@Test
public void removeType() {
final ImmutableSet<String> empty = ImmutableSet.of();
final EffectiveMetamodelRuleset saved = new EffectiveMetamodelRuleset();
saved.include("x", "y", empty);
saved.include("x", "z", ImmutableSet.of("a", "b"));
saved.include("u", "w", ImmutableSet.of("f"));
saved.exclude("x", "y");
saved.exclude("u", "z");
saved.exclude("h", "x");
serializer.save(saved, props);
final EffectiveMetamodelRuleset loaded = serializer.load(props);
assertEquals(loaded, saved);
assertFalse(loaded.isIncluded("x", "y"));
assertFalse(loaded.isIncluded("h", "x"));
assertTrue(loaded.isIncluded("x", "z"));
assertTrue(loaded.isIncluded("u", "w"));
assertFalse(loaded.isFullyIncluded("x", "y"));
assertFalse(loaded.isFullyIncluded("h", "x"));
assertFalse(loaded.isFullyIncluded("x", "z"));
assertFalse(loaded.isFullyIncluded("u", "w"));
}
@Test
public void copyConstructor() {
final ImmutableSet<String> empty = ImmutableSet.of();
final EffectiveMetamodelRuleset original = new EffectiveMetamodelRuleset();
original.include("x", "y", empty);
original.include("x", "z", ImmutableSet.of("a", "b"));
original.include("u", "w", ImmutableSet.of("f"));
final EffectiveMetamodelRuleset copy = new EffectiveMetamodelRuleset(original);
assertEquals(original, copy);
}
}