blob: d2acd66491a5bce3c118c0382a5ee0531d3a4797 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 - 2006 University Of British Columbia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* University Of British Columbia - initial API and implementation
*******************************************************************************/
package org.eclipse.mylar.core.tests;
import java.io.File;
import org.eclipse.core.runtime.Path;
import org.eclipse.mylar.core.tests.support.DomContextReader;
import org.eclipse.mylar.core.tests.support.DomContextWriter;
import org.eclipse.mylar.core.tests.support.FileTool;
import org.eclipse.mylar.internal.core.MylarContext;
import org.eclipse.mylar.internal.core.MylarContextExternalizer;
import org.eclipse.mylar.internal.core.ScalingFactors;
import org.eclipse.mylar.internal.core.util.SaxContextReader;
import org.eclipse.mylar.provisional.core.IMylarElement;
import org.eclipse.mylar.provisional.core.IMylarRelation;
/**
* @author Mik Kersten
*/
public class ContextExternalizerTest extends AbstractContextTest {
private MylarContext context;
private ScalingFactors scaling;
@Override
protected void setUp() throws Exception {
super.setUp();
scaling = new ScalingFactors();
context = new MylarContext("context-externalization", new ScalingFactors());
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testSaxExternalizationAgainstDom() {
File file = FileTool.getFileInPlugin(MylarCoreTestsPlugin.getDefault(), new Path(
"testdata/externalizer/testcontext.xml"));
assertTrue(file.getAbsolutePath(), file.exists());
MylarContextExternalizer externalizer = new MylarContextExternalizer();
externalizer.setReader(new DomContextReader());
MylarContext domReadContext = externalizer.readContextFromXML("handle", file);
externalizer.setReader(new SaxContextReader());
MylarContext saxReadContext = externalizer.readContextFromXML("handle", file);
assertEquals(284, saxReadContext.getInteractionHistory().size()); // known
// from
// testdata
assertEquals(domReadContext, saxReadContext);
externalizer.setWriter(new DomContextWriter());
File domOut = new File("dom-out.xml");
domOut.deleteOnExit();
externalizer.writeContextToXML(saxReadContext, domOut);
externalizer.setWriter(new DomContextWriter());
File saxOut = new File("sax-out.xml");
saxOut.deleteOnExit();
externalizer.writeContextToXML(saxReadContext, saxOut);
assertEquals(domOut.length(), saxOut.length());
externalizer.setReader(new DomContextReader());
MylarContext domReadAfterWrite = externalizer.readContextFromXML("handle", file);
externalizer.setReader(new SaxContextReader());
MylarContext saxReadAfterWrite = externalizer.readContextFromXML("handle", file);
assertEquals(domReadAfterWrite, saxReadAfterWrite);
}
public void testContextSize() {
MylarContextExternalizer externalizer = new MylarContextExternalizer();
String path = "extern.xml";
File file = new File(path);
file.deleteOnExit();
int ORIGINAL = 100;
for (int i = 0; i < ORIGINAL; i++) {
context.parseEvent(mockSelection("1"));
context.parseEvent(mockPreferenceChange("2"));
}
context.collapse();
externalizer.writeContextToXML(context, file);
long size = file.length();
context.reset();
for (int i = 0; i < ORIGINAL * ORIGINAL; i++) {
context.parseEvent(mockSelection("1"));
context.parseEvent(mockPreferenceChange("2"));
}
context.collapse();
externalizer.writeContextToXML(context, file);
long size2 = file.length();
assertTrue(size <= size2 * 2);
}
public void testExternalization() {
MylarContextExternalizer externalizer = new MylarContextExternalizer();
String path = "extern.xml";
File file = new File(path);
file.deleteOnExit();
IMylarElement node = context.parseEvent(mockSelection("1"));
context.parseEvent(mockNavigation("2"));
IMylarRelation edge = node.getRelation("2");
assertNotNull(edge);
assertEquals(1, node.getRelations().size());
context.parseEvent(mockInterestContribution("3", scaling.getLandmark() + scaling.getDecay().getValue() * 3));
assertTrue("interest: " + context.get("3").getInterest().getValue(), context.get("3").getInterest()
.isLandmark());
float doi = node.getInterest().getValue();
assertNotNull(context.getLandmarks());
// "3" not a user event
assertEquals("2", context.getActiveNode().getHandleIdentifier());
externalizer.writeContextToXML(context, file);
MylarContext loaded = externalizer.readContextFromXML("handle", file);
assertNotNull(loaded);
assertEquals(3, loaded.getInteractionHistory().size());
IMylarElement loadedNode = loaded.get("1");
IMylarRelation edgeNode = loadedNode.getRelation("2");
assertNotNull(edgeNode);
assertEquals(1, loadedNode.getRelations().size());
IMylarElement landmark = loaded.get("3");
assertNotNull(loadedNode);
assertEquals(doi, loadedNode.getInterest().getValue());
assertTrue(landmark.getInterest().isLandmark());
assertNotNull(loaded.getLandmarks());
assertEquals("2", loaded.getActiveNode().getHandleIdentifier());
}
}