/*
   * Test the clone() method
   */
  @Test
  public void testRegularIFNetTransitionClone() throws ParameterException {
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition t = (RegularIFNetTransition) sNet.getTransition("t0");
    t.setSilent(true);
    // Create an instance of TestGuardDataContainer
    TestGuardDataContainer tgdc = new TestGuardDataContainer(sNet.getTokenColors());
    t.setGuardDataContainer(tgdc);

    RegularIFNetTransition tClone = t.clone();
    assertEquals(t, tClone);
    assertNotSame(t, tClone);
    assertTrue(tClone.isSilent());
    assertEquals(t.getName(), tClone.getName());
    assertEquals(t.getLabel(), tClone.getLabel());
    assertEquals(t.isPlace(), tClone.isPlace());
    assertEquals(t.isDrain(), tClone.isDrain());
    assertEquals(t.isSource(), tClone.isSource());
    assertEquals(t.isTransition(), tClone.isTransition());
    assertEquals(t.getGuards().size(), tClone.getGuards().size());
    assertEquals(t.getGuardDataContainer(), tClone.getGuardDataContainer());
    // assertNotSame(t.getGuardDataContainer(), tClone.getGuardDataContainer());

    // Access modes
    for (Entry<String, Set<AccessMode>> color : t.getAccessModes().entrySet()) {
      assertEquals(color.getValue(), tClone.getAccessModes(color.getKey()));
    }
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#getAccessModes(java.lang.String)}. Check whether the access modes are returned correctly.
   */
  @Test
  public void testGetAccessModesString() throws ParameterException {

    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("t0");

    // contained
    Set<AccessMode> greenAccess = trans.getAccessModes("green");
    Set<AccessMode> redAccess = trans.getAccessModes("red");
    Set<AccessMode> blueAccess = trans.getAccessModes("blue");
    Set<AccessMode> pinkAccess = trans.getAccessModes("pink");

    assertTrue("A given accessmode was not set.", greenAccess.contains(AccessMode.READ));
    assertTrue("A given accessmode was not set.", redAccess.contains(AccessMode.DELETE));
    assertTrue("A given accessmode was not set.", blueAccess.contains(AccessMode.CREATE));
    assertTrue("A non given accessmode was set.", pinkAccess.isEmpty());
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#addAccessMode(java.lang.String, de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.AccessMode[])}. Set some accessmodes. Use colors which already have access modes and new colors.
   */
  @Test
  public void testAddAccessModeStringAccessModeArray() throws ParameterException {
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("t0");

    HashSet<AccessMode> createMode = new HashSet<AccessMode>();
    HashSet<AccessMode> deleteMode = new HashSet<AccessMode>();
    createMode.add(AccessMode.CREATE);
    deleteMode.add(AccessMode.DELETE);

    trans.addAccessMode("green", createMode);
    trans.addAccessMode("pink", deleteMode);

    // Check all are contained
    Set<AccessMode> greenModes = trans.getAccessModes("green");
    assertTrue("An access mode is missing", greenModes.contains(AccessMode.CREATE));
    assertTrue("An access mode is missing", greenModes.contains(AccessMode.READ));
    Set<AccessMode> pinkModes = trans.getAccessModes("pink");
    assertTrue("An access mode is missing", pinkModes.contains(AccessMode.DELETE));
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#setAccessMode(java.lang.String, java.util.Collection)}.
   */
  @Test
  public void testSetAccessModeStringCollectionOfAccessMode() throws ParameterException {
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("tIn");

    // set access mode
    trans.setAccessMode("pink", AccessMode.READ, AccessMode.CREATE);
    Map<String, Set<AccessMode>> modes = trans.getAccessModes();
    Set<AccessMode> pinkAccess = modes.get("pink");
    assertTrue("A given accessmode (READ) was not set.", pinkAccess.contains(AccessMode.READ));
    assertTrue("A given accessmode (CREATE) was not set.", pinkAccess.contains(AccessMode.CREATE));

    // Check there are no other modes
    pinkAccess.remove(AccessMode.READ);
    pinkAccess.remove(AccessMode.CREATE);
    assertTrue("A non given accessmode was set.", pinkAccess.isEmpty());
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#removeAccessMode(java.lang.String, de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.AccessMode[])}.
   */
  @Test
  public void testRemoveAccessModeStringAccessModeArray() throws ParameterException {
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("t0");

    // remove a non existent access mode
    assertFalse(
        "Removing an non existent access mode returned true",
        trans.removeAccessMode("pink", AccessMode.READ));

    // remove the read access
    trans.removeAccessMode("green", AccessMode.READ);
    Set<AccessMode> greenModes = trans.getAccessModes("green");
    assertTrue("An access mode got not removed", greenModes.isEmpty());

    // remove all access modes and then try to remove one more

    trans.removeAccessModes("green");
    trans.removeAccessModes("red");
    trans.removeAccessModes("blue");
    assertFalse(
        "Removing an non existent access mode returned true", trans.removeAccessModes("green"));
  }