/*
 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * @test
 * @bug 8327512
 * @summary Clashes between java.lang classes and custom-defined classes with
 *          the same simple names
 * @modules jdk.jshell/jdk.jshell
 * @build KullaTesting
 * @run testng JLCollisionTest
 */

import org.testng.annotations.Test;

@Test
public class JLCollisionTest extends KullaTesting {

    public void testObject() {
        assertEval("class Object {}");
        assertEval("1");
        assertEval("null");
        assertEval("$2 = \"\"");
    }

    public void testThrowable() {
        assertEval("class Throwable {}");
        assertEval("1");
        //var with an "enhanced" (non-denotable) type:
        assertEval("var _ = new Object() {};");
    }

    public void testSuppressWarnings() {
        assertEval("class SuppressWarnings {}");
        //var with an "enhanced" (non-denotable) type:
        assertEval("var _ = new Object() {};");
    }

}
