// Copyright 2012 Georg-August-Universität Göttingen, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package de.ugoe.cs.autoquest.plugin.jfc;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
import de.ugoe.cs.autoquest.eventcore.Event;
import de.ugoe.cs.autoquest.eventcore.IEventTarget;
import de.ugoe.cs.autoquest.eventcore.IEventType;
import de.ugoe.cs.autoquest.plugin.jfc.JFCLogParser;
import de.ugoe.cs.autoquest.plugin.jfc.JFCReplayIDCalculator;
import de.ugoe.cs.autoquest.plugin.jfc.JFCReplayIDValidator;
import de.ugoe.cs.autoquest.plugin.jfc.eventcore.JFCEventId;
import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCGUIElement;
import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCGUIElementSpec;
import de.ugoe.cs.util.console.TextConsole;
/**
* The class EFGReplayIDCalculatorTest
contains tests for the class
* {@link EFGReplayIDCalculator
}
*
* @pattern JUnit Test Case
*
* @author fabian.glaser
*
* @version $Revision$
*/
public class JFCReplayIDCalculatorTest extends TestCase {
Set knownIDs = new HashSet();
/**
* Construct new test instance
*
* @param name the test name
*/
public JFCReplayIDCalculatorTest(String name) {
super(name);
}
/**
* Run the String calculateReplayID(JFCEvent) method test.
*
* @throws Exception
*
* @generatedBy CodePro at 7/30/12 4:58 PM
*/
@Test
public void testCalculateReplayIDwithEvent()
throws Exception {
Collection ignoredEvents = new HashSet();
ignoredEvents.add(JFCEventId.FOCUS_GAINED);
JFCLogParser parser = new JFCLogParser(ignoredEvents);
parser.parseFile(new File(ClassLoader.getSystemResource("freemind_trace.xml").getFile()));
Collection> sequences = parser.getSequences();
Event event = sequences.iterator().next().get(0);
String result = new JFCReplayIDCalculator().calculateReplayID(event);
assertEquals("e3561778462", result);
}
/**
* Run the String calculateReplayID(List) method test.
*
* @throws Exception
*/
@Test
public void testCalculateReplayIDwithGuiElementPath()
throws Exception {
Collection ignoredEvents = new HashSet();
ignoredEvents.add(JFCEventId.FOCUS_GAINED);
JFCLogParser parser = new JFCLogParser(ignoredEvents);
parser.parseFile(new File(ClassLoader.getSystemResource("freemind_trace.xml").getFile()));
Collection> sequences = parser.getSequences();
Event event = sequences.iterator().next().get(0);
List guiElementPath = new ArrayList();
IEventTarget target = event.getTarget();
JFCGUIElement jfcTarget = (JFCGUIElement) target;
// extract element path
JFCGUIElement currentTarget = jfcTarget;
while (currentTarget != null){
JFCGUIElementSpec currentSpec = (JFCGUIElementSpec) currentTarget.getSpecification();
guiElementPath.add(0, currentSpec);
currentTarget = (JFCGUIElement) currentTarget.getParent();
}
String result = new JFCReplayIDCalculator().calculateReplayID(guiElementPath);
assertEquals("e3561778462", result);
}
/**
* Method to test if calculated IDs are included in guitar efg file.
* If not more than 75 % can be matched, test fails.
*
* @throws Exception
*/
@Test
public void testCalculateReplayIDAllEvents()
throws Exception {
// generate list of known replayIDs from guitar efg file
File guiFile = new File(ClassLoader.getSystemResource("freemind.xml").getFile());
JFCReplayIDValidator validator = new JFCReplayIDValidator(guiFile);
// calculate replayIDs from trace file
Collection ignoredEvents = new HashSet();
ignoredEvents.add(JFCEventId.FOCUS_GAINED);
JFCLogParser parser = new JFCLogParser(ignoredEvents);
parser.parseFile(new File(ClassLoader.getSystemResource("freemind_trace3_corrected.xml").getFile()));
JFCReplayIDCalculator calculator = new JFCReplayIDCalculator(validator);
Set generatedIDs = new HashSet();
Collection> sequences = parser.getSequences();
assertTrue(sequences.size() > 0);
Set seenEvents = new HashSet();
for (List currentSequence: sequences){
seenEvents.addAll(currentSequence);
}
for (Event currentEvent: seenEvents){
String replayID = calculator.calculateReplayID(currentEvent);
generatedIDs.add(replayID);
System.out.println("Generated ID: " + replayID);
System.out.println();
}
System.out.println();
// check if generatedIDs are known
int known = 0;
for (String replayID: generatedIDs){
if (validator.validateReplayID("w" + replayID.substring(1))){
System.out.println(replayID + "\t is known.");
known++;
}
else
System.out.println(replayID + "\t is unknown.");
}
System.out.println();
float percentage = (float) known/generatedIDs.size()*100;
System.out.println(percentage + "% of the generated IDs are known.");
//TODO clarify why the percentage is not reached: assertTrue(percentage > 75);
}
/**
* Method to test if calculated IDs are included in guitar efg file.
* If not more than 75 % can be matched, test fails.
*
* @throws Exception
*/
@Test
public void testCalculateReplayIDAllEventsArgo()
throws Exception {
// generate list of known replayIDs from guitar efg file
File guiFile = new File(ClassLoader.getSystemResource("argo.xml").getFile());
JFCReplayIDValidator validator = new JFCReplayIDValidator(guiFile);
// calculate replayIDs from trace file
Collection ignoredEvents = new HashSet();
ignoredEvents.add(JFCEventId.FOCUS_GAINED);
JFCLogParser parser = new JFCLogParser(ignoredEvents);
parser.parseFile(new File(ClassLoader.getSystemResource("argouml_trace1_corrected.xml").getFile()));
JFCReplayIDCalculator calculator = new JFCReplayIDCalculator(validator);
Set generatedIDs = new HashSet();
Collection> sequences = parser.getSequences();
assertTrue(sequences.size() > 0);
Set seenEvents = new HashSet();
for (List currentSequence: sequences){
seenEvents.addAll(currentSequence);
}
for (Event currentEvent: seenEvents){
String replayID = calculator.calculateReplayID(currentEvent);
generatedIDs.add(replayID);
System.out.println("Generated ID: " + replayID);
System.out.println();
}
System.out.println();
// check if generatedIDs are known
int known = 0;
for (String replayID: generatedIDs){
if (validator.validateReplayID("w" + replayID.substring(1))){
System.out.println(replayID + "\t is known.");
known++;
}
else
System.out.println(replayID + "\t is unknown.");
}
System.out.println();
float percentage = (float) known/generatedIDs.size()*100;
System.out.println(percentage + "% of the generated IDs are known.");
//TODO clarify why the percentage is not reached: assertTrue(percentage > 75);
}
/**
* Method to test if calculateReplayID throws the right exception when
* it is called with a target of the wrong type.
*/
@Test
public void testCalculateReplayIDIllegalArgumentException(){
try{
JFCReplayIDCalculator calculator = new JFCReplayIDCalculator();
Event event = new Event(mock(IEventType.class), mock(IEventTarget.class));
calculator.calculateReplayID(event);
fail("Expected IllegalArgumentException!");
}
catch(IllegalArgumentException e){
System.out.println("Expected exception thrown.");
}
}
/**
* Perform pre-test initialization.
*
* @throws Exception
* if the initialization fails for some reason
*
* @generatedBy CodePro at 7/30/12 4:58 PM
*/
@Before
public void setUp()
throws Exception {
new TextConsole(Level.FINEST);
}
/**
* Perform post-test clean-up.
*
* @throws Exception
* if the clean-up fails for some reason
*
* @generatedBy CodePro at 7/30/12 4:58 PM
*/
@After
public void tearDown()
throws Exception {
// Add additional tear down code here
}
/**
* Launch the test.
*
* @param args the command line arguments
*
* @generatedBy CodePro at 7/30/12 4:58 PM
*/
public static void main(String[] args) {
new org.junit.runner.JUnitCore().run(JFCReplayIDCalculatorTest.class);
}
}
/*$CPS$ This comment was generated by CodePro. Do not edit it.
* patternId = com.instantiations.assist.eclipse.pattern.testCasePattern
* strategyId = com.instantiations.assist.eclipse.pattern.testCasePattern.junitTestCase
* additionalTestNames =
* assertTrue = false
* callTestMethod = true
* createMain = false
* createSetUp = false
* createTearDown = false
* createTestFixture = false
* createTestStubs = false
* methods =
* package = de.ugoe.cs.eventbench.efg
* package.sourceFolder = EventBenchConsoleTest/src
* superclassType = junit.framework.TestCase
* testCase = EFGEventIDCalculatorTest
* testClassType = de.ugoe.cs.eventbench.efg.EFGEventIDCalculator
*/