RepeatedUsesAndProvidesTest.java revision 3294:9adfb22ff08f
161452Sdfr/*
261452Sdfr * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
361452Sdfr * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
461452Sdfr *
561452Sdfr * This code is free software; you can redistribute it and/or modify it
661452Sdfr * under the terms of the GNU General Public License version 2 only, as
761452Sdfr * published by the Free Software Foundation.
861452Sdfr *
961452Sdfr * This code is distributed in the hope that it will be useful, but WITHOUT
1061452Sdfr * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1161452Sdfr * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1261452Sdfr * version 2 for more details (a copy is included in the LICENSE file that
1361452Sdfr * accompanied this code).
1461452Sdfr *
1561452Sdfr * You should have received a copy of the GNU General Public License version
1661452Sdfr * 2 along with this work; if not, write to the Free Software Foundation,
1761452Sdfr * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1861452Sdfr *
1961452Sdfr * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2061452Sdfr * or visit www.oracle.com if you need additional information or have any
2161452Sdfr * questions.
2261452Sdfr */
2361452Sdfr
2461452Sdfr/**
2561452Sdfr * @test 8145012
2661452Sdfr * @summary Javac doesn't report errors on duplicate uses or provides
27116192Sobrien * @library /tools/lib
28116192Sobrien * @modules
29116192Sobrien *      jdk.compiler/com.sun.tools.javac.api
3061452Sdfr *      jdk.compiler/com.sun.tools.javac.main
3161452Sdfr *      jdk.jdeps/com.sun.tools.javap
3261452Sdfr * @build ToolBox ModuleTestBase
3361452Sdfr * @run main RepeatedUsesAndProvidesTest
34129878Sphk */
3561452Sdfr
3661452Sdfrimport java.nio.file.Files;
3776827Salfredimport java.nio.file.Path;
3879339Sjhb
3961452Sdfrpublic class RepeatedUsesAndProvidesTest extends ModuleTestBase {
40173573Sjhb    public static void main(String... args) throws Exception {
41173573Sjhb        RepeatedUsesAndProvidesTest t = new RepeatedUsesAndProvidesTest();
42119288Simp        t.runTests();
43119288Simp    }
4461452Sdfr
4561452Sdfr    @Test
4661452Sdfr    void testDuplicateUses(Path base) throws Exception {
4761452Sdfr        Path src = base.resolve("src");
4861452Sdfr        tb.writeJavaFiles(src,
49115355Sjhb                "module m { uses p1.C1; uses p1.C1; }",
50115355Sjhb                "package p1; public class C1 {}");
5161452Sdfr        Path classes = base.resolve("classes");
5261452Sdfr        Files.createDirectories(classes);
5361452Sdfr
5461452Sdfr        String log = tb.new JavacTask()
55115355Sjhb                .options("-XDrawDiagnostics")
56165826Stakawata                .outdir(classes)
5761452Sdfr                .files(findJavaFiles(src))
5861452Sdfr                .run(ToolBox.Expect.FAIL)
5961452Sdfr                .writeAll()
6061452Sdfr                .getOutput(ToolBox.OutputKind.DIRECT);
6161452Sdfr        if (!log.contains("module-info.java:1:24: compiler.err.duplicate.uses: p1.C1"))
6261452Sdfr            throw new Exception("expected output not found");
6361452Sdfr    }
64165811Sjkim
6561452Sdfr    @Test
6661452Sdfr    void testDuplicateProvides(Path base) throws Exception {
67165811Sjkim        Path src = base.resolve("src");
6861452Sdfr        tb.writeJavaFiles(src,
6961452Sdfr                "module m { provides p1.C1 with p2.C2; provides p1.C1 with p2.C2; }",
7061452Sdfr                "package p1; public class C1 {}",
7161452Sdfr                "package p2; public class C2 extends p1.C1 {}");
7261452Sdfr        Path classes = base.resolve("classes");
7361452Sdfr        Files.createDirectories(classes);
7461452Sdfr
7561452Sdfr        String log = tb.new JavacTask()
7661452Sdfr                .options("-XDrawDiagnostics")
7761452Sdfr                .outdir(classes)
7861452Sdfr                .files(findJavaFiles(src))
7967379Sache                .run(ToolBox.Expect.FAIL)
8067379Sache                .writeAll()
8186192Skuriyama                .getOutput(ToolBox.OutputKind.DIRECT);
82109115Sanholt        if (!log.contains("module-info.java:1:39: compiler.err.duplicate.provides"))
8386192Skuriyama            throw new Exception("expected output not found");
8490270Sbenno    }
8590270Sbenno}
8686192Skuriyama