/*******************************************************************************
* Copyright (c) 2007-2010 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.ui.test;
import java.util.StringTokenizer;
import junit.framework.TestCase;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.PlatformUI;
import org.jboss.tools.jst.web.ui.navigator.WebProjectsNavigator;
import org.jboss.tools.test.util.JobUtils;
import org.jboss.tools.test.util.ProjectImportTestSetup;
/**
*
* @author yzhishko
*
*/
public class TaglibXMLUnformatedDTD_JBIDE5642 extends TestCase {
private static final String PROJECT_NAME = "TestWizards"; //$NON-NLS-1$
private static final String WEB_PROJECTS_VIEW_ID = "org.jboss.tools.jst.web.ui.navigator.WebProjectsView"; //$NON-NLS-1$
private static final String LIB_PATH = "/Tag Libraries/"; //$NON-NLS-1$
private static final String LIB_NAME_P = "primefaces-p.taglib.xml - primefaces-4.0.jar"; //$NON-NLS-1$
private IViewPart webProjectsView;
private IProject project = null;
public TaglibXMLUnformatedDTD_JBIDE5642(String name) {
super(name);
}
public void testTaglibXMLUnformatedDTD() throws Throwable {
webProjectsView = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().showView(WEB_PROJECTS_VIEW_ID);
assertNotNull("Web Projects view is not available", webProjectsView); //$NON-NLS-1$
TestUtil.delay(2000);
TestUtil.waitForIdle();
WebProjectsNavigator projectsNavigator = (WebProjectsNavigator) webProjectsView;
TreeViewer treeViewer = projectsNavigator.getViewer();
assertNotNull(treeViewer);
String taglibName = PROJECT_NAME + LIB_PATH + LIB_NAME_P;
Object testLibP = findElementByPath(taglibName, treeViewer);
assertNotNull("The tag library [" + LIB_NAME_P + "] was not found", //$NON-NLS-1$ //$NON-NLS-2$
testLibP);
}
private Object findElementByPath(String path, final TreeViewer searchTreeViwer) {
Tree searchTree = searchTreeViwer.getTree();
if (searchTree == null || path == null) {
return null;
}
StringTokenizer tokenizer = new StringTokenizer(path, "/", false); //$NON-NLS-1$
TreeItem childItem = getItemByName(tokenizer.nextToken(), searchTree);
if (childItem != null) {
searchTreeViwer.expandToLevel(childItem.getData(), 1);
} else {
return null;
}
while (tokenizer.hasMoreTokens()) {
childItem = getItemByName(tokenizer.nextToken(), childItem);
if (childItem != null) {
searchTreeViwer.expandToLevel(childItem.getData(), 1);
} else {
return null;
}
}
return childItem.getData();
}
private TreeItem getItemByName(String elementName, Widget rootItem) {
if (rootItem == null || elementName == null) {
return null;
}
TreeItem[] children = null;
if (rootItem instanceof Tree) {
children = ((Tree) rootItem).getItems();
} else if (rootItem instanceof TreeItem) {
children = ((TreeItem) rootItem).getItems();
}
if (children == null) {
return null;
}
for (int i = 0; i < children.length; i++) {
if (elementName.equals(children[i].getText())) {
return children[i];
}
}
return null;
}
@Override
protected void setUp() throws Exception {
super.setUp();
JobUtils.waitForIdle();
IResource project = ResourcesPlugin.getWorkspace().getRoot().findMember(PROJECT_NAME);
if(project == null) {
ProjectImportTestSetup setup = new ProjectImportTestSetup(
this,
"org.jboss.tools.jsf.ui.test", //$NON-NLS-1$
"projects/" + PROJECT_NAME, //$NON-NLS-1$
PROJECT_NAME);
project = setup.importProject();
}
this.project = project.getProject();
this.project.build(IncrementalProjectBuilder.FULL_BUILD, null);
JobUtils.waitForIdle();
}
}