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 Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.util; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.MalformedURLException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URL; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLClassLoader; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.NoSuchElementException; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ServiceConfigurationError; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ServiceLoader; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.AbstractService; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.Service; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceDuplicateIn2File; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceFinalClass; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceForAllCommentTest; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceForEmptyTest; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceForIllegalNameTest; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceForWrongNameTest; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceIn2File; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceIn2FileWithEmptyConfig; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceMoreThanOne; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.resources.ServiceLoader.ServiceWithDuplicateSons; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test cases for java.util.ServiceLoader 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ServiceLoaderTest extends TestCase { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static URL jarFile = null; 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws MalformedURLException 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#reload()}. 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("nls") 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_reload() throws MalformedURLException { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class SubURLClassLoader extends URLClassLoader { 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @param urls 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SubURLClassLoader(URL[] urls) { 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(urls); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void addURL(URL url) { 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.addURL(url); 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SubURLClassLoader ucl = new SubURLClassLoader(new URL[] { new URL( 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "file:/no/such/file") }); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServiceLoader<Service> serviceLoader = ServiceLoader.load( 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Service.class, ucl); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator<Service> itr = serviceLoader.iterator(); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // change the ucl to install a jar file 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl.addURL(jarFile); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // before reload, the Iterator is unchanged 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotSame(itr, serviceLoader.iterator()); 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // after reload, the Iterator update 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader.reload(); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfService", itr.next().myNameIs()); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#iterator()}. 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings( { "nls", "unchecked" }) 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_iterator() { 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl = new URLClassLoader(new URL[] { jarFile }); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator itr = ServiceLoader.load(Service.class, ucl).iterator(); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfService", ((Service) itr.next()) 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .myNameIs()); 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.remove(); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw UnsupportedOperationException"); 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = ServiceLoader.load(ServiceForWrongNameTest.class, ucl).iterator(); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw ServiceConfigurationError"); 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ServiceConfigurationError e) { 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.remove(); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw UnsupportedOperationException"); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // null test 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = ServiceLoader.load(null).iterator(); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullIteratorTester(itr); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = ServiceLoader.load(null, null).iterator(); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullIteratorTester(itr); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = ServiceLoader.load(null, ClassLoader.getSystemClassLoader()) 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .iterator(); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullIteratorTester(itr); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = ServiceLoader.load(Service.class, null).iterator(); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NoSuchElementException"); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchElementException e) { 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.remove(); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw UnsupportedOperationException"); 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings( { "nls", "unchecked" }) 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void nullIteratorTester(Iterator itr) { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(itr); 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.hasNext(); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.remove(); 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw UnsupportedOperationException"); 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws MalformedURLException 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader)}. 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings( { "nls", "unchecked" }) 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_loadLjava_lang_ClassLjava_lang_ClassLoader() 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws MalformedURLException { 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl = new URLClassLoader(new URL[] { jarFile }); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal config file 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServiceLoader serviceLoader = ServiceLoader.load(Service.class, ucl); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator itr = serviceLoader.iterator(); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfService", ((Service) itr.next()) 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .myNameIs()); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // class that can not cast correctly 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceFinalClass.class, ucl); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw ServiceConfigurationError"); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ServiceConfigurationError e) { 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // abstract class with comment in config file 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(AbstractService.class, ucl); 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfAbstractService", ((AbstractService) itr 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .next()).myNameIs()); 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // one service with two implementation class 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceMoreThanOne.class, ucl); 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String name = ((ServiceMoreThanOne) itr.next()).myNameIs(); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("ImplementationOfServiceMoreThanOne1".equals(name)) { 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceMoreThanOne2", 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceMoreThanOne) itr.next()).myNameIs()); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if ("ImplementationOfServiceMoreThanOne2".equals(name)) { 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceMoreThanOne1", 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceMoreThanOne) itr.next()).myNameIs()); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should load ImplementationOfServiceMoreThanOne1 or ImplementationOfServiceMoreThanOne2"); 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config file only contains comments 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceForAllCommentTest.class, ucl); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NoSuchElementException"); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchElementException e) { 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // empty config file 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceForEmptyTest.class, ucl); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NoSuchElementException"); 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchElementException e) { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config file with illegal char 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .load(ServiceForIllegalNameTest.class, ucl); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.hasNext(); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw ServiceConfigurationError"); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ServiceConfigurationError e) { 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config file with legal string, but the class does not exist 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceForWrongNameTest.class, ucl); 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr.next(); 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw ServiceConfigurationError"); 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ServiceConfigurationError e) { 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config file for an internal class 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load( 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractService.InternalService.class, ucl); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfAbstractServiceInternalService", 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((AbstractService.InternalService) itr.next()) 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .myInternalNameIs()); 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config files in the 2 jar files 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceIn2File.class, ucl); 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceIn2File1", ((ServiceIn2File) itr 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .next()).myNameIs()); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // add the second file 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL jarFile2 = prepairJar("hyts_services2.jar"); 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl2 = new URLClassLoader( 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new URL[] { jarFile, jarFile2 }); 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceIn2File.class, ucl2); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes name = ((ServiceIn2File) itr.next()).myNameIs(); 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("ImplementationOfServiceIn2File1".equals(name)) { 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceIn2File2", 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceIn2File) itr.next()).myNameIs()); 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if ("ImplementationOfServiceIn2File2".equals(name)) { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceIn2File1", 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceIn2File) itr.next()).myNameIs()); 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should load ImplementationOfServiceIn2File1 or ImplementationOfServiceIn2File2"); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // same config files in 2 jar files 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceDuplicateIn2File.class, ucl2); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceDuplicateIn2File_1", 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceDuplicateIn2File) itr.next()).myNameIs()); 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl2 = new URLClassLoader(new URL[] { jarFile2, jarFile }); 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceDuplicateIn2File.class, ucl2); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceDuplicateIn2File_2", 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceDuplicateIn2File) itr.next()).myNameIs()); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // one config file in one jar, another empty config in another jar. 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceIn2FileWithEmptyConfig.class, 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceIn2FileWithEmptyConfig", 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceIn2FileWithEmptyConfig) itr.next()).myNameIs()); 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl2 = new URLClassLoader(new URL[] { jarFile, jarFile2 }); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceIn2FileWithEmptyConfig.class, 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ucl2); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceIn2FileWithEmptyConfig", 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceIn2FileWithEmptyConfig) itr.next()).myNameIs()); 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // config file with duplicate items 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(ServiceWithDuplicateSons.class, ucl); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes itr = serviceLoader.iterator(); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(itr.hasNext()); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("ImplementationOfServiceWithDuplicateSons", 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((ServiceWithDuplicateSons) itr.next()).myNameIs()); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(itr.hasNext()); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // can not load by system classloader 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(Service.class, ClassLoader 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getSystemClassLoader()); 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // can not load by Thread.currentThread().getContextClassLoader() 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(Service.class, Thread 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .currentThread().getContextClassLoader()); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(Service.class, Service.class 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getClassLoader()); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // String is a final class, no sub-class for it 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(String.class, ucl); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#load(java.lang.Class)}. 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings( { "nls", "unchecked" }) 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_loadLjava_lang_Class() { 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServiceLoader serviceLoader = ServiceLoader.load(Service.class); 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // String is a final class, no sub-class for it 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(String.class); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @param fileName 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @return the URL of the jar file 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws MalformedURLException 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("nls") 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static URL prepairJar(String fileName) throws MalformedURLException { 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File resources = Support_Resources.createTempFolder(); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String resPath = resources.toString(); 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') { 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resPath = resPath.substring(1); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, "ServiceLoader", fileName); 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URL resourceURL = new URL("file:/" + resPath + "/ServiceLoader/" 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + fileName); 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return resourceURL; 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#loadInstalled(java.lang.Class)}. 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_loadInstalledLjava_lang_Class() { 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServiceLoader<Service> serviceLoader = ServiceLoader 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .loadInstalled(Service.class); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(serviceLoader.iterator().hasNext()); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.loadInstalled(null); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator<Service> itr = serviceLoader.iterator(); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullIteratorTester(itr); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.ServiceLoader#toString()}. 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings( { "unchecked", "nls" }) 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_toString() { 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes URLClassLoader ucl = new URLClassLoader(new URL[] { jarFile }); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServiceLoader serviceLoader = ServiceLoader.load(Service.class, ucl); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(String.class, ucl); 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(Service.class); 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(String.class); 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.loadInstalled(Service.class); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.loadInstalled(String.class); 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(null, ucl); 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(serviceLoader); 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader.toString(); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(null, null); 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(serviceLoader); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader.toString(); 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(Service.class, null); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(serviceLoader.toString().length() > 0); 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.load(null); 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(serviceLoader); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader.toString(); 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader = ServiceLoader.loadInstalled(null); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(serviceLoader); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serviceLoader.toString(); 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see junit.framework.TestCase#setUp() 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("nls") 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarFile = prepairJar("hyts_services.jar"); 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see junit.framework.TestCase#tearDown() 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new File(jarFile.getFile()).delete(); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 492