test/jdk/java/util/ServiceLoader/ReloadTest.java
author shurailine
Fri, 16 Mar 2018 03:15:35 -0700
changeset 49258 be0ec3cc0c2a
parent 47216 71c04702a3d5
permissions -rw-r--r--
8199616: Fix @module declarations in tier1 tests Reviewed-by: mchung, alanb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45652
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     1
/*
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     4
 *
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     8
 *
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    13
 * accompanied this code).
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    14
 *
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    18
 *
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    21
 * questions.
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    22
 */
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    23
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    24
/**
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    25
 * @test
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    26
 * @library modules
49258
be0ec3cc0c2a 8199616: Fix @module declarations in tier1 tests
shurailine
parents: 47216
diff changeset
    27
 * @modules jdk.scripting.nashorn
45652
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    28
 * @run testng/othervm ReloadTest
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    29
 * @summary Basic test of ServiceLoader.reload
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    30
 */
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    31
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    32
import java.util.ConcurrentModificationException;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    33
import java.util.Iterator;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    34
import java.util.List;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    35
import java.util.ServiceLoader;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    36
import java.util.ServiceLoader.Provider;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    37
import java.util.Spliterator;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    38
import java.util.stream.Collectors;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    39
import java.util.stream.Stream;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    40
import static java.util.ServiceLoader.*;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    41
import javax.script.ScriptEngineFactory;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    42
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    43
import org.testng.annotations.Test;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    44
import static org.testng.Assert.*;
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    45
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    46
@Test
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    47
public class ReloadTest {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    48
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    49
    public void testReload() {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    50
        ServiceLoader<ScriptEngineFactory> sl = load(ScriptEngineFactory.class);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    51
        List<String> names1 = sl.stream()
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    52
                .map(Provider::get)
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    53
                .map(ScriptEngineFactory::getEngineName)
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    54
                .collect(Collectors.toList());
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    55
        assertFalse(names1.isEmpty());
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    56
        sl.reload();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    57
        List<String> names2 = sl.stream()
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    58
                .map(Provider::get)
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    59
                .map(ScriptEngineFactory::getEngineName)
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    60
                .collect(Collectors.toList());
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    61
        assertEquals(names1, names2);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    62
    }
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    63
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    64
    @Test(expectedExceptions = { ConcurrentModificationException.class })
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    65
    public void testIteratorHasNext() {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    66
        ServiceLoader<ScriptEngineFactory> sl = load(ScriptEngineFactory.class);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    67
        Iterator<ScriptEngineFactory> iterator = sl.iterator();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    68
        sl.reload();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    69
        iterator.hasNext();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    70
    }
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    71
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    72
    @Test(expectedExceptions = { ConcurrentModificationException.class })
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    73
    public void testIteratorNext() {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    74
        ServiceLoader<ScriptEngineFactory> sl = load(ScriptEngineFactory.class);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    75
        Iterator<ScriptEngineFactory> iterator = sl.iterator();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    76
        assertTrue(iterator.hasNext());
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    77
        sl.reload();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    78
        iterator.next();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    79
    }
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    80
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    81
    @Test(expectedExceptions = { ConcurrentModificationException.class })
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    82
    public void testStreamFindAny() {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    83
        ServiceLoader<ScriptEngineFactory> sl = load(ScriptEngineFactory.class);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    84
        Stream<Provider<ScriptEngineFactory>> stream = sl.stream();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    85
        sl.reload();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    86
        stream.findAny();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    87
    }
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    88
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    89
    @Test(expectedExceptions = { ConcurrentModificationException.class })
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    90
    public void testSpliteratorTryAdvance() {
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    91
        ServiceLoader<ScriptEngineFactory> sl = load(ScriptEngineFactory.class);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    92
        Stream<Provider<ScriptEngineFactory>> stream = sl.stream();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    93
        Spliterator<Provider<ScriptEngineFactory>> spliterator = stream.spliterator();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    94
        sl.reload();
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    95
        spliterator.tryAdvance(System.out::println);
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    96
    }
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    97
33342314ce89 8181087: Module system implementation refresh (6/2017)
alanb
parents:
diff changeset
    98
}