/*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#checkValidity()}. Check whether a transition with delete consumes but does not produce a token with a certain color.
   */
  @Test
  public void testCheckValidityDelete() throws ParameterException {

    // Get a simple standard SNet and one of its transitions
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition rt = (RegularIFNetTransition) sNet.getTransition("t0");

    // Set "delete" to a produced color
    HashSet<AccessMode> dAccess = new HashSet<AccessMode>();
    dAccess.add(AccessMode.DELETE);
    rt.setAccessMode("blue", dAccess);

    try {
      rt.checkValidity();
      fail("A transition with delete on a certain color cannot produce this color!");
    } catch (PNValidationException e1) {
    }

    // clean up ...
    dAccess.clear();
    dAccess.add(AccessMode.CREATE);
    rt.setAccessMode("blue", dAccess);

    // set delete to a color which is not consumed
    HashSet<AccessMode> dAccess2 = new HashSet<AccessMode>();
    dAccess2.add(AccessMode.DELETE);
    rt.setAccessMode("pink", dAccess2);

    try {
      rt.checkValidity();
      fail("A transition with delete on a certain color must consume this color!");
    } catch (PNValidationException e1) {
    }
  }
  /*
   * 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#checkValidity()}. Check whether a transition with neither creates nor deletes on a certain token color process that color.
   */
  @Test
  public void testCheckValidityProcess() throws ParameterException {

    // Get a simple standard SNet and one of its transitions
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition rt = (RegularIFNetTransition) sNet.getTransition("t0");

    // Set "read" to a consumed but not produced color
    HashSet<AccessMode> rAccess = new HashSet<AccessMode>();
    rAccess.add(AccessMode.READ);
    rt.setAccessMode("red", rAccess);

    try {
      rt.checkValidity();
      fail("A token color which is only read must be consumed and produced.");
    } catch (PNValidationException e1) {
    }
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#checkValidity()}. Check whether a transition with create and delete is reported to be valid.
   */
  @Test
  public void testCheckValidityCreateDelete() throws ParameterException {

    // Get a simple standard SNet and one of its transtitions
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition rt = (RegularIFNetTransition) sNet.getTransition("t0");

    // Set "create" and "delete" mode for one color
    HashSet<AccessMode> cdAccess = new HashSet<AccessMode>();
    cdAccess.add(AccessMode.DELETE);
    cdAccess.add(AccessMode.CREATE);
    rt.setAccessMode("pink", cdAccess);

    try {
      rt.checkValidity();
      fail("A transition with create and delete on the same color is not valid!.");
    } catch (PNValidationException e1) {
    }
  }