You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/05/17 15:08:15 UTC
[groovy] branch master updated: GROOVY-4349: add test case
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 91e96b9 GROOVY-4349: add test case
91e96b9 is described below
commit 91e96b904be7c2148eec0fdb9be51778d6e9774a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon May 17 10:07:54 2021 -0500
GROOVY-4349: add test case
---
src/test/groovy/StaticImportTest.groovy | 59 ++++++++++++------------
src/test/groovy/bugs/Groovy4349.groovy | 81 +++++++++++++++++++++++++++++++++
2 files changed, 111 insertions(+), 29 deletions(-)
diff --git a/src/test/groovy/StaticImportTest.groovy b/src/test/groovy/StaticImportTest.groovy
index 4ef9adc..d44b616 100644
--- a/src/test/groovy/StaticImportTest.groovy
+++ b/src/test/groovy/StaticImportTest.groovy
@@ -18,7 +18,6 @@
*/
package groovy
-import gls.CompilableTestSupport
import static java.lang.Boolean.FALSE as F
import static java.text.DateFormat.MEDIUM as M
import static java.util.regex.Pattern.*
@@ -44,7 +43,8 @@ import static java.util.jar.Attributes.Name as AttrName
import static groovy.Container5087.*
import org.codehaus.groovy.runtime.DefaultGroovyMethods as DGM
-class StaticImportTest extends CompilableTestSupport {
+final class StaticImportTest extends groovy.test.GroovyTestCase {
+
void testFieldWithAliasInExpression() {
assert !F
}
@@ -120,25 +120,25 @@ class StaticImportTest extends CompilableTestSupport {
assert cfield == 21
assert pfield == 42
}
-
+
void testStaticImportAndDefaultValue() {
- assertScript """
- import static Foo.*
- import static Bar.*
-
- class Bar {
- static void bar() {
- assert foo(10,1000) == 1010
- assert foo(10) == 110
- }
- }
-
- class Foo {
- static int foo(int x, int y = 100) {x+y}
- }
-
- Bar.bar()
- """
+ assertScript '''
+ import static Foo.*
+ import static Bar.*
+
+ class Bar {
+ static void bar() {
+ assert foo(10,1000) == 1010
+ assert foo(10) == 110
+ }
+ }
+
+ class Foo {
+ static int foo(int x, int y = 100) {x+y}
+ }
+
+ Bar.bar()
+ '''
}
void testStaticImportProperty() {
@@ -232,14 +232,14 @@ class StaticImportTest extends CompilableTestSupport {
void testConstructorArgsAliasing() {
// not recommended style to use statics in constructors but supported
- assertScript """
- class Foo {
- static x
- }
- import static Foo.x as z
- new Foo(z:'hi')
- assert z == 'hi'
- """
+ assertScript '''
+ class Foo {
+ static x
+ }
+ import static Foo.x as z
+ new Foo(z:'hi')
+ assert z == 'hi'
+ '''
}
void testMethodCallWithThisTargetIsNotResolvedToStaticallyImportedMethod() {
@@ -269,7 +269,7 @@ class StaticImportTest extends CompilableTestSupport {
}
void testMethodCallExpressionInStaticContextWithInstanceVariableShouldFail() { //GROOVY-4228
- shouldNotCompile '''
+ def err = shouldFail '''
class B {
def c = new Object()
static main(args) {
@@ -277,6 +277,7 @@ class StaticImportTest extends CompilableTestSupport {
}
}
'''
+ assert err =~ /Apparent variable 'c' was found in a static scope but doesn't refer to a local variable, static field or class/
}
void testStaticStarImportOfStaticInnerClass() {
diff --git a/src/test/groovy/bugs/Groovy4349.groovy b/src/test/groovy/bugs/Groovy4349.groovy
new file mode 100644
index 0000000..84b1b5b
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy4349.groovy
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package groovy.bugs
+
+import org.codehaus.groovy.control.CompilerConfiguration
+import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
+import org.junit.Test
+
+final class Groovy4349 {
+ @Test
+ void testStaticImport() {
+ def config = new CompilerConfiguration(
+ targetDirectory: File.createTempDir(),
+ jointCompilationOptions: [memStub: true]
+ )
+ def parentDir = File.createTempDir()
+ try {
+ new File(parentDir, 'p').mkdir()
+
+ def a = new File(parentDir, 'p/Types.groovy')
+ a.write '''
+ package p
+ class C {
+ static final List<String> calls = []
+ def prop
+ }
+ class Utility {
+ static C method1(int i) {
+ C.calls << 'Utility.method1'
+ return new C()
+ }
+ static C method2(C c) {
+ C.calls << 'Utility.method2'
+ return c
+ }
+ }
+ '''
+ def b = new File(parentDir, 'p/Main.groovy')
+ b.write '''
+ package p
+ import static Utility.*
+ class Main {
+ def method1() {
+ C.calls << 'Harness.method1'
+ new C()
+ }
+ void test() {
+ method2(method1()).prop = 8
+ assert C.calls == ['Harness.method1', 'Utility.method2']
+ }
+ }
+ '''
+
+ def loader = new GroovyClassLoader(this.class.classLoader)
+ def cu = new JavaAwareCompilationUnit(config, loader)
+ cu.addSources(a, b)
+ cu.compile()
+
+ loader.loadClass('p.Main').newInstance().test()
+ } finally {
+ config.targetDirectory.deleteDir()
+ parentDir.deleteDir()
+ }
+ }
+}