1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.lang;
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URL;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLClassLoader;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class PackageTest extends junit.framework.TestCase {
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private File resources;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private String resPath;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    Package getTestPackage(String resourceJar, String className)
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "Package", resourceJar);
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL = new URL("file:/" + resPath + "/Package/"
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + resourceJar);
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URLClassLoader ucl = new URLClassLoader(new URL[] { resourceURL }, null);
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return Class.forName(className, true, ucl).getPackage();
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        resources = Support_Resources.createTempFolder();
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        resPath = resources.toString();
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\')
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            resPath = resPath.substring(1);
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * There is a newer version of this class with some actual tests but since
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the class is not implemented they all fail. For now use the stub test
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * methods.
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getImplementationVendor()
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getImplementationVersion()
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getSpecificationTitle()
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getSpecificationVendor()
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getSpecificationVersion()
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getImplementationTitle()
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_helper_Attributes() throws Exception {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_all_attributes.jar", "p.C");
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationTitle returns a wrong string (1)",
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Implementation-Title", p.getImplementationTitle());
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVendor returns a wrong string (1)",
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Implementation-Vendor", p.getImplementationVendor());
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVersion returns a wrong string (1)",
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "2.2.2", p.getImplementationVersion());
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationTitle returns a wrong string (1)",
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Specification-Title", p.getSpecificationTitle());
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVendor returns a wrong string (1)",
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Specification-Vendor", p.getSpecificationVendor());
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVersion returns a wrong string (1)",
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "2.2.2", p.getSpecificationVersion());
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // No entry for the package
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p2 = getTestPackage("hyts_no_entry.jar", "p.C");
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationTitle returns a wrong string (2)",
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Implementation-Title", p2.getImplementationTitle());
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVendor returns a wrong string (2)",
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Implementation-Vendor", p2.getImplementationVendor());
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVersion returns a wrong string (2)",
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "5.3.b1", p2.getImplementationVersion());
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationTitle returns a wrong string (2)",
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Specification-Title", p2.getSpecificationTitle());
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVendor returns a wrong string (2)",
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Specification-Vendor", p2.getSpecificationVendor());
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVersion returns a wrong string (2)",
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "1.2.3", p2.getSpecificationVersion());
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // No attributes in the package entry
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p3 = getTestPackage("hyts_no_attributes.jar", "p.C");
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationTitle returns a wrong string (3)",
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Implementation-Title", p3.getImplementationTitle());
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVendor returns a wrong string (3)",
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Implementation-Vendor", p3.getImplementationVendor());
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVersion returns a wrong string (3)",
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "5.3.b1", p3.getImplementationVersion());
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationTitle returns a wrong string (3)",
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Specification-Title", p3.getSpecificationTitle());
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVendor returns a wrong string (3)",
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Specification-Vendor", p3.getSpecificationVendor());
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVersion returns a wrong string (3)",
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "1.2.3", p3.getSpecificationVersion());
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Some attributes in the package entry
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p4 = getTestPackage("hyts_some_attributes.jar", "p.C");
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationTitle returns a wrong string (4)",
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Implementation-Title", p4.getImplementationTitle());
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVendor returns a wrong string (4)",
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Implementation-Vendor", p4.getImplementationVendor());
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVersion returns a wrong string (4)",
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "2.2.2", p4.getImplementationVersion());
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationTitle returns a wrong string (4)",
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "MF Specification-Title", p4.getSpecificationTitle());
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVendor returns a wrong string (4)",
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Specification-Vendor", p4.getSpecificationVendor());
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVersion returns a wrong string (4)",
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "2.2.2", p4.getSpecificationVersion());
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // subdirectory Package
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p5 = getTestPackage("hyts_pq.jar", "p.q.C");
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationTitle returns a wrong string (5)",
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Implementation-Title", p5.getImplementationTitle());
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVendor returns a wrong string (5)",
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Implementation-Vendor", p5.getImplementationVendor());
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getImplementationVersion returns a wrong string (5)",
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "1.1.3", p5.getImplementationVersion());
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationTitle returns a wrong string (5)",
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Specification-Title", p5.getSpecificationTitle());
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVendor returns a wrong string (5)",
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p Specification-Vendor", p5.getSpecificationVendor());
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Package getSpecificationVersion returns a wrong string (5)",
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "2.2.0.0.0.0.0.0.0.0.0", p5.getSpecificationVersion());
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getName()
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getName() throws Exception {
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_pq.jar", "p.q.C");
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Package getName returns a wrong string", "p.q", p
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getName());
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getPackage(java.lang.String)
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPackageLjava_lang_String() {
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("Package getPackage failed for java.lang", Package
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPackage("java.lang"), Package.getPackage("java.lang"));
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("Package getPackage failed for java.lang", Package
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPackage("java.lang"), Object.class.getPackage());
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#getPackages()
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPackages() throws Exception {
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package[] pckgs = Package.getPackages();
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean found = false;
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < pckgs.length; i++) {
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (pckgs[i].getName().equals("java.util")) {
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                found = true;
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                break;
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package getPackages failed to retrieve a package", found);
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#hashCode()
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_hashCode() {
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p1 = Package.getPackage("java.lang");
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (p1 != null) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(p1.hashCode(), "java.lang".hashCode());
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#isCompatibleWith(java.lang.String)
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isCompatibleWithLjava_lang_String() throws Exception {
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_c.jar", "p.C");
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package isCompatibleWith fails with lower version", p
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isCompatibleWith("2.1.9.9"));
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package isCompatibleWith fails with same version (1)", p
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isCompatibleWith("2.2.0"));
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package isCompatibleWith fails with same version (2)", p
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isCompatibleWith("2.2"));
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Package isCompatibleWith fails with higher version", p
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isCompatibleWith("2.2.0.0.1"));
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith(null);
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Null version is illegal");
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException compatible) {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            /*
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes             * RI throws NPE instead of NFE...
237a0696ae076ed7ea66387057c7a1b34d42e10f140Elliott Hughes             */
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith("");
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Empty version is illegal");
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith(".");
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("'.' version is illegal");
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith("1.2.");
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("'1.2.' version is illegal");
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith(".9");
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("'.9' version is illegal");
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith("2.4..5");
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("'2.4..5' version is illegal");
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            p.isCompatibleWith("20.-4");
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("'20.-4' version is illegal");
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NumberFormatException ok) {}
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#isSealed()
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isSealed() throws Exception {
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_pq.jar", "p.q.C");
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package isSealed returns wrong boolean", p.isSealed());
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#isSealed(java.net.URL)
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isSealedLjava_net_URL() throws Exception {
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_c.jar", "p.C");
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Package isSealed returns wrong boolean (1)", p
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isSealed(new URL("file:/" + resPath + "/")));
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package isSealed returns wrong boolean (2)", p
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isSealed(new URL("file:/" + resPath + "/Package/hyts_c.jar")));
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.lang.Package#toString()
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toString() throws Exception {
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Package p = getTestPackage("hyts_c.jar", "p.C");
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Package toString returns wrong string", p.toString()
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .length() > 0);
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
293a0696ae076ed7ea66387057c7a1b34d42e10f140Elliott Hughes
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_SealedPackage_forName() throws Exception {
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "Package", "hyts_c.jar");
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "Package", "hyts_d.jar");
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "Package", "hyts_d1.jar");
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "Package", "hyts_d2.jar");
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL1 = new URL("file:/" + resPath + "/Package/hyts_c.jar");
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL2 = new URL("file:/" + resPath + "/Package/hyts_d.jar");
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL3 = new URL("file:/" + resPath + "/Package/hyts_d1.jar");
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL4 = new URL("file:/" + resPath + "/Package/hyts_d2.jar");
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL resourceURL5 = new URL("file:/" + resPath + "/");
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URLClassLoader uclClassLoader;
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from the sealed jar, then an unsealed jar with no manifest
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL2 }, null);
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.C", true, uclClassLoader);
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.D", true, uclClassLoader);
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // setup for next test
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Support_Resources.copyFile(resources, "p", "");
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream in = uclClassLoader.getResourceAsStream("p/D.class");
321a0696ae076ed7ea66387057c7a1b34d42e10f140Elliott Hughes        Support_Resources.copyLocalFileTo(new File(resources.toString(),
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "p/D.class"), in);
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from a sealed jar, then the directory
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL5 }, null);
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.C", true, uclClassLoader);
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.D", true, uclClassLoader);
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from a directory, then the sealed jar
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL5 }, null);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.D", true, uclClassLoader);
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.C", true, uclClassLoader);
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from an unsealed jar with no manifest, then the sealed jar
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL2 }, null);
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.D", true, uclClassLoader);
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.C", true, uclClassLoader);
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from an unsealed jar with a manifest, then the sealed jar
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL3 }, null);
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.C", true, uclClassLoader);
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.D", true, uclClassLoader);
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from an sealed jar, then the unsealed jar with a manifest
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL3 }, null);
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.D", true, uclClassLoader);
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.C", true, uclClassLoader);
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // load from the sealed jar, then another sealed jar
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uclClassLoader = new java.net.URLClassLoader(new URL[] { resourceURL1,
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                resourceURL4 }, null);
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class.forName("p.C", true, uclClassLoader);
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Class.forName("p.D", true, uclClassLoader);
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw SecurityException");
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
391