blob: 87996241de6717dce921e6fbb3025b39b0c3c7aa [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.api.java.platform;
import java.beans.PropertyChangeListener;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.java.platform.FallbackDefaultJavaPlatform;
import org.netbeans.modules.java.platform.implspi.JavaPlatformProvider;
import org.netbeans.spi.java.classpath.PathResourceImplementation;
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
import org.openide.filesystems.FileObject;
import org.openide.modules.SpecificationVersion;
import org.openide.util.test.MockLookup;
/**
* @author Tomas Zezula, Jesse Glick
*/
public class JavaPlatformManagerTest extends NbTestCase {
public JavaPlatformManagerTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
super.setUp();
MockLookup.setInstances(new TestJavaPlatformProvider());
}
public void testGetDefaultPlatform() {
MockLookup.setInstances(); // make sure we are using pure defaults
JavaPlatformManager manager = JavaPlatformManager.getDefault ();
assertNotNull (manager);
JavaPlatform p = manager.getDefaultPlatform();
assertNotNull("some platform registered by default", p);
ClassPath cp = p.getBootstrapLibraries();
assertNotNull("is 1.5+ JRE: " + cp, cp.findResource("java/lang/StringBuilder.class"));
assertFalse(p.getInstallFolders().isEmpty());
//assertNotNull(p.findTool("javac"));
assertNotNull(p.getDisplayName());
assertNotNull(p.getSystemProperties().get("java.home"));
assertNotNull(p.getSourceFolders());
assertNotNull(p.getJavadocFolders());
cp = p.getStandardLibraries();
assertNotNull("contains test CP: " + cp, cp.findResource(JavaPlatformManager.class.getName().replace('.', '/') + ".class"));
assertNotNull(p.getProperties());
assertNotNull(p.getVendor());
Specification spec = p.getSpecification();
assertNotNull(spec);
assertNotNull(spec.getName());
// can be null: assertNotNull(spec.getProfiles());
assertTrue(spec.getVersion().compareTo(new SpecificationVersion("1.5")) >= 0);
}
public void testGetInstalledPlatforms() {
JavaPlatformManager manager = JavaPlatformManager.getDefault();
assertNotNull (manager);
TestJavaPlatformProvider provider = TestJavaPlatformProvider.getDefault ();
assertNotNull (provider);
JavaPlatform[] platforms = manager.getInstalledPlatforms();
assertNotNull (platforms);
assertEquals (1,platforms.length);
assertEquals(FallbackDefaultJavaPlatform.getInstance(), platforms[0]);
JavaPlatform platform = new TestJavaPlatform ("Testing Platform",
new Specification("j2se", new SpecificationVersion ("1.5")));
provider.addPlatform (platform);
platforms = manager.getInstalledPlatforms();
assertNotNull (platforms);
assertTrue (platforms.length == 1);
assertTrue (platforms[0]==platform);
provider.removePlatform(platform);
platforms = manager.getInstalledPlatforms();
assertNotNull (platforms);
assertEquals (1,platforms.length);
assertEquals(FallbackDefaultJavaPlatform.getInstance(), platforms[0]);
}
public void testGetPlatforms() {
JavaPlatformManager manager = JavaPlatformManager.getDefault();
assertNotNull (manager);
TestJavaPlatformProvider provider = TestJavaPlatformProvider.getDefault ();
assertNotNull (provider);
JavaPlatform p1 = new TestJavaPlatform ("P1", new Specification("P1",new SpecificationVersion ("1.4")));
JavaPlatform p2 = new TestJavaPlatform ("P2", new Specification("P2",new SpecificationVersion ("1.4")));
JavaPlatform p3 = new TestJavaPlatform ("P3", new Specification("P3",new SpecificationVersion ("1.4")));
JavaPlatform p4 = new TestJavaPlatform ("P4", new Specification("P4",new SpecificationVersion ("1.5")));
JavaPlatform p5 = new TestJavaPlatform ("P5", new Specification("CDC",new SpecificationVersion("1.0"), new Profile[] {
new Profile ("PersonalJava", new SpecificationVersion ("1.0")),
new Profile ("RMI", new SpecificationVersion ("1.0")),
}));
JavaPlatform p6 = new TestJavaPlatform ("P6", new Specification("CDC", new SpecificationVersion("1.0")));
JavaPlatform p7 = new TestJavaPlatform ("P7", new Specification("CDC",new SpecificationVersion("1.0"), new Profile[] {
new Profile ("PersonalJava", new SpecificationVersion ("1.0"))
}));
JavaPlatform p8 = new TestJavaPlatform ("P8", new Specification("CDC",new SpecificationVersion("1.0"), new Profile[] {
new Profile ("PersonalJava", new SpecificationVersion ("1.0")),
new Profile ("JNI", new SpecificationVersion ("1.0")),
new Profile ("GIOP", new SpecificationVersion ("1.0"))
}));
provider.addPlatform (p1);
provider.addPlatform (p2);
provider.addPlatform (p3);
provider.addPlatform (p4);
provider.addPlatform (p5);
provider.addPlatform (p6);
provider.addPlatform (p7);
provider.addPlatform (p8);
assertNotNull (manager.getInstalledPlatforms());
assertTrue (manager.getInstalledPlatforms().length == 8);
JavaPlatform[] r = manager.getPlatforms("P1",null);
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p1);
r = manager.getPlatforms("P1", new Specification ("P1", new SpecificationVersion("1.4")));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p1);
r = manager.getPlatforms("P1", new Specification ("P1", null));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p1);
r = manager.getPlatforms(null, new Specification ("P1", null));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p1);
r = manager.getPlatforms(null, new Specification ("P1", new SpecificationVersion("1.4")));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p1);
r = manager.getPlatforms(null, new Specification (null,new SpecificationVersion("1.4")));
assertNotNull (r);
assertTrue (r.length == 3);
assertEquivalent (r, new JavaPlatform[]{p1,p2,p3});
// Test of profiles
r = manager.getPlatforms (null, new Specification ("CDC", new SpecificationVersion("1.0"))); //Any CDC
assertNotNull (r);
assertTrue (r.length == 4);
assertEquivalent (r, new JavaPlatform[] {p5, p6, p7, p8});
r = manager.getPlatforms (null, new Specification ("CDC", null, new Profile[] { // CDC with PersonalJava/* and RMI/*
new Profile ("PersonalJava",null),
new Profile ("RMI",null)
}));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0]==p5);
r = manager.getPlatforms (null, new Specification ("CDC",null,new Profile[] { // CDC with any existing profile
new Profile (null,null)
}));
assertNotNull (r);
assertTrue (r.length == 3);
assertEquivalent (r, new JavaPlatform[] {p5,p7,p8});
r = manager.getPlatforms (null, new Specification ("CDC",null,new Profile[] { // CDC with PersonalJava/* and */*
new Profile ("PersonalJava",null),
new Profile (null,null)
}));
assertNotNull (r);
assertTrue (r.length == 3);
assertEquivalent (r, new JavaPlatform[] {p5,p7,p8});
r = manager.getPlatforms (null, new Specification ("CDC",null,new Profile[] { //CDC with PersonalJava/*
new Profile ("PersonalJava",null)
}));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p7);
r = manager.getPlatforms (null, new Specification ("CDC",null,new Profile[] { //CDC with RMI/* and */*
new Profile ("RMI",null),
new Profile (null,null)
}));
assertNotNull (r);
assertTrue (r.length == 1);
assertTrue (r[0] == p5);
r = manager.getPlatforms (null, new Specification ("CDC",null,new Profile[] { //CDC with Gateway/* and */*
new Profile ("Gateway",null),
new Profile (null, null)
}));
assertNotNull (r);
assertTrue (r.length == 0);
r = manager.getPlatforms(null,null); //All platforms
assertNotNull(r);
assertTrue (r.length == 8);
assertEquivalent (r, new JavaPlatform[] {p1,p2,p3,p4,p5,p6,p7, p8});
//Done, clean up
provider.removePlatform (p1);
provider.removePlatform (p2);
provider.removePlatform (p3);
provider.removePlatform (p4);
provider.removePlatform (p5);
provider.removePlatform (p6);
provider.removePlatform (p7);
provider.removePlatform (p8);
assertEquals (1,manager.getInstalledPlatforms().length);
assertEquals (FallbackDefaultJavaPlatform.getInstance(),manager.getInstalledPlatforms()[0]);
}
private static void assertEquivalent (JavaPlatform[] a, JavaPlatform[] b) {
assertTrue (a.length == b.length);
List l = Arrays.asList(a);
for (int i=0; i < b.length; i++) {
if (!l.contains(b[i])) {
assertTrue (false);
}
}
}
private static class TestJavaPlatform extends JavaPlatform {
private String id;
private Specification spec;
public TestJavaPlatform (String id, Specification spec) {
this.id = id;
this.spec = spec;
}
public ClassPath getBootstrapLibraries() {
return ClassPathSupport.createClassPath(new URL[0]);
}
public String getDisplayName() {
return this.id;
}
public Collection<FileObject> getInstallFolders() {
return Collections.emptyList();
}
public List<URL> getJavadocFolders() {
return Collections.emptyList();
}
public Map<String,String> getProperties() {
return Collections.emptyMap();
}
public ClassPath getSourceFolders() {
return ClassPathSupport.createClassPath(Collections.<PathResourceImplementation>emptyList());
}
public Specification getSpecification() {
return this.spec;
}
public ClassPath getStandardLibraries() {
return ClassPathSupport.createClassPath(new URL[0]);
}
public String getVendor() {
return "Me";
}
public FileObject findTool(String name) {
return null;
}
}
}