Changeset 806


Ignore:
Timestamp:
09/10/12 20:52:49 (12 years ago)
Author:
fglaser
Message:
  • new helper class JFCReplayIDValidator added, that is able to extract all IDs from

GUITAR Gui file and to check if a given (generated) replayID is contained in this GUI file.

  • JFCReplayIDCalculator modified for test purposes (can be initialized with a Validator

to check if IDs that are generated "on the way" are valid)

  • Test Case extended for JFCReplayIDCalculator extended
  • extended guimapping for freemind
  • added new JFCReplayIDCalculator test ressources
Location:
trunk
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/quest-plugin-jfc-test/src/test/java/de/ugoe/cs/quest/plugin/jfc/JFCReplayIDCalculatorTest.java

    r797 r806  
    2626import de.ugoe.cs.quest.plugin.jfc.guimodel.JFCGUIElement; 
    2727import de.ugoe.cs.quest.plugin.jfc.guimodel.JFCGUIElementSpec; 
     28import de.ugoe.cs.quest.plugin.mfc.eventcore.MFCEventType; 
     29import de.ugoe.cs.quest.plugin.mfc.guimodel.MFCToolBar; 
    2830import de.ugoe.cs.util.console.TextConsole; 
    2931 
     
    3436 * @pattern JUnit Test Case 
    3537 * 
    36  * @generatedBy CodePro at 7/30/12 4:50 PM 
    37  * 
    3838 * @author fabian.glaser 
    3939 * 
     
    4141 */ 
    4242public class JFCReplayIDCalculatorTest extends TestCase { 
     43         
     44        Set<String> knownIDs = new HashSet<String>(); 
    4345 
    4446        /** 
     
    107109         
    108110        /** 
    109          * Run the String calculateReplayID(List<JFCGUIElementSpec>) method test. 
     111         * Method to test if calculated IDs are included in guitar efg file. 
     112         * If not more than 75 % can be matched, test fails.  
    110113         * 
    111114         * @throws Exception 
     
    115118                throws Exception { 
    116119                // generate list of known replayIDs from guitar efg file 
    117                 File guiFile = new File(ClassLoader.getSystemResource("freemind.efg").getFile()); 
    118                  
    119                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    120                 DocumentBuilder builder = factory.newDocumentBuilder(); 
    121                 Document freemindGUI = builder.parse(guiFile); 
    122                  
    123                 Node currentNode = freemindGUI.getFirstChild().getFirstChild(); 
    124                 NodeList eventNodes = null; 
    125                 List<String> knownIDs = new ArrayList<String>(); 
    126                  
    127                 while ((currentNode = currentNode.getNextSibling()) != null){ 
    128                         if (currentNode.getNodeName().equals("Events")) 
    129                                 eventNodes = currentNode.getChildNodes(); 
    130                 } 
    131                  
    132                 for (int i = 0; i < eventNodes.getLength(); i++){ 
    133                         if (eventNodes.item(i).getNodeName().equals("Event")){ 
    134                                 NodeList attributes = eventNodes.item(i).getChildNodes(); 
    135                                 for (int j = 0; j < attributes.getLength(); j++){ 
    136                                         if (attributes.item(j).getNodeName().equals("EventId")){ 
    137                                                 knownIDs.add(attributes.item(j).getTextContent()); 
    138                                         } 
    139                                 } 
    140                         } 
    141                 } 
     120                File guiFile = new File(ClassLoader.getSystemResource("freemind.xml").getFile()); 
     121                JFCReplayIDValidator validator = new JFCReplayIDValidator(guiFile); 
    142122                 
    143123                // calculate replayIDs from trace file 
     
    145125                ignoredEvents.add(JFCEventId.FOCUS_GAINED); 
    146126                JFCLogParser parser = new JFCLogParser(ignoredEvents); 
    147                 parser.parseFile(new File(ClassLoader.getSystemResource("freemind_trace2.xml").getFile())); 
    148                 JFCReplayIDCalculator calculator = new JFCReplayIDCalculator(); 
     127                parser.parseFile(new File(ClassLoader.getSystemResource("freemind_trace3.xml").getFile())); 
     128                JFCReplayIDCalculator calculator = new JFCReplayIDCalculator(validator); 
    149129                 
    150130                Set<String> generatedIDs = new HashSet<String>();  
     
    153133                 
    154134                assertTrue(sequences.size() > 0); 
    155                  
    156135                 
    157136                for (List<Event> currentSequence: sequences){ 
     
    160139                                generatedIDs.add(replayID); 
    161140                                System.out.println("Generated ID: " + replayID); 
     141                                System.out.println(); 
    162142                        } 
    163143                } 
     
    168148                int known = 0; 
    169149                for (String replayID: generatedIDs){ 
    170                         if (knownIDs.contains(replayID)){ 
     150                        if (validator.validateReplayID("w" + replayID.substring(1))){ 
    171151                                System.out.println(replayID + "\t is known."); 
    172152                                known++; 
     
    180160                System.out.println(percentage + "% of the generated IDs are known."); 
    181161                 
    182                 assertTrue(percentage > 75); 
    183                  
    184                  
     162                assertTrue(percentage > 75);     
     163        } 
     164         
     165         
     166        /** 
     167         * Method to test if calculateReplayID throws the right exception when 
     168         * it is called with a target of the wrong type. 
     169         */ 
     170        @Test 
     171        public void testCalculateReplayIDIllegalArgumentException(){ 
     172                try{ 
     173                        JFCReplayIDCalculator calculator = new JFCReplayIDCalculator(); 
     174                        Event event = new Event(new MFCEventType(null), new MFCToolBar(null, null)); 
     175                         
     176                        calculator.calculateReplayID(event); 
     177                 
     178                        fail("Expected IllegalArgumentException!"); 
     179                } 
     180                catch(IllegalArgumentException e){ 
     181                        System.out.println("Expected exception thrown."); 
     182                } 
    185183        } 
    186184 
  • trunk/quest-plugin-jfc-test/src/test/resources/freemind.efg

    r797 r806  
    219219        </Event> 
    220220        <Event> 
    221             <EventId>e2659174690</EventId> 
    222             <WidgetId>w2659174690</WidgetId> 
     221            <EventId>e2480964382</EventId> 
     222            <WidgetId>w2480964382</WidgetId> 
    223223            <Type>EXPAND</Type> 
    224224            <Initial>true</Initial> 
     
    226226        </Event> 
    227227        <Event> 
    228             <EventId>e2261466076</EventId> 
    229             <WidgetId>w2261466076</WidgetId> 
     228            <EventId>e2606563300</EventId> 
     229            <WidgetId>w2606563300</WidgetId> 
    230230            <Type>EXPAND</Type> 
    231231            <Initial>true</Initial> 
     
    233233        </Event> 
    234234        <Event> 
    235             <EventId>e3680670666</EventId> 
    236             <WidgetId>w3680670666</WidgetId> 
     235            <EventId>e3483508982</EventId> 
     236            <WidgetId>w3483508982</WidgetId> 
    237237            <Type>EXPAND</Type> 
    238238            <Initial>true</Initial> 
     
    240240        </Event> 
    241241        <Event> 
    242             <EventId>e3601696666</EventId> 
    243             <WidgetId>w3601696666</WidgetId> 
     242            <EventId>e2108271642</EventId> 
     243            <WidgetId>w2108271642</WidgetId> 
    244244            <Type>SYSTEM INTERACTION</Type> 
    245245            <Initial>true</Initial> 
     
    279279        </Event> 
    280280        <Event> 
    281             <EventId>e2693670138</EventId> 
    282             <WidgetId>w2693670138</WidgetId> 
     281            <EventId>e3513163942</EventId> 
     282            <WidgetId>w3513163942</WidgetId> 
    283283            <Type>EXPAND</Type> 
    284284            <Initial>true</Initial> 
     
    877877        </Event> 
    878878        <Event> 
    879             <EventId>e1027743708</EventId> 
    880             <WidgetId>w1027743708</WidgetId> 
     879            <EventId>e1152438296</EventId> 
     880            <WidgetId>w1152438296</WidgetId> 
    881881            <Type>EXPAND</Type> 
    882882            <Initial>true</Initial> 
     
    31103110        </Event> 
    31113111        <Event> 
    3112             <EventId>e3653656934</EventId> 
    3113             <WidgetId>w3653656934</WidgetId> 
     3112            <EventId>e881280722</EventId> 
     3113            <WidgetId>w881280722</WidgetId> 
    31143114            <Type>TERMINAL</Type> 
    31153115            <Initial>false</Initial> 
     
    31183118        </Event> 
    31193119        <Event> 
    3120             <EventId>e4199161516</EventId> 
    3121             <WidgetId>w4199161516</WidgetId> 
     3120            <EventId>e1426785304</EventId> 
     3121            <WidgetId>w1426785304</WidgetId> 
    31223122            <Type>TERMINAL</Type> 
    31233123            <Initial>false</Initial> 
  • trunk/quest-plugin-jfc/data/guimappings/guimapping-freemind.txt

    r797 r806  
    1313freemind.controller.MenuBar = de.ugoe.cs.quest.plugin.jfc.guimodel.JFCMenuBar 
    1414freemind.view.mindmapview.ForkMainView = de.ugoe.cs.quest.plugin.jfc.guimodel.JFCGUIElement 
     15freemind.modes.FreeMindJFileDialog = de.ugoe.cs.quest.plugin.jfc.guimodel.JFCGUIElement 
  • trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/JFCReplayIDCalculator.java

    r796 r806  
    3030         
    3131        static final int prime = 31; 
     32        private JFCReplayIDValidator validator; 
     33         
     34        public JFCReplayIDCalculator() { 
     35                this.validator = null; 
     36        } 
     37         
     38        public JFCReplayIDCalculator(JFCReplayIDValidator validator){ 
     39                this.validator = validator; 
     40        } 
    3241         
    3342        /** 
     
    7382           long propagatedHashCode = windowHashCode; 
    7483            
    75            // construct looks complicated but avoids going back and force through path 
     84           // added validator to check if generated component ids are known 
     85           if (validator != null){ 
     86                   if (validator.validateReplayID("w" + windowHashCode)){ 
     87                           System.out.println("ID w" + windowHashCode + " is valid."); 
     88                   } 
     89                   else{ 
     90                           System.err.println(currentSpec + " describes an unknown component."); 
     91                           System.err.println("ID w" + windowHashCode + " is unknown." ); 
     92                           System.err.println(); 
     93                   } 
     94                            
     95           } 
     96            
     97           // construct looks complicated but avoids going back and forth through path 
    7698           if (iterator.hasNext()) 
    7799                   currentSpec = iterator.next(); 
    78            else 
     100           else{ 
    79101                   currentSpec = null; 
     102                   // there are no subcomponents, so we use windowHashCode as hashCode 
     103                   hashCode = windowHashCode; 
     104           } 
    80105 
    81106           // walk through component path and calculate hashcode 
     
    84109                   hashCode = propagatedHashCode * prime + localHashCode; 
    85110                   hashCode = (hashCode * 2) & 0xffffffffL; 
     111                    
     112                   // added validator to check if generated component ids are known 
     113                   if (validator != null){ 
     114                           if (validator.validateReplayID("w" + hashCode)){ 
     115                                   System.out.println("ID w" + hashCode + " is valid."); 
     116                           } 
     117                           else{ 
     118                                    System.err.println(currentSpec + " describes an unknown component."); 
     119                                        System.err.println("ID w" + hashCode + " is unknown." ); 
     120                                        System.err.println(); 
     121                           } 
     122                   } 
    86123 
    87124                   if (iterator.hasNext()){ 
     
    111148                 
    112149                IEventTarget target = event.getTarget(); 
    113                 JFCGUIElement jfcTarget = (JFCGUIElement) target; 
     150                if (!target.getPlatform().equals("JFC")){ 
     151                        throw new IllegalArgumentException("Event target must be of type JFC."); 
     152                } 
     153                 
     154                JFCGUIElement currentTarget = (JFCGUIElement) target; 
    114155                 
    115156                // extract element path 
    116                 JFCGUIElement currentTarget = jfcTarget; 
    117157                while (currentTarget != null){ 
    118158                        JFCGUIElementSpec currentSpec = (JFCGUIElementSpec) currentTarget.getSpecification(); 
     159                         
     160                        // new specification must be inserted at the beginning of the list 
    119161                        guiElementPath.add(0, currentSpec); 
    120162                        currentTarget = (JFCGUIElement) currentTarget.getParent(); 
Note: See TracChangeset for help on using the changeset viewer.