Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.ua.tests/intro/org/eclipse/ua/tests/intro/parser/PlatformTest.java')
-rw-r--r--org.eclipse.ua.tests/intro/org/eclipse/ua/tests/intro/parser/PlatformTest.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/org.eclipse.ua.tests/intro/org/eclipse/ua/tests/intro/parser/PlatformTest.java b/org.eclipse.ua.tests/intro/org/eclipse/ua/tests/intro/parser/PlatformTest.java
new file mode 100644
index 000000000..e178c31ca
--- /dev/null
+++ b/org.eclipse.ua.tests/intro/org/eclipse/ua/tests/intro/parser/PlatformTest.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ua.tests.intro.parser;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.ua.tests.intro.util.IntroModelSerializer;
+import org.eclipse.ua.tests.intro.util.IntroModelSerializerTest;
+import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
+import org.eclipse.ua.tests.util.FileUtil;
+import org.eclipse.ua.tests.util.ResourceFinder;
+import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot;
+import org.eclipse.ui.internal.intro.impl.model.loader.ExtensionPointManager;
+import org.osgi.framework.Bundle;
+
+/*
+ * Tests the intro parser on valid intro content.
+ */
+public class PlatformTest extends TestCase {
+
+ private static final String SERIALIZED_PATH = "data/intro/platform/serialized.txt";
+
+ /*
+ * Returns an instance of this Test.
+ */
+ public static Test suite() {
+ return new TestSuite(PlatformTest.class);
+ }
+
+ /*
+ * Test the platform's parsed intro content.
+ */
+ public void testModel() {
+ IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.ui.intro.config");
+ Assert.assertEquals("The platform did not have the expected number of \"org.eclipse.ui.intro.config\" extensions.", 1, elements.length);
+
+ IConfigurationElement element = elements[0];
+
+ String pluginRoot = ResourceFinder.findFile(UserAssistanceTestPlugin.getDefault(), "/").toString().substring("file:".length());
+ String content = element.getAttribute("content");
+ String id = element.getAttribute("id");
+ String resultFile = pluginRoot + SERIALIZED_PATH;
+
+ IntroModelRoot model = ExtensionPointManager.getInst().getModel(id);
+ IntroModelSerializer serializer = new IntroModelSerializer(model);
+
+ try {
+ String expected = FileUtil.getContents(resultFile);
+ String actual = serializer.toString();
+ StringTokenizer tok1 = new StringTokenizer(expected, "\n");
+ StringTokenizer tok2 = new StringTokenizer(actual, "\n");
+
+ /*
+ * Report the line number and line text where it didn't match,
+ * as well as the extension id and expected results file.
+ */
+ int tokenNumber = 0;
+ while (tok1.hasMoreTokens() && tok2.hasMoreTokens()) {
+ String a = tok1.nextToken();
+ String b = tok2.nextToken();
+ Assert.assertEquals("Serialized intro content model text for \"" + id + "\" did not match expected result (" + IntroModelSerializerTest.getResultFile(content) + "). First difference occured on token " + tokenNumber + ".", a, b);
+ ++tokenNumber;
+ }
+ }
+ catch(Exception e) {
+ Assert.fail("An error occured while loading expected result file for intro at: " + resultFile);
+ }
+ }
+
+ /*
+ * Some extensions run samples that involve executing code. Check to make sure
+ * that the classes exist and can be instantiated.
+ */
+ public void testClasses() {
+ String pluginRoot = ResourceFinder.findFile(UserAssistanceTestPlugin.getDefault(), "/").toString().substring("file:".length());
+ String resultFile = pluginRoot + SERIALIZED_PATH;
+
+ try {
+ String contents = FileUtil.getContents(resultFile);
+ StringTokenizer tok = new StringTokenizer(contents);
+ while (tok.hasMoreTokens()) {
+ String next = tok.nextToken();
+ if (next.startsWith("http://org.eclipse.ui.intro/runAction?")) {
+ Map map = createMap(next.substring("http://org.eclipse.ui.intro/runAction?".length()));
+ Assert.assertTrue("The runAction was missing the class attribute: " + next, map.containsKey("class"));
+ Assert.assertTrue("The runAction was missing the pluginId attribute: " + next, map.containsKey("pluginId"));
+
+ String clazz = (String)map.get("class");
+ String pluginId = (String)map.get("pluginId");
+
+ Bundle bundle = Platform.getBundle(pluginId);
+ Assert.assertNotNull("The plugin referenced in one of the platform's intro runAction URLs (" + next + ") was not found: " + pluginId, bundle);
+
+ try {
+ Class c = bundle.loadClass(clazz);
+ c.newInstance();
+ }
+ catch (ClassNotFoundException e) {
+ Assert.fail("One of the classes in the platform's intro runActions URLs was not found: " + clazz + " in plugin: " + pluginId);
+ }
+ catch (InstantiationException e) {
+ Assert.fail("One of the classes in the platform's intro runActions URLs could not be instantiated: " + clazz + " in plugin: " + pluginId);
+ }
+ catch (IllegalAccessException e) {
+ Assert.fail("One of the classes in the platform's intro runActions URLs could not be accessed (is it public?): " + clazz + " in plugin: " + pluginId);
+ }
+ }
+ }
+ }
+ catch (IOException e) {
+ Assert.fail("An IOException occured while reading platform's serialized.txt file");
+ }
+ }
+
+ /*
+ * Generates a map from the given string of the form:
+ * "key1=value1&key2=value2&..." (i.e. URL parameters)
+ */
+ private static Map createMap(String args) {
+ Map map = new HashMap();
+ StringTokenizer tok2 = new StringTokenizer(args, "&");
+ while (tok2.hasMoreTokens()) {
+ String arg = tok2.nextToken();
+ int separator = arg.indexOf('=');
+ map.put(arg.substring(0, separator), arg.substring(separator + 1));
+ }
+ return map;
+ }
+}

Back to the top