/**
   * This method test the 'return copy of enzyme' functionality when requesting an enzyme instance.
   */
  public void testCopyOfEnzyme() {
    final String inputFile = TestCaseLM.getFullFilePath("enzymes_test.txt").replace("%20", " ");
    // Try it for a regular Enzyme.
    try {
      MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
      Enzyme mod = mer.getEnzyme(mer.getEnzymeNames()[0]);

      int mc = mod.getMiscleavages();
      String cleave = new String(mod.getCleavage());

      mod.setMiscleavages(mc + 1);
      mod.setCleavage(cleave + "H");

      // Make sure 'mod' has changed.
      Assert.assertEquals(mc + 1, mod.getMiscleavages());
      Assert.assertEquals(cleave + "H", new String(mod.getCleavage()));

      // Now get another copy of the same enzyme, and see if it has retained the original values.
      Enzyme original = mer.getEnzyme(mer.getEnzymeNames()[0]);
      Assert.assertEquals(mc, original.getMiscleavages());
      Assert.assertEquals(cleave, new String(original.getCleavage()));
    } catch (IOException ioe) {
      fail(
          "IOException while testing whether a received Enzyme is in fact a copy: '"
              + ioe.getMessage()
              + "'.");
    }
    // Try it for a DualEnzyme.
    try {
      MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
      DualEnzyme mod = (DualEnzyme) mer.getEnzyme("dualTrypCathep");

      int mc = mod.getMiscleavages();
      String ntermCleave = new String(mod.getCleavage(DualEnzyme.NTERMINAL));
      String ctermCleave = new String(mod.getCleavage(DualEnzyme.CTERMINAL));

      mod.setMiscleavages(mc + 1);
      mod.setCleavage(ntermCleave + "H", DualEnzyme.NTERMINAL);
      mod.setCleavage(ctermCleave + "W", DualEnzyme.CTERMINAL);

      // Make sure 'mod' has changed.
      Assert.assertEquals(mc + 1, mod.getMiscleavages());
      Assert.assertEquals(ntermCleave + "H", new String(mod.getCleavage(DualEnzyme.NTERMINAL)));
      Assert.assertEquals(ctermCleave + "W", new String(mod.getCleavage(DualEnzyme.CTERMINAL)));

      // Now get another copy of the same enzyme, and see if it has retained the original values.
      DualEnzyme original = (DualEnzyme) mer.getEnzyme("dualTrypCathep");
      Assert.assertEquals(mc, original.getMiscleavages());
      Assert.assertEquals(ntermCleave, new String(original.getCleavage(DualEnzyme.NTERMINAL)));
      Assert.assertEquals(ctermCleave, new String(original.getCleavage(DualEnzyme.CTERMINAL)));
    } catch (IOException ioe) {
      fail(
          "IOException while testing whether a received Enzyme is in fact a copy: '"
              + ioe.getMessage()
              + "'.");
    }
    // Try it for a RegExEnzyme.
    try {
      MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
      RegExEnzyme mod = (RegExEnzyme) mer.getEnzyme("regexTrypCathep2");

      int mc = mod.getMiscleavages();
      String cleave = new String(mod.getCleavage());

      mod.setMiscleavages(mc + 1);
      mod.setCleavage(cleave + "H");

      // Make sure 'mod' has changed.
      Assert.assertEquals(mc + 1, mod.getMiscleavages());
      Assert.assertEquals(cleave + "H", new String(mod.getCleavage()));

      // Now get another copy of the same enzyme, and see if it has retained the original values.
      Enzyme original = mer.getEnzyme("regexTrypCathep2");
      Assert.assertEquals(mc, original.getMiscleavages());
      Assert.assertEquals(cleave, new String(original.getCleavage()));
    } catch (IOException ioe) {
      fail(
          "IOException while testing whether a received Enzyme is in fact a copy: '"
              + ioe.getMessage()
              + "'.");
    }
  }