X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=test%2Fjalview%2Fgui%2FAnnotationChooserTest.java;h=f3c0dee6eecac20ceada348ae1d031a44ac82d02;hb=74c36ac68e07e85da17fc5897ddb3bda4075084a;hp=3f56985083aba0de08bbebef04a3411fc9243a4e;hpb=c93b9ad2ebfab4cad4608a8890132918589576be;p=jalview.git
diff --git a/test/jalview/gui/AnnotationChooserTest.java b/test/jalview/gui/AnnotationChooserTest.java
index 3f56985..f3c0dee 100644
--- a/test/jalview/gui/AnnotationChooserTest.java
+++ b/test/jalview/gui/AnnotationChooserTest.java
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see
- * ann1 - for sequence 0 - label 'IUPRED' - * ann2 - not sequence related - label 'Beauty' - * ann3 - for sequence 3 - label 'JMol' - * ann4 - for sequence 2 - label 'IUPRED' - * ann5 - for sequence 1 - label 'JMol' + * ann1 - for sequence 0 - label 'IUPRED' ann2 - not sequence related - label + * 'Beauty' ann3 - for sequence 3 - label 'JMol' ann4 - for sequence 2 - label + * 'IUPRED' ann5 - for sequence 1 - label 'JMol' */ private void addAnnotations() { Annotation an = new Annotation(2f); - Annotation[] anns = new Annotation[] - { an, an, an }; + Annotation[] anns = new Annotation[] { an, an, an }; AlignmentAnnotation ann0 = new AlignmentAnnotation("IUPRED", "", anns); AlignmentAnnotation ann1 = new AlignmentAnnotation("Beauty", "", anns); AlignmentAnnotation ann2 = new AlignmentAnnotation("JMol", "", anns); @@ -107,7 +136,7 @@ public class AnnotationChooserTest /** * Test creation of panel with OK and Cancel buttons */ - @Test + @Test(groups = { "Functional" }) public void testBuildActionButtonsPanel() { testee = new AnnotationChooser(parentPanel); @@ -136,7 +165,7 @@ public class AnnotationChooserTest * Test 'Apply to' has 3 radio buttons enabled, 'Selected Sequences' selected, * when there is a current selection group. */ - @Test + @Test(groups = { "Functional" }) public void testBuildApplyToOptionsPanel_withSelectionGroup() { selectSequences(0, 2, 3); @@ -153,8 +182,8 @@ public class AnnotationChooserTest assertTrue("Not enabled", cb1.isEnabled()); assertTrue("Not enabled", cb2.isEnabled()); assertTrue("Not enabled", cb3.isEnabled()); - assertEquals("Option not selected", cb2, cb2.getCheckboxGroup() - .getSelectedCheckbox()); + assertEquals("Option not selected", cb2, + cb2.getCheckboxGroup().getSelectedCheckbox()); // check state variables match checkbox selection assertTrue(testee.isApplyToSelectedSequences()); @@ -183,7 +212,7 @@ public class AnnotationChooserTest * Test 'Apply to' has 1 radio button enabled, 'All Sequences' selected, when * there is no current selection group. */ - @Test + @Test(groups = { "Functional" }) public void testBuildApplyToOptionsPanel_noSelectionGroup() { testee = new AnnotationChooser(parentPanel); @@ -204,15 +233,16 @@ public class AnnotationChooserTest assertTrue("Not enabled", cb1.isEnabled()); assertFalse("Enabled", cb2.isEnabled()); assertFalse("Enabled", cb3.isEnabled()); - assertEquals("Not selected", cb1, cb1.getCheckboxGroup() - .getSelectedCheckbox()); + assertEquals("Not selected", cb1, + cb1.getCheckboxGroup().getSelectedCheckbox()); // check state variables match checkbox selection assertTrue(testee.isApplyToSelectedSequences()); assertTrue(testee.isApplyToUnselectedSequences()); assertEquals("Wrong text", - MessageManager.getString("label.all_sequences"), cb1.getLabel()); + MessageManager.getString("label.all_sequences"), + cb1.getLabel()); assertEquals("Wrong text", MessageManager.getString("label.selected_sequences"), cb2.getLabel()); @@ -224,7 +254,7 @@ public class AnnotationChooserTest /** * Test Show and Hide radio buttons created, with Hide initially selected. */ - @Test + @Test(groups = { "Functional" }) public void testBuildShowHidePanel() { testee = new AnnotationChooser(parentPanel); @@ -246,8 +276,8 @@ public class AnnotationChooserTest assertTrue("Hide not enabled", cb2.isEnabled()); // Hide (button 2) selected; note this may change to none (null) - assertEquals("Not selected", cb2, cb2.getCheckboxGroup() - .getSelectedCheckbox()); + assertEquals("Not selected", cb2, + cb2.getCheckboxGroup().getSelectedCheckbox()); assertTrue("Show is flagged", !testee.isShowSelected()); @@ -262,7 +292,7 @@ public class AnnotationChooserTest /** * Test construction of panel containing two sub-panels */ - @Test + @Test(groups = { "Functional" }) public void testBuildShowHideOptionsPanel() { testee = new AnnotationChooser(parentPanel); @@ -279,7 +309,7 @@ public class AnnotationChooserTest * Test that annotation types are (uniquely) identified. * */ - @Test + @Test(groups = { "Functional" }) public void testGetAnnotationTypes() { selectSequences(1); @@ -287,15 +317,15 @@ public class AnnotationChooserTest // selection group should make no difference to the result // as all annotation types for the alignment are considered - Listtypes = AnnotationChooser.getAnnotationTypes( - parentPanel.getAlignment(), true); + List types = AnnotationChooser + .getAnnotationTypes(parentPanel.getAlignment(), true); assertEquals("Not two annotation types", 2, types.size()); assertTrue("IUPRED missing", types.contains("IUPRED")); assertTrue("JMol missing", types.contains("JMol")); - types = AnnotationChooser.getAnnotationTypes( - parentPanel.getAlignment(), false); - assertEquals("Not six annotation types", 6, types.size()); + types = AnnotationChooser.getAnnotationTypes(parentPanel.getAlignment(), + false); + assertEquals("Not six annotation types", 7, types.size()); assertTrue("IUPRED missing", types.contains("IUPRED")); assertTrue("JMol missing", types.contains("JMol")); assertTrue("Beauty missing", types.contains("Beauty")); @@ -303,6 +333,7 @@ public class AnnotationChooserTest assertTrue("Consensus missing", types.contains("Consensus")); assertTrue("Quality missing", types.contains("Quality")); assertTrue("Conservation missing", types.contains("Conservation")); + assertTrue("Occupancy missing", types.contains("Occupancy")); } /** @@ -311,7 +342,7 @@ public class AnnotationChooserTest * We expect all annotations of that type to be set hidden. Other annotations * should be left visible. */ - @Test + @Test(groups = { "Functional" }) public void testSelectType_hideForAll() { selectSequences(1, 2); @@ -319,25 +350,27 @@ public class AnnotationChooserTest final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1); setSelected(hideCheckbox, true); - final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, - 1, 1, 0); + final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, 1, + 1, 0); setSelected(allSequencesCheckbox, true); AlignmentAnnotation[] anns = parentPanel.getAlignment() .getAlignmentAnnotation(); - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertTrue(anns[autocalc + 2].visible); // JMol for seq3 + assertTrue(anns[autocalc + 4].visible); // JMol for seq1 setSelected(getTypeCheckbox("JMol"), true); assertTrue(anns[0].visible); // Conservation assertTrue(anns[1].visible); // Quality assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertFalse(anns[5].visible); // JMol for seq3 - not selected but hidden - assertTrue(anns[6].visible); // IUPRED for seq2 - assertFalse(anns[7].visible); // JMol for seq1 - selected and hidden + assertTrue(anns[3].visible); // Occupancy + assertTrue(anns[4].visible); // IUPred for seq0 + assertTrue(anns[5].visible); // Beauty + assertFalse(anns[6].visible); // JMol for seq3 - not selected but hidden + assertTrue(anns[7].visible); // IUPRED for seq2 + assertFalse(anns[8].visible); // JMol for seq1 - selected and hidden } /** @@ -347,7 +380,7 @@ public class AnnotationChooserTest * We expect the annotations of that type, linked to the sequence group, to be * set hidden. Other annotations should be left visible. */ - @Test + @Test(groups = { "Functional" }) public void testSelectType_hideForSelected() { selectSequences(1, 2); @@ -364,17 +397,19 @@ public class AnnotationChooserTest AlignmentAnnotation[] anns = parentPanel.getAlignment() .getAlignmentAnnotation(); - assertTrue(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertTrue(anns[autocalc + 4].visible); // JMol for seq1 setSelected(getTypeCheckbox("JMol"), true); assertTrue(anns[0].visible); // Conservation assertTrue(anns[1].visible); // Quality assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertTrue(anns[5].visible); // JMol for seq3 not in selection group - assertTrue(anns[6].visible); // IUPRED for seq2 - assertFalse(anns[7].visible); // JMol for seq1 in selection group + assertTrue(anns[3].visible); // Occupancy + assertTrue(anns[4].visible); // IUPred for seq0 + assertTrue(anns[5].visible); // Beauty + assertTrue(anns[6].visible); // JMol for seq3 not in selection group + assertTrue(anns[7].visible); // IUPRED for seq2 + assertFalse(anns[8].visible); // JMol for seq1 in selection group } /** @@ -384,7 +419,7 @@ public class AnnotationChooserTest * We expect all annotations of that type to be set visible. Other annotations * should be left unchanged. */ - @Test + @Test(groups = { "Functional" }) public void testDeselectType_hideForAll() { selectSequences(1, 2); @@ -393,8 +428,8 @@ public class AnnotationChooserTest final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1); setSelected(hideCheckbox, true); - final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, - 1, 1, 0); + final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, 1, + 1, 0); setSelected(allSequencesCheckbox, true); AlignmentAnnotation[] anns = parentPanel.getAlignment() @@ -404,19 +439,35 @@ public class AnnotationChooserTest // select JMol - all hidden setSelected(typeCheckbox, true); - assertFalse(anns[5].visible); // JMol for seq3 - assertFalse(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertFalse(anns[autocalc + 2].visible); // JMol for seq3 + assertFalse(anns[autocalc + 4].visible); // JMol for seq1 // deselect JMol - all unhidden setSelected(typeCheckbox, false); - assertTrue(anns[0].visible); // Conservation - assertTrue(anns[1].visible); // Quality - assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[6].visible); // IUPRED for seq2 - assertTrue(anns[7].visible); // JMol for seq1 + for (AlignmentAnnotation ann : anns) + { + assertTrue(ann.visible); + } + } + + /** + * Returns a count of autocalculated annotations in the set provided + * + * @param anns + * @return + */ + private int countAutocalc(AlignmentAnnotation[] anns) + { + int count = 0; + for (AlignmentAnnotation ann : anns) + { + if (ann.autoCalculated) + { + count++; + } + } + return count; } /** @@ -426,7 +477,7 @@ public class AnnotationChooserTest * We expect the annotations of that type, linked to the sequence group, to be * set visible. Other annotations should be left unchanged. */ - @Test + @Test(groups = { "Functional" }) public void testDeselectType_hideForSelected() { selectSequences(1, 2); @@ -461,7 +512,7 @@ public class AnnotationChooserTest * We expect all annotations of that type to be set visible. Other annotations * should be left unchanged */ - @Test + @Test(groups = { "Functional" }) public void testSelectType_showForAll() { selectSequences(1, 2); @@ -469,8 +520,8 @@ public class AnnotationChooserTest final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0); final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1); - final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, - 1, 1, 0); + final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, 1, + 1, 0); AlignmentAnnotation[] anns = parentPanel.getAlignment() .getAlignmentAnnotation(); @@ -479,18 +530,15 @@ public class AnnotationChooserTest setSelected(allSequencesCheckbox, true); setSelected(hideCheckbox, true); setSelected(getTypeCheckbox("JMol"), true); - assertFalse(anns[5].visible); // JMol for seq3 - assertFalse(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertFalse(anns[autocalc + 2].visible); // JMol for seq3 + assertFalse(anns[autocalc + 4].visible); // JMol for seq1 // ...now show them... setSelected(showCheckbox, true); - assertTrue(anns[0].visible); // Conservation - assertTrue(anns[1].visible); // Quality - assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[6].visible); // IUPRED for seq2 - assertTrue(anns[7].visible); // JMol for seq1 + for (AlignmentAnnotation ann : anns) + { + assertTrue(ann.visible); + } } /** @@ -500,7 +548,7 @@ public class AnnotationChooserTest * We expect all annotations of that type, linked to the sequence group, to be * set visible. Other annotations should be left unchanged */ - @Test + @Test(groups = { "Functional" }) public void testSelectType_showForSelected() { // sequences 1 and 2 have annotations IUPred and Jmol @@ -520,19 +568,16 @@ public class AnnotationChooserTest setSelected(hideCheckbox, true); setSelected(getTypeCheckbox("JMol"), true); - assertTrue(anns[5].visible); // JMol for seq3 - assertFalse(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertTrue(anns[autocalc + 2].visible); // JMol for seq3 + assertFalse(anns[autocalc + 4].visible); // JMol for seq1 // ...now show them... setSelected(showCheckbox, true); - assertTrue(anns[0].visible); // Conservation - assertTrue(anns[1].visible); // Quality - assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[6].visible); // IUPRED for seq2 - assertTrue(anns[7].visible); // JMol for seq1 + for (AlignmentAnnotation ann : anns) + { + assertTrue(ann.visible); + } } /** @@ -542,7 +587,7 @@ public class AnnotationChooserTest * We expect all annotations of that type to be set hidden. Other annotations * should be left unchanged. */ - @Test + @Test(groups = { "Functional" }) public void testDeselectType_showForAll() { selectSequences(1, 2); @@ -551,8 +596,8 @@ public class AnnotationChooserTest final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0); setSelected(showCheckbox, true); - final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, - 1, 1, 0); + final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, 1, + 1, 0); setSelected(allSequencesCheckbox, true); AlignmentAnnotation[] anns = parentPanel.getAlignment() @@ -561,19 +606,21 @@ public class AnnotationChooserTest final Checkbox typeCheckbox = getTypeCheckbox("JMol"); // select JMol - all shown setSelected(typeCheckbox, true); - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertTrue(anns[autocalc + 2].visible); // JMol for seq3 + assertTrue(anns[autocalc + 4].visible); // JMol for seq1 // deselect JMol - all hidden setSelected(typeCheckbox, false); assertTrue(anns[0].visible); // Conservation assertTrue(anns[1].visible); // Quality assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertFalse(anns[5].visible); // JMol for seq3 - assertTrue(anns[6].visible); // IUPRED for seq2 - assertFalse(anns[7].visible); // JMol for seq1 + assertTrue(anns[3].visible); // Occupancy + assertTrue(anns[4].visible); // IUPred for seq0 + assertTrue(anns[5].visible); // Beauty + assertFalse(anns[6].visible); // JMol for seq3 + assertTrue(anns[7].visible); // IUPRED for seq2 + assertFalse(anns[8].visible); // JMol for seq1 } /** @@ -583,7 +630,7 @@ public class AnnotationChooserTest * We expect the annotations of that type, linked to the sequence group, to be * set hidden. Other annotations should be left unchanged. */ - @Test + @Test(groups = { "Functional" }) public void testDeselectType_showForSelected() { selectSequences(1, 2); @@ -602,19 +649,21 @@ public class AnnotationChooserTest // select JMol - should remain visible setSelected(getTypeCheckbox("JMol"), true); - assertTrue(anns[5].visible); // JMol for seq3 - assertTrue(anns[7].visible); // JMol for seq1 + int autocalc = countAutocalc(anns); + assertTrue(anns[autocalc + 2].visible); // JMol for seq3 + assertTrue(anns[autocalc + 4].visible); // JMol for seq1 // deselect JMol - should be hidden for selected sequences only setSelected(getTypeCheckbox("JMol"), false); assertTrue(anns[0].visible); // Conservation assertTrue(anns[1].visible); // Quality assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // IUPred for seq0 - assertTrue(anns[4].visible); // Beauty - assertTrue(anns[5].visible); // JMol for seq3 not in selection group - assertTrue(anns[6].visible); // IUPRED for seq2 - assertFalse(anns[7].visible); // JMol for seq1 in selection group + assertTrue(anns[3].visible); // Occupancy + assertTrue(anns[4].visible); // IUPred for seq0 + assertTrue(anns[5].visible); // Beauty + assertTrue(anns[6].visible); // JMol for seq3 not in selection group + assertTrue(anns[7].visible); // IUPRED for seq2 + assertFalse(anns[8].visible); // JMol for seq1 in selection group } /** @@ -647,9 +696,9 @@ public class AnnotationChooserTest // TODO refactor to a test utility class cb.setState(select); // have to manually fire the action listener - cb.getItemListeners()[0].itemStateChanged(new ItemEvent(cb, - ItemEvent.ITEM_STATE_CHANGED, cb, select ? ItemEvent.SELECTED - : ItemEvent.DESELECTED)); + cb.getItemListeners()[0].itemStateChanged( + new ItemEvent(cb, ItemEvent.ITEM_STATE_CHANGED, cb, + select ? ItemEvent.SELECTED : ItemEvent.DESELECTED)); } /** @@ -677,7 +726,7 @@ public class AnnotationChooserTest * Test cases include sequences in the selection group, and others not in the * group. */ - @Test + @Test(groups = { "Functional" }) public void testIsInActionScope_selectedScope() { // sequences 1 and 2 have annotations 4 and 3 respectively @@ -690,12 +739,12 @@ public class AnnotationChooserTest AlignmentAnnotation[] anns = parentPanel.getAlignment() .getAlignmentAnnotation(); - // remember 3 annotations to skip (Conservation/Quality/Consensus) - assertFalse(testee.isInActionScope(anns[3])); - assertFalse(testee.isInActionScope(anns[4])); - assertFalse(testee.isInActionScope(anns[5])); - assertTrue(testee.isInActionScope(anns[6])); - assertTrue(testee.isInActionScope(anns[7])); + int autocalc = countAutocalc(anns); + assertFalse(testee.isInActionScope(anns[autocalc])); + assertFalse(testee.isInActionScope(anns[autocalc + 1])); + assertFalse(testee.isInActionScope(anns[autocalc + 2])); + assertTrue(testee.isInActionScope(anns[autocalc + 3])); + assertTrue(testee.isInActionScope(anns[autocalc + 4])); } /** @@ -703,7 +752,7 @@ public class AnnotationChooserTest * Test cases include sequences in the selection group, and others not in the * group. */ - @Test + @Test(groups = { "Functional" }) public void testIsInActionScope_unselectedScope() { // sequences 1 and 2 have annotations 4 and 3 respectively @@ -716,18 +765,18 @@ public class AnnotationChooserTest AlignmentAnnotation[] anns = parentPanel.getAlignment() .getAlignmentAnnotation(); - // remember 3 annotations to skip (Conservation/Quality/Consensus) - assertTrue(testee.isInActionScope(anns[3])); - assertTrue(testee.isInActionScope(anns[4])); - assertTrue(testee.isInActionScope(anns[5])); - assertFalse(testee.isInActionScope(anns[6])); - assertFalse(testee.isInActionScope(anns[7])); + int autocalc = countAutocalc(anns); + assertTrue(testee.isInActionScope(anns[autocalc])); + assertTrue(testee.isInActionScope(anns[autocalc + 1])); + assertTrue(testee.isInActionScope(anns[autocalc + 2])); + assertFalse(testee.isInActionScope(anns[autocalc + 3])); + assertFalse(testee.isInActionScope(anns[autocalc + 4])); } /** * Test that the reset method restores previous visibility flags. */ - @Test + @Test(groups = { "Functional" }) public void testResetOriginalState() { testee = new AnnotationChooser(parentPanel); @@ -740,11 +789,14 @@ public class AnnotationChooserTest assertTrue(i + "'th sequence not visible", anns[i].visible); } + /* + * check options to hide JMol and IUPRED annotations for all sequences + */ final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1); setSelected(hideCheckbox, true); - final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, - 1, 1, 0); + final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee, 1, + 1, 0); setSelected(allSequencesCheckbox, true); setSelected(getTypeCheckbox("JMol"), true); @@ -753,11 +805,12 @@ public class AnnotationChooserTest assertTrue(anns[0].visible); // Conservation assertTrue(anns[1].visible); // Quality assertTrue(anns[2].visible); // Consensus - assertTrue(anns[3].visible); // Beauty (not seq-related) + assertTrue(anns[3].visible); // Occupancy assertFalse(anns[4].visible); // IUPRED - assertFalse(anns[5].visible); // JMol - assertFalse(anns[6].visible); // IUPRED - assertFalse(anns[7].visible); // JMol + assertTrue(anns[5].visible); // Beauty (not seq-related) + assertFalse(anns[6].visible); // JMol + assertFalse(anns[7].visible); // IUPRED + assertFalse(anns[8].visible); // JMol // reset - should all be visible testee.resetOriginalState();