/******************************************************************************* * Copyright (c) 2012 Arapiki Solutions Inc. * 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: * "Peter Smith <psmith@arapiki.com>" - initial API and * implementation and/or initial documentation *******************************************************************************/ package com.buildml.model.types; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import com.buildml.model.CommonTestUtils; import com.buildml.model.IBuildStore; import com.buildml.model.IPackageMgr; import com.buildml.model.types.PackageSet; /** * Test methods for validating the PackageSet class. * @author "Peter Smith <psmith@arapiki.com>" */ public class TestPackageSet { /** The BuildStore that contains the packages */ private IBuildStore bs; /** The corresponding Packages class */ private IPackageMgr pkgMgr; /** The PackageSet under test */ private PackageSet pkgSet; /** Various package IDs */ private int idPkg1, idPkg2, idGreenPkg, idBluePkg, idYellowPkg, idMauvePkg; /** The scope values */ private final int ID_SCOPE_NONE = 0; private final int ID_SCOPE_PRIVATE = 1; private final int ID_SCOPE_PUBLIC = 2; /*-------------------------------------------------------------------------------------*/ /** * Setup() method, run before each test case is executed. Creates a new BuildStore * and a new empty PackageSet that's tied to that BuildStore. * @throws java.lang.Exception */ @Before public void setUp() throws Exception { bs = CommonTestUtils.getEmptyBuildStore(); pkgMgr = bs.getPackageMgr(); pkgSet = new PackageSet(bs); /* add a bunch of packages to the BuildStore */ idPkg1 = pkgMgr.addPackage("Pkg1"); idPkg2 = pkgMgr.addPackage("Pkg2"); idGreenPkg = pkgMgr.addPackage("GreenPkg"); idBluePkg = pkgMgr.addPackage("BluePkg"); idYellowPkg = pkgMgr.addPackage("YellowPkg"); idMauvePkg = pkgMgr.addPackage("MauvePkg"); } /*-------------------------------------------------------------------------------------*/ /** * Test the setDefault() method. */ @Test public void testSetDefault() { /* start with default of false, and check that nothing is present */ assertFalse(pkgSet.isMember(idPkg1)); assertFalse(pkgSet.isMember(idPkg1, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idPkg1, ID_SCOPE_PUBLIC)); /* switch over to default of true*/ pkgSet.setDefault(true); assertTrue(pkgSet.isMember(idPkg1)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PUBLIC)); } /*-------------------------------------------------------------------------------------*/ /** * Test the add() and isMember methods. */ @Test public void testAddIsMember() { /* add some packages/scopes */ pkgSet.add(idGreenPkg); pkgSet.add(idYellowPkg, ID_SCOPE_PRIVATE); pkgSet.add(idBluePkg, ID_SCOPE_PUBLIC); /* validate membership */ assertTrue(pkgSet.isMember(idGreenPkg)); assertTrue(pkgSet.isMember(idGreenPkg, ID_SCOPE_NONE)); assertTrue(pkgSet.isMember(idGreenPkg, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idGreenPkg, ID_SCOPE_PUBLIC)); /* if one or more scopes are members, then so is the whole package */ assertTrue(pkgSet.isMember(idYellowPkg)); assertFalse(pkgSet.isMember(idYellowPkg, ID_SCOPE_NONE)); assertTrue(pkgSet.isMember(idYellowPkg, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idYellowPkg, ID_SCOPE_PUBLIC)); assertTrue(pkgSet.isMember(idBluePkg)); assertFalse(pkgSet.isMember(idBluePkg, ID_SCOPE_NONE)); assertFalse(pkgSet.isMember(idBluePkg, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idBluePkg, ID_SCOPE_PUBLIC)); /* if the package was never added/remove, it'll default to false */ assertFalse(pkgSet.isMember(idPkg1)); assertFalse(pkgSet.isMember(idPkg1, ID_SCOPE_NONE)); assertFalse(pkgSet.isMember(idPkg1, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idPkg1, ID_SCOPE_PUBLIC)); /* unless we set the default to true */ pkgSet.setDefault(true); assertTrue(pkgSet.isMember(idPkg1)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_NONE)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PUBLIC)); } /*-------------------------------------------------------------------------------------*/ /** * Test the remove() and isMember methods. */ @Test public void testRemoveIsMember() { /* add some packages/scopes */ pkgSet.add(idPkg1); pkgSet.add(idPkg2, ID_SCOPE_PRIVATE); pkgSet.add(idYellowPkg, ID_SCOPE_PUBLIC); /* test their initial membership */ assertTrue(pkgSet.isMember(idPkg1)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idPkg1, ID_SCOPE_PUBLIC)); assertTrue(pkgSet.isMember(idPkg2)); assertTrue(pkgSet.isMember(idPkg2, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idPkg2, ID_SCOPE_PUBLIC)); assertTrue(pkgSet.isMember(idYellowPkg)); assertFalse(pkgSet.isMember(idYellowPkg, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idYellowPkg, ID_SCOPE_PUBLIC)); /* remove idPkg2/private */ pkgSet.remove(idPkg2, ID_SCOPE_PRIVATE); assertFalse(pkgSet.isMember(idPkg2)); assertFalse(pkgSet.isMember(idPkg2, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idPkg2, ID_SCOPE_PUBLIC)); /* remove idYellowPkg */ pkgSet.remove(idYellowPkg); assertFalse(pkgSet.isMember(idYellowPkg)); assertFalse(pkgSet.isMember(idYellowPkg, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idYellowPkg, ID_SCOPE_PUBLIC)); /* remove greenPkg */ pkgSet.remove(idGreenPkg); assertFalse(pkgSet.isMember(idGreenPkg)); assertFalse(pkgSet.isMember(idGreenPkg, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idGreenPkg, ID_SCOPE_PUBLIC)); /* set default to true - test BluePkg, then remove BluePkg */ pkgSet.setDefault(true); assertTrue(pkgSet.isMember(idBluePkg)); assertTrue(pkgSet.isMember(idBluePkg, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idBluePkg, ID_SCOPE_PUBLIC)); pkgSet.remove(idBluePkg); assertFalse(pkgSet.isMember(idBluePkg)); assertFalse(pkgSet.isMember(idBluePkg, ID_SCOPE_PRIVATE)); assertFalse(pkgSet.isMember(idBluePkg, ID_SCOPE_PUBLIC)); /* remove a single scope from a package that was true by default */ pkgSet.remove(idMauvePkg, ID_SCOPE_PRIVATE); assertTrue(pkgSet.isMember(idMauvePkg)); assertFalse(pkgSet.isMember(idMauvePkg, ID_SCOPE_PRIVATE)); assertTrue(pkgSet.isMember(idMauvePkg, ID_SCOPE_PUBLIC)); } /*-------------------------------------------------------------------------------------*/ /** * Test the clone operation, which provides a deep copy of the object. */ @Test public void testClone() { PackageSet newCs = null; /* add a single package */ pkgSet.add(idBluePkg); /* clone the object (deeply) */ try { newCs = (PackageSet)pkgSet.clone(); } catch (CloneNotSupportedException e) { fail("cloning failed. " + e.getMessage()); } /* add a second package to our original object.*/ pkgSet.add(idGreenPkg); /* add a second package to our clone */ newCs.add(idYellowPkg); /* validate the original object */ assertTrue(pkgSet.isMember(idBluePkg)); assertTrue(pkgSet.isMember(idGreenPkg)); assertFalse(pkgSet.isMember(idYellowPkg)); /* validate the clone object */ assertTrue(newCs.isMember(idBluePkg)); assertFalse(newCs.isMember(idGreenPkg)); assertTrue(newCs.isMember(idYellowPkg)); } /*-------------------------------------------------------------------------------------*/ }