Adding test plugin for the design time appmanager framework.
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.classpath b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.cvsignore b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.project b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.project
new file mode 100644
index 0000000..b9c0cfc
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.jst.jsf.designtime.tests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..230a956
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DesignTime Tests Plug-in
+Bundle-SymbolicName: org.eclipse.jst.jsf.designtime.tests
+Bundle-Version: 1.0.0
+Bundle-Activator: org.eclipse.jst.jsf.designtime.tests.DesignTimeTestsPlugin
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.junit,
+ org.eclipse.jst.jsf.designtime,
+ org.eclipse.core.resources,
+ org.eclipse.jst.jsf.context.resolver,
+ org.eclipse.jst.jsf.context.resolver.structureddocument,
+ org.eclipse.jst.jsf.context.structureddocument,
+ org.eclipse.jst.jsf.test.util,
+ org.eclipse.jst.jsf.core.tests,
+ org.eclipse.jst.jsf.context.symbol
+Eclipse-LazyStart: true
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/build.properties b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/DesignTimeTestsPlugin.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/DesignTimeTestsPlugin.java
new file mode 100644
index 0000000..f446622
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/DesignTimeTestsPlugin.java
@@ -0,0 +1,52 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class DesignTimeTestsPlugin extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID 
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.jst.jsf.designtime.tests";
+
+	// The shared instance
+	private static DesignTimeTestsPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public DesignTimeTestsPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static DesignTimeTestsPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultBeanSymbolSourceProvider.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultBeanSymbolSourceProvider.java
new file mode 100644
index 0000000..c36979a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestDefaultBeanSymbolSourceProvider.java
@@ -0,0 +1,193 @@
+package org.eclipse.jst.jsf.designtime.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jst.jsf.context.symbol.internal.provisional.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.internal.provisional.source.ISymbolConstants;
+import org.eclipse.jst.jsf.core.tests.TestsPlugin;
+import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
+import org.eclipse.jst.jsf.designtime.internal.provisional.symbols.DefaultBeanSymbolSourceProvider;
+import org.eclipse.jst.jsf.test.util.JDTTestEnvironment;
+import org.eclipse.jst.jsf.test.util.ProjectTestEnvironment;
+import org.eclipse.jst.jsf.test.util.TestFileResource;
+import org.osgi.framework.Bundle;
+
+/**
+ * JUnit tests for org.eclipse.jst.jsf.designtime.DefaultBeanSymbolSourceProvider
+ * 
+ * @author cbateman
+ *
+ */
+public class TestDefaultBeanSymbolSourceProvider extends TestCase 
+{
+    private JDTTestEnvironment              _jdtTestEnvironment;
+    private JSFFacetedTestEnvironment       _jsfFactedTestEnvironment;
+    private IFile                           _facesConfigFile;
+    
+    private final static String     SRC_FOLDER_NAME = "src";
+    private final static String     PACKAGE_NAME = "com.test";
+    
+    protected void setUp() throws Exception 
+    {
+        super.setUp();
+        
+        final ProjectTestEnvironment  projectTestEnvironment = 
+            new ProjectTestEnvironment("TestDefaultBeanSymbolSourceProvider_"+getName());
+        projectTestEnvironment.createProject();
+        _facesConfigFile = (IFile) projectTestEnvironment.
+            loadResourceInWebRoot(DesignTimeTestsPlugin.getDefault().getBundle(),
+                                  "/testdata/faces-config.xml.data", 
+                                  "/WEB-INF/faces-config.xml");
+
+        _jsfFactedTestEnvironment = new JSFFacetedTestEnvironment(projectTestEnvironment);
+        _jsfFactedTestEnvironment.initialize();
+        
+        _jdtTestEnvironment = new JDTTestEnvironment(projectTestEnvironment);
+
+        loadSourceClass(TestsPlugin.getDefault().getBundle(), "/testfiles/TestBean1.java.data", "TestBean1");
+    }
+
+    protected void tearDown() throws Exception 
+    {
+        super.tearDown();
+        _jsfFactedTestEnvironment.dispose();
+        _jdtTestEnvironment.getProjectEnvironment().deleteProject();
+    }
+
+    private void loadSourceClass(final Bundle bundle, final String fileName, final String beanClassName) throws Exception
+    {
+        TestFileResource codeRes = new TestFileResource();
+        codeRes.load(bundle, fileName);
+        String code = codeRes.toString();
+        _jdtTestEnvironment.addSourceFile(SRC_FOLDER_NAME, PACKAGE_NAME, beanClassName, code);
+    }
+
+    /**
+     * Test the external sanity of the suite (i.e. that the test data is in sync)
+     */
+    public void testSanity()
+    {
+        DefaultBeanSymbolSourceProvider  provider =
+            DefaultBeanSymbolSourceProvider.getInstance();
+        
+        ISymbol[] symbol =
+            provider.getSymbols(_facesConfigFile, ISymbolConstants.SYMBOL_SCOPE_ALL);
+        
+        assertNotNull(symbol);
+        assertEquals("Check that test suite is in sync with setup()", symbol.length, 4);
+    }
+    
+    /**
+     * 
+     */
+    public void testAllScopes()
+    {
+        final String[]  names = new String[]{"myBean_request", "myBean_session", "myBean_application", "myBean_none"};
+        testScopeBeans(ISymbolConstants.SYMBOL_SCOPE_ALL, names.length, names);
+    }
+    
+    /**
+     * Check mask by request scope
+     */
+    public void testOnlyRequestBeans()
+    {
+        final String[]  names = new String[]{"myBean_request"};
+        testScopeBeans(ISymbolConstants.SYMBOL_SCOPE_REQUEST, names.length, names);
+    }
+    
+    /**
+     * Check mask by Session scope
+     */
+    public void testOnlySessionBeans()
+    {
+        final String[]  names = new String[]{"myBean_session"};
+        testScopeBeans(ISymbolConstants.SYMBOL_SCOPE_SESSION, names.length, names);
+    }
+    
+    /**
+     * Check mask by Application scope
+     */
+    public void testOnlyApplicationBeans()
+    {
+        final String[]  names = new String[]{"myBean_application"};
+        testScopeBeans(ISymbolConstants.SYMBOL_SCOPE_APPLICATION, names.length, names);
+    }
+    /**
+     * Check mask by None scope
+     */
+    public void testOnlyNoneBeans()
+    {
+        final String[]  names = new String[]{"myBean_none"};
+        testScopeBeans(ISymbolConstants.SYMBOL_SCOPE_NONE, names.length, names);
+    }
+
+    private void testScopeBeans(int scope, int expectedSize, String[] expectedNames)
+    {
+        DefaultBeanSymbolSourceProvider  provider =
+            DefaultBeanSymbolSourceProvider.getInstance();
+        
+        ISymbol[] symbols =
+            provider.getSymbols(_facesConfigFile, scope);
+        
+        assertEquals(expectedSize, symbols.length);
+        
+        for (int j = 0; j < expectedNames.length; j++)
+        {
+            final String expectedName = expectedNames[j];
+            assertNotNull(expectedName);
+            boolean found = false;
+            
+            FIND_IN_SYMBOLS:
+            for (int i = 0; i < symbols.length; i++)
+            {
+                if (expectedName.equals(symbols[i].getName()))
+                {
+                    found = true;
+                    break FIND_IN_SYMBOLS;
+                }
+            }
+            
+            assertTrue(found);
+        }
+    }
+    
+    /**
+     * Test the get symbol by prefix
+     */
+    public void testPrefixSearch()
+    {
+        DefaultBeanSymbolSourceProvider  provider =
+            DefaultBeanSymbolSourceProvider.getInstance();
+        
+        ISymbol[] symbols =
+            provider.getSymbols("myBean_n", _facesConfigFile, ISymbolConstants.SYMBOL_SCOPE_ALL);
+
+        assertEquals(1, symbols.length);
+        assertEquals("myBean_none", symbols[0].getName());
+    }
+    
+    /**
+     * Test getting a symbol it's name
+     */
+    public void testGetSymbolByName()
+    {
+        testGetSymbolByName("myBean_none");
+        testGetSymbolByName("myBean_application");
+        testGetSymbolByName("myBean_session");
+        testGetSymbolByName("myBean_request");
+    }
+    
+    private void testGetSymbolByName(final String expectedName)
+    {
+        DefaultBeanSymbolSourceProvider  provider =
+            DefaultBeanSymbolSourceProvider.getInstance();
+
+        ISymbol symbol = 
+            provider.getSymbol(expectedName, _facesConfigFile, 
+                                ISymbolConstants.SYMBOL_SCOPE_ALL);
+        
+        assertNotNull(symbol);
+        assertEquals(expectedName, symbol.getName());
+    }
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/faces-config.xml.data b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/faces-config.xml.data
new file mode 100644
index 0000000..fab426b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/testdata/faces-config.xml.data
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE faces-config PUBLIC
+    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+	<managed-bean>
+		<managed-bean-name>myBean_none</managed-bean-name>
+		<managed-bean-class>com.test.TestBean1</managed-bean-class>
+		<managed-bean-scope>none</managed-bean-scope>
+	</managed-bean>
+
+	<managed-bean>
+		<managed-bean-name>myBean_request</managed-bean-name>
+		<managed-bean-class>com.test.TestBean1</managed-bean-class>
+		<managed-bean-scope>request</managed-bean-scope>
+	</managed-bean>
+
+	<managed-bean>
+		<managed-bean-name>myBean_session</managed-bean-name>
+		<managed-bean-class>com.test.TestBean1</managed-bean-class>
+		<managed-bean-scope>session</managed-bean-scope>
+	</managed-bean>
+
+	<managed-bean>
+		<managed-bean-name>myBean_application</managed-bean-name>
+		<managed-bean-class>com.test.TestBean1</managed-bean-class>
+		<managed-bean-scope>application</managed-bean-scope>
+		<description>This is my description of myBean_application</description>
+	</managed-bean>
+</faces-config>