You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/06/30 04:43:55 UTC
[groovy] 01/02: GROOVY-9608: add test case
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit b9490749125d91926f6a3b874a5fe506e8cea751
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Jun 28 12:34:58 2020 -0500
GROOVY-9608: add test case
(cherry picked from commit 0b886e910bbb0e75aae527fae2cab0ec4f096bf2)
---
src/test/groovy/bugs/Groovy9608.groovy | 57 ++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/src/test/groovy/bugs/Groovy9608.groovy b/src/test/groovy/bugs/Groovy9608.groovy
new file mode 100644
index 0000000..1cf5209
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy9608.groovy
@@ -0,0 +1,57 @@
+/*
+ * 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.junit.Test
+
+import static groovy.test.GroovyAssert.assertScript
+
+final class Groovy9608 {
+
+ @Test
+ void testGetFieldOnSuper() {
+ assertScript '''
+ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter
+
+ class A {
+ public x = 'A'
+ }
+ class B extends A {
+ public x = 'B'
+ }
+
+ def a = new A()
+ def ax = a.metaClass.getAttribute(A, a, 'x', false)
+ assert ax == 'A'
+
+ def b = new B()
+ def bx = b.metaClass.getAttribute(B, b, 'x', false)
+ assert bx == 'B'
+
+ try {
+ def bSuperX = b.metaClass.getAttribute(A, b, 'x', true)
+ assert bSuperX == 'A'
+ bSuperX = ScriptBytecodeAdapter.getFieldOnSuper(A, b, 'x')
+ assert bSuperX == 'A'
+ } catch (MissingFieldException e) {
+ // TODO: Why can't these read public/protected field from super?
+ }
+ '''
+ }
+}