blob: b74e47dc67655c870ad59a9723213f317bbcc7fe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.api.tools.anttasks.tests;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class ApiToolingApiuseAntTaskTests extends AntRunnerTestCase {
@Override
public String getTestResourcesFolder() {
return "apitooling.apiuse/"; //$NON-NLS-1$
}
private IFolder runTaskAndVerify(String resourceName) throws Exception, CoreException, ParserConfigurationException, SAXException, IOException {
IFolder buildFolder = newTest(getTestResourcesFolder(), new String[] {
resourceName, "profile" }); //$NON-NLS-1$
String buildXMLPath = buildFolder.getFile("build.xml").getLocation().toOSString(); //$NON-NLS-1$
Properties properties = new Properties();
properties.put("baseline_location", buildFolder.getFile("OSGiProduct.zip").getLocation().toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
properties.put("report_location", buildFolder.getLocation().append("report").toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
properties.put("filter_location", buildFolder.getLocation().toOSString()); //$NON-NLS-1$
runAntScript(buildXMLPath, new String[] { "run" }, buildFolder.getLocation().toOSString(), properties); //$NON-NLS-1$
assertFalse("allNonApiBundles must not exist", buildFolder.getFolder("allNonApiBundles").exists()); //$NON-NLS-1$ //$NON-NLS-2$
IFolder reportFolder = buildFolder.getFolder("report"); //$NON-NLS-1$
assertTrue("report folder must exist", reportFolder.exists()); //$NON-NLS-1$
assertTrue("xml folder must exist", reportFolder.exists()); //$NON-NLS-1$
assertTrue("meta.xml must exist", reportFolder.getFile("meta.xml").exists()); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("not_searched.xml must exist", reportFolder.getFile("not_searched.xml").exists()); //$NON-NLS-1$ //$NON-NLS-2$
return reportFolder;
}
@Test
public void test1() throws Exception {
IFolder reportFolder = runTaskAndVerify("test1"); //$NON-NLS-1$
InputSource is = new InputSource(reportFolder.getFile("not_searched.xml").getContents()); //$NON-NLS-1$
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(is);
NodeList elems = doc.getElementsByTagName("component"); //$NON-NLS-1$
for (int index = 0; index < elems.getLength(); ++index) {
String value = elems.item(index).getAttributes().getNamedItem("id").getNodeValue(); //$NON-NLS-1$
boolean pass = false;
if (value.startsWith("org.eclipse.osgi") || value.contains("illegaluse") || value.contains("oldstyle")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
pass = true;
}
assertTrue(value + " should have been filtered out.", pass); //$NON-NLS-1$
}
}
@Test
public void test2() throws Exception {
IFolder reportFolder = runTaskAndVerify("test2"); //$NON-NLS-1$
IResource[] members = reportFolder.members();
boolean valid = false;
boolean validDir = false;
for (IResource member : members) {
if (!member.getLocation().toFile().isDirectory()) {
continue;
}
valid = member.getName().startsWith("org.example"); //$NON-NLS-1$
assertTrue(member.getName() + " should have been filtered out", valid); //$NON-NLS-1$
File[] dirs = member.getLocation().toFile().listFiles();
for (File dir : dirs) {
validDir = dir.getName().startsWith("org.example"); //$NON-NLS-1$
assertTrue(dir.getName() + " should have been filtered out", validDir); //$NON-NLS-1$
}
}
assertTrue("None of the example plug-ins were scanned", valid); //$NON-NLS-1$
assertTrue("None of the example plug-ins were scanned", validDir); //$NON-NLS-1$
}
@Test
public void test3() throws Exception {
IFolder reportFolder = runTaskAndVerify("test3"); //$NON-NLS-1$
IResource[] members = reportFolder.members();
boolean valid = false;
boolean validDir = false;
for (IResource member : members) {
if (!member.getLocation().toFile().isDirectory()) {
continue;
}
valid = member.getName().startsWith("org.example"); //$NON-NLS-1$
assertTrue(member.getName() + " should have been filtered out", valid); //$NON-NLS-1$
File[] dirs = member.getLocation().toFile().listFiles();
for (File dir : dirs) {
validDir = dir.getName().startsWith("org.example"); //$NON-NLS-1$
assertTrue(dir.getName() + " should have been filtered out", validDir); //$NON-NLS-1$
}
}
assertTrue("None of the example plug-ins were scanned", valid); //$NON-NLS-1$
assertTrue("None of the example plug-ins were scanned", validDir); //$NON-NLS-1$
}
/**
* Tests that a use scan will find illegal use problems that can be filtered
*
* @throws Exception
*/
@Test
public void testIllegalUse() throws Exception {
IFolder reportFolder = runTaskAndVerify("testIllegalUse"); //$NON-NLS-1$
IResource[] members = reportFolder.members();
boolean valid = false;
boolean validDir = false;
for (IResource member : members) {
if (!member.getLocation().toFile().isDirectory()) {
continue;
}
valid = member.getName().startsWith("org.eclipse.osgi"); //$NON-NLS-1$
assertTrue(member.getName() + " should have been filtered out", valid); //$NON-NLS-1$
File[] dirs = member.getLocation().toFile().listFiles();
for (File dir : dirs) {
validDir = dir.getName().startsWith("org.example.test.illegaluse"); //$NON-NLS-1$
assertTrue(dir.getName() + " should have been filtered out", validDir); //$NON-NLS-1$
}
}
// This test is not working properly, see Bug 405302
// assertTrue("The illegal use plug-in was not scanned", valid);
// assertTrue("The illegal use plug-in was not scanned", validDir);
}
/**
* Tests that a use scan will find illegal use problems that can be filtered
*
* @throws Exception
*/
@Test
public void testIllegalUseFiltered() throws Exception {
IFolder reportFolder = runTaskAndVerify("testIllegalUseFiltered"); //$NON-NLS-1$
IResource[] members = reportFolder.members();
for (IResource member : members) {
if (member.getLocation().toFile().isDirectory()) {
fail(member.getName() + " should have been filtered using a .api_filters file"); //$NON-NLS-1$
}
}
}
}