You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/04/17 01:05:54 UTC

[groovy] branch master updated (7e76191 -> 8fc0e23)

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git.


    from 7e76191  GROOVY-9087: Bump gradle to 5.4(closes #912)
     new e1a9721  fix unintended illegal access
     new 8fc0e23  add an additional test method

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/test/groovy/bugs/Groovy8764Bug.groovy          |  12 +-
 src/test/groovy/util/ObjectGraphBuilderTest.groovy | 788 ++++++++++-----------
 .../groovy/ast/CodeVisitorSupportTest.groovy       |   4 +-
 .../powerassert/AssertionRenderingTest.groovy      |  12 +-
 .../runtime/powerassert/EvaluationTest.groovy      |   2 +-
 .../src/main/java/groovy/test/GroovyAssert.java    |  14 +
 6 files changed, 426 insertions(+), 406 deletions(-)


[groovy] 01/02: fix unintended illegal access

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit e1a9721d475f3ed4b47e33cd9a32bcf1a6dec0c5
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Apr 17 09:32:23 2019 +1000

    fix unintended illegal access
---
 src/test/groovy/bugs/Groovy8764Bug.groovy          |  12 +-
 src/test/groovy/util/ObjectGraphBuilderTest.groovy | 788 ++++++++++-----------
 .../groovy/ast/CodeVisitorSupportTest.groovy       |   4 +-
 .../powerassert/AssertionRenderingTest.groovy      |  12 +-
 .../runtime/powerassert/EvaluationTest.groovy      |   2 +-
 5 files changed, 412 insertions(+), 406 deletions(-)

diff --git a/src/test/groovy/bugs/Groovy8764Bug.groovy b/src/test/groovy/bugs/Groovy8764Bug.groovy
index a092574..9102f04 100644
--- a/src/test/groovy/bugs/Groovy8764Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8764Bug.groovy
@@ -44,8 +44,9 @@ class Groovy8764Bug extends GroovyTestCase {
 
     void testDgmMethodInClosureInInnerClass() {
         assertScript '''
-        import groovy.transform.*
-        import java.util.function.Function
+            import groovy.transform.*
+            import java.util.function.Function
+            import static groovy.test.GroovyAssert.isAtLeastJdk
 
             @CompileStatic
             class Outer {
@@ -62,7 +63,12 @@ class Groovy8764Bug extends GroovyTestCase {
 
             def oi = new Outer.Inner()
             assert !oi.test(0)
-            assert oi.test(1).value == 1
+            if (isAtLeastJdk('9.0')) {
+                assert oi.test(1).get() == 1
+            } else {
+                // confirm accessing private field okay on older JDK versions
+                assert oi.test(1).value == 1
+            }
         '''
     }
 }
diff --git a/src/test/groovy/util/ObjectGraphBuilderTest.groovy b/src/test/groovy/util/ObjectGraphBuilderTest.groovy
index 44f594a..3ba08fd 100644
--- a/src/test/groovy/util/ObjectGraphBuilderTest.groovy
+++ b/src/test/groovy/util/ObjectGraphBuilderTest.groovy
@@ -1,395 +1,395 @@
-/*
- *  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.util
-
-class ObjectGraphBuilderTest extends GroovyTestCase {
-   ObjectGraphBuilder builder
-   ObjectGraphBuilder reflectionBuilder
-
-   void testCompany() {
-      def expected = new Company( name: 'ACME', employees: [] )
-      def actual = builder.company( name: 'ACME', employees: [] )
-      assert actual != null
-      //assert actual.class == Company
-      assert actual.name == expected.name
-      assert actual.address == expected.address
-      assert actual.employees == expected.employees
-   }
-
-   void testCompanyAndAddress() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedCompany = new Company( name: 'ACME', employees: [], address: expectedAddress )
-      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      }
-      assert actualCompany != null
-      //assert actualCompany.class == Company
-      assert actualCompany.name == expectedCompany.name
-      assert actualCompany.employees == expectedCompany.employees
-      def actualAddress = actualCompany.address
-      assert actualAddress != null
-      //assert actualAddress.class == Address
-      assert actualAddress.line1 == expectedAddress.line1
-      assert actualAddress.line2 == expectedAddress.line2
-      assert actualAddress.zip == expectedAddress.zip
-      assert actualAddress.state == expectedAddress.state
-   }
-
-   void testCompanyAndEmployeeAndAddress() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
-      def expectedCompany = new Company( name: 'ACME' )
-      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
-         employee(  name: 'Duke', employeeId: 1 ) {
-            address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-         }
-      }
-      assert actualCompany != null
-      //assert actualCompany.class == Company
-      assert actualCompany.name == expectedCompany.name
-      assert actualCompany.employees.size() == 1
-      def actualEmployee = actualCompany.employees[0]
-      //assert actualEmployee.class == Employee
-      assert actualEmployee.name == expectedEmployee.name
-      assert actualEmployee.employeeId == expectedEmployee.employeeId
-      def actualAddress = actualEmployee.address
-      assert actualAddress != null
-      //assert actualAddress.class == Address
-      assert actualAddress.line1 == expectedAddress.line1
-      assert actualAddress.line2 == expectedAddress.line2
-      assert actualAddress.zip == expectedAddress.zip
-      assert actualAddress.state == expectedAddress.state
-   }
-
-   void testCompanyAndEmployeeSameAddress() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
-      def expectedCompany = new Company( name: 'ACME' )
-      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
-         address( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-         employee(  name: 'Duke', employeeId: 1, address: a1 )
-      }
-      assert actualCompany != null
-      //assert actualCompany.class == Company
-      assert actualCompany.name == expectedCompany.name
-      assert actualCompany.employees.size() == 1
-      def actualEmployee = actualCompany.employees[0]
-      //assert actualEmployee.class == Employee
-      assert actualEmployee.name == expectedEmployee.name
-      assert actualEmployee.employeeId == expectedEmployee.employeeId
-      assert actualCompany.address == actualEmployee.address
-   }
-
-   void testCompanyAndEmployeeSameAddressWithRef() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
-      def expectedCompany = new Company( name: 'ACME' )
-      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
-         address( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-         employee(  name: 'Duke', employeeId: 1 ){
-            address( refId: 'a1' )
-         }
-      }
-      assert actualCompany != null
-      //assert actualCompany.class == Company
-      assert actualCompany.name == expectedCompany.name
-      assert actualCompany.employees.size() == 1
-      def actualEmployee = actualCompany.employees[0]
-      //assert actualEmployee.class == Employee
-      assert actualEmployee.name == expectedEmployee.name
-      assert actualEmployee.employeeId == expectedEmployee.employeeId
-      assert actualCompany.address == actualEmployee.address
-      assert actualEmployee.company == actualCompany
-   }
-
-   void testCompanyAndManyEmployees() {
-      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
-         3.times {
-            employee(  name: "Duke $it", employeeId: it )
-         }
-      }
-      assert actualCompany != null
-      assert actualCompany.employees.size() == 3
-      3.times {
-         assert actualCompany.employees[it].name == "Duke $it"
-      }
-      //assert actualCompany.employees*.getClass() == [Employee,Employee,Employee]
-   }
-
-   void testStringfiedIdentifierResolver() {
-      builder.identifierResolver = "uid"
-      def company = builder.company( name: 'ACME', employees: [], uid: 'acme' )
-      assert company != null
-      assert builder.acme != null
-      assert builder.acme == company
-   }
-
-   void testStringfiedReferenceResolver() {
-      builder.referenceResolver = "ref_id"
-      def company = builder.company( name: 'ACME', employees: [] ) {
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
-         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
-            address( ref_id: 'a1' )
-         }
-      }
-      assert company != null
-      assert company.employees.size() == 1
-      assert builder.e1 == company.employees[0]
-      assert builder.a1 == company.address
-      assert builder.a1 == builder.e1.address
-   }
-
-   void testReferenceResolver() {
-      def company = builder.company( name: 'ACME', employees: [] ) {
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
-         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
-            address( refId: 'a1' )
-         }
-      }
-      assert company != null
-      assert company.employees.size() == 1
-      assert builder.e1 == company.employees[0]
-      assert builder.a1 == company.address
-      assert builder.a1 == builder.e1.address
-   }
-
-   void testReferenceResolver_referenceIsLiveObject() {
-      def company = builder.company( name: 'ACME', employees: [] ) {
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
-         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
-            address( refId: a1 )
-         }
-      }
-      assert company != null
-      assert company.employees.size() == 1
-      assert builder.e1 == company.employees[0]
-      assert builder.a1 == company.address
-      assert builder.a1 == builder.e1.address
-   }
-
-   void testDirectReference() {
-      def company = builder.company( name: 'ACME', employees: [] ) {
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
-         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
-            address( a1 )
-         }
-      }
-      assert company != null
-      assert company.employees.size() == 1
-      assert builder.e1 == company.employees[0]
-      assert builder.a1 == company.address
-      assert builder.a1 == builder.e1.address
-   }
-
-   void testLazyReferences() {
-      def company = builder.company( name: 'ACME', employees: [] ) {
-         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
-            address( refId: 'a1' )
-         }
-         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
-      }
-      assert company != null
-      assert company.employees.size() == 1
-      assert builder.e1 == company.employees[0]
-      assert builder.a1 == company.address
-      assert builder.a1 == builder.e1.address
-   }
-
-   void testReflectionCompany() {
-      def expected = new ReflectionCompany( name: 'ACME' )
-      def actual = reflectionBuilder.reflectionCompany( name: 'ACME' )
-      assert actual != null
-      assert actual.name == expected.name
-   }
-
-   void testReflectionCompanyAndAddress() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedCompany = new ReflectionCompany( name: 'ACME', addr: expectedAddress )
-      def actualCompany = reflectionBuilder.reflectionCompany( name: 'ACME' ) {
-         addr( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      }
-      assert actualCompany != null
-      assert actualCompany.name == expectedCompany.name
-      def actualAddress = actualCompany.addr
-      assert actualAddress != null
-      assert actualAddress.line1 == expectedAddress.line1
-      assert actualAddress.line2 == expectedAddress.line2
-      assert actualAddress.zip == expectedAddress.zip
-      assert actualAddress.state == expectedAddress.state
-   }
-
-    void testReflectionCompanyAddressAndEmployees() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedCompany = new ReflectionCompany( name: 'ACME', addr: expectedAddress )
-      def expectedDirector = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
-      def expectedFinancialController = new Employee( name: 'Craig', employeeId: 2, address: expectedAddress )
-      def expectedDrone0 = new Employee( name: 'Drone0', employeeId: 3, address: expectedAddress )
-      def expectedDrone1 = new Employee( name: 'Drone1', employeeId: 4, address: expectedAddress )
-
-      def actualCompany = reflectionBuilder.reflectionCompany( name: 'ACME', drones: [] ) {
-         addr( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-         director(  name: expectedDirector.name, employeeId: expectedDirector.employeeId ){
-            address( refId: 'a1' )
-         }
-         financialController(  name: expectedFinancialController.name, employeeId: expectedFinancialController.employeeId ){
-            address( refId: 'a1' )
-         }
-         drones(  name: expectedDrone0.name, employeeId: expectedDrone0.employeeId ){
-            address( refId: 'a1' )
-         }
-         drones(  name: expectedDrone1.name, employeeId: expectedDrone1.employeeId ){
-            address( refId: 'a1' )
-         }
-      }
-      
-      assert actualCompany != null
-      assert actualCompany.name == expectedCompany.name
-      def actualAddress = actualCompany.addr
-      assert actualAddress != null
-      assert actualAddress.line1 == expectedAddress.line1
-      assert actualAddress.line2 == expectedAddress.line2
-      assert actualAddress.zip == expectedAddress.zip
-      assert actualAddress.state == expectedAddress.state
-
-      assert actualCompany.director != null
-      assert actualCompany.director.name == expectedDirector.name
-      assert actualCompany.director.employeeId == expectedDirector.employeeId
-      assert actualCompany.director.address.line1 == expectedAddress.line1
-
-      assert actualCompany.financialController != null
-      assert actualCompany.financialController.name == expectedFinancialController.name
-      assert actualCompany.financialController.employeeId == expectedFinancialController.employeeId
-      assert actualCompany.financialController.address.line1 == expectedAddress.line1
-
-      assert actualCompany.drones != null
-      assert actualCompany.drones.size == 2
-      assert actualCompany.drones[0].name == expectedDrone0.name
-      assert actualCompany.drones[0].employeeId == expectedDrone0.employeeId
-      assert actualCompany.drones[0].address != null
-      assert actualCompany.drones[0].address.line1 == expectedAddress.line1
-      assert actualCompany.drones[1].name == expectedDrone1.name
-      assert actualCompany.drones[1].address != null
-      assert actualCompany.drones[1].employeeId == expectedDrone1.employeeId
-      assert actualCompany.drones[1].address.line1 == expectedAddress.line1
-   }
-
-   void testPlural() {
-       def dracula = builder.person(name: 'Dracula') {
-           allergy(name: 'garlic', reaction: 'moderate burns')
-           allergy(name: 'cross', reaction: 'aversion')
-           allergy(name: 'wood stake', reaction: 'death')
-           allergy(name: 'sunlight', reaction: 'burst into flames')
-           petMonkey(name: 'La-la')
-           petMonkey(name: 'Ampersand')
-       }
-
-       assert dracula.allergies.size() == 4
-       assert dracula.petMonkeys.size() == 2
-   }
-
-   void testCompanyAndEmployeeAndAddressUsingBeanFactory() {
-      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
-      def expectedCompany = new Company( name: 'ACME' )
-      def actualCompany = builder.bean(new Company(), name: 'ACME', employees: [] ) {
-         bean(Employee, name: 'Duke', employeeId: 1 ) {
-            bean(Address, line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
-         }
-      }
-      assert actualCompany != null
-      // assert actualCompany.class == Company
-      assert actualCompany.name == expectedCompany.name
-      assert actualCompany.employees.size() == 1
-      def actualEmployee = actualCompany.employees[0]
-      // assert actualEmployee.class == Employee
-      assert actualEmployee.name == expectedEmployee.name
-      assert actualEmployee.employeeId == expectedEmployee.employeeId
-      def actualAddress = actualEmployee.address
-      assert actualAddress != null
-      // assert actualAddress.class == Address
-      assert actualAddress.line1 == expectedAddress.line1
-      assert actualAddress.line2 == expectedAddress.line2
-      assert actualAddress.zip == expectedAddress.zip
-      assert actualAddress.state == expectedAddress.state
-   }
-
-   void setUp() {
-      builder = new ObjectGraphBuilder()
-      builder.classNameResolver = "groovy.util"
-      reflectionBuilder = new ObjectGraphBuilder()
-      reflectionBuilder.classNameResolver = [ name: 'reflection', root: "groovy.util" ]
-   }
-}
-
-class Company {
-   String name
-   Address address
-   List employees = []
-
-   String toString() { "Company=[name:${name}, address:${address}, employees:${employees}]" }
-}
-
-class Address {
-   String line1
-   String line2
-   int zip
-   String state
-
-   String toString() { "Address=[line1:${line1}, line2:${line2}, zip:${zip}, state:${state}]" }
-}
-
-class Employee {
-   String name
-   int employeeId
-   Address address
-   Company company
-
-   String toString() { "Employee=[name:${name}, employeeId:${employeeId}, address:${address}, company:${company.name}]" }
-}
-
-class ReflectionCompany {
-   String name
-   Address addr
-   Employee director
-   Employee financialController
-   List<Employee> drones
-
-   String toString() { "Company=[name:${name}, address:${address}, director:${md}, financialController:${cio}, drones:${drones}]" }
-}
-
-class Person {
-    String name
-    List allergies = []
-    List petMonkeys = []
-
-    String toString() { "Person=[name:${name}, allergies:${allergies}, petMonkeys:${petMonkeys}]" }
-}
-
-class Allergy {
-    String name
-    String reaction
-
-    String toString() { "Allergy=[name:${name}, reaction:${reaction}]" }
-}
-
-class PetMonkey {
-    String name
-
-    String toString() { "PetMonkey=[name:${name}]" }
+/*
+ *  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.util
+
+class ObjectGraphBuilderTest extends GroovyTestCase {
+   ObjectGraphBuilder builder
+   ObjectGraphBuilder reflectionBuilder
+
+   void testCompany() {
+      def expected = new Company( name: 'ACME', employees: [] )
+      def actual = builder.company( name: 'ACME', employees: [] )
+      assert actual != null
+      //assert actual.class == Company
+      assert actual.name == expected.name
+      assert actual.address == expected.address
+      assert actual.employees == expected.employees
+   }
+
+   void testCompanyAndAddress() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedCompany = new Company( name: 'ACME', employees: [], address: expectedAddress )
+      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      }
+      assert actualCompany != null
+      //assert actualCompany.class == Company
+      assert actualCompany.name == expectedCompany.name
+      assert actualCompany.employees == expectedCompany.employees
+      def actualAddress = actualCompany.address
+      assert actualAddress != null
+      //assert actualAddress.class == Address
+      assert actualAddress.line1 == expectedAddress.line1
+      assert actualAddress.line2 == expectedAddress.line2
+      assert actualAddress.zip == expectedAddress.zip
+      assert actualAddress.state == expectedAddress.state
+   }
+
+   void testCompanyAndEmployeeAndAddress() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
+      def expectedCompany = new Company( name: 'ACME' )
+      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
+         employee(  name: 'Duke', employeeId: 1 ) {
+            address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+         }
+      }
+      assert actualCompany != null
+      //assert actualCompany.class == Company
+      assert actualCompany.name == expectedCompany.name
+      assert actualCompany.employees.size() == 1
+      def actualEmployee = actualCompany.employees[0]
+      //assert actualEmployee.class == Employee
+      assert actualEmployee.name == expectedEmployee.name
+      assert actualEmployee.employeeId == expectedEmployee.employeeId
+      def actualAddress = actualEmployee.address
+      assert actualAddress != null
+      //assert actualAddress.class == Address
+      assert actualAddress.line1 == expectedAddress.line1
+      assert actualAddress.line2 == expectedAddress.line2
+      assert actualAddress.zip == expectedAddress.zip
+      assert actualAddress.state == expectedAddress.state
+   }
+
+   void testCompanyAndEmployeeSameAddress() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
+      def expectedCompany = new Company( name: 'ACME' )
+      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
+         address( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+         employee(  name: 'Duke', employeeId: 1, address: a1 )
+      }
+      assert actualCompany != null
+      //assert actualCompany.class == Company
+      assert actualCompany.name == expectedCompany.name
+      assert actualCompany.employees.size() == 1
+      def actualEmployee = actualCompany.employees[0]
+      //assert actualEmployee.class == Employee
+      assert actualEmployee.name == expectedEmployee.name
+      assert actualEmployee.employeeId == expectedEmployee.employeeId
+      assert actualCompany.address == actualEmployee.address
+   }
+
+   void testCompanyAndEmployeeSameAddressWithRef() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
+      def expectedCompany = new Company( name: 'ACME' )
+      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
+         address( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+         employee(  name: 'Duke', employeeId: 1 ){
+            address( refId: 'a1' )
+         }
+      }
+      assert actualCompany != null
+      //assert actualCompany.class == Company
+      assert actualCompany.name == expectedCompany.name
+      assert actualCompany.employees.size() == 1
+      def actualEmployee = actualCompany.employees[0]
+      //assert actualEmployee.class == Employee
+      assert actualEmployee.name == expectedEmployee.name
+      assert actualEmployee.employeeId == expectedEmployee.employeeId
+      assert actualCompany.address == actualEmployee.address
+      assert actualEmployee.company == actualCompany
+   }
+
+   void testCompanyAndManyEmployees() {
+      def actualCompany = builder.company( name: 'ACME', employees: [] ) {
+         3.times {
+            employee(  name: "Duke $it", employeeId: it )
+         }
+      }
+      assert actualCompany != null
+      assert actualCompany.employees.size() == 3
+      3.times {
+         assert actualCompany.employees[it].name == "Duke $it"
+      }
+      //assert actualCompany.employees*.getClass() == [Employee,Employee,Employee]
+   }
+
+   void testStringfiedIdentifierResolver() {
+      builder.identifierResolver = "uid"
+      def company = builder.company( name: 'ACME', employees: [], uid: 'acme' )
+      assert company != null
+      assert builder.acme != null
+      assert builder.acme == company
+   }
+
+   void testStringfiedReferenceResolver() {
+      builder.referenceResolver = "ref_id"
+      def company = builder.company( name: 'ACME', employees: [] ) {
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
+         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
+            address( ref_id: 'a1' )
+         }
+      }
+      assert company != null
+      assert company.employees.size() == 1
+      assert builder.e1 == company.employees[0]
+      assert builder.a1 == company.address
+      assert builder.a1 == builder.e1.address
+   }
+
+   void testReferenceResolver() {
+      def company = builder.company( name: 'ACME', employees: [] ) {
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
+         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
+            address( refId: 'a1' )
+         }
+      }
+      assert company != null
+      assert company.employees.size() == 1
+      assert builder.e1 == company.employees[0]
+      assert builder.a1 == company.address
+      assert builder.a1 == builder.e1.address
+   }
+
+   void testReferenceResolver_referenceIsLiveObject() {
+      def company = builder.company( name: 'ACME', employees: [] ) {
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
+         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
+            address( refId: a1 )
+         }
+      }
+      assert company != null
+      assert company.employees.size() == 1
+      assert builder.e1 == company.employees[0]
+      assert builder.a1 == company.address
+      assert builder.a1 == builder.e1.address
+   }
+
+   void testDirectReference() {
+      def company = builder.company( name: 'ACME', employees: [] ) {
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
+         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
+            address( a1 )
+         }
+      }
+      assert company != null
+      assert company.employees.size() == 1
+      assert builder.e1 == company.employees[0]
+      assert builder.a1 == company.address
+      assert builder.a1 == builder.e1.address
+   }
+
+   void testLazyReferences() {
+      def company = builder.company( name: 'ACME', employees: [] ) {
+         employee(  name: 'Duke', employeeId: 1, id: 'e1' ) {
+            address( refId: 'a1' )
+         }
+         address( line1: '123 Groovy Rd', zip: 12345, state: 'JV', id: 'a1' )
+      }
+      assert company != null
+      assert company.employees.size() == 1
+      assert builder.e1 == company.employees[0]
+      assert builder.a1 == company.address
+      assert builder.a1 == builder.e1.address
+   }
+
+   void testReflectionCompany() {
+      def expected = new ReflectionCompany( name: 'ACME' )
+      def actual = reflectionBuilder.reflectionCompany( name: 'ACME' )
+      assert actual != null
+      assert actual.name == expected.name
+   }
+
+   void testReflectionCompanyAndAddress() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedCompany = new ReflectionCompany( name: 'ACME', addr: expectedAddress )
+      def actualCompany = reflectionBuilder.reflectionCompany( name: 'ACME' ) {
+         addr( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      }
+      assert actualCompany != null
+      assert actualCompany.name == expectedCompany.name
+      def actualAddress = actualCompany.addr
+      assert actualAddress != null
+      assert actualAddress.line1 == expectedAddress.line1
+      assert actualAddress.line2 == expectedAddress.line2
+      assert actualAddress.zip == expectedAddress.zip
+      assert actualAddress.state == expectedAddress.state
+   }
+
+    void testReflectionCompanyAddressAndEmployees() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedCompany = new ReflectionCompany( name: 'ACME', addr: expectedAddress )
+      def expectedDirector = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
+      def expectedFinancialController = new Employee( name: 'Craig', employeeId: 2, address: expectedAddress )
+      def expectedDrone0 = new Employee( name: 'Drone0', employeeId: 3, address: expectedAddress )
+      def expectedDrone1 = new Employee( name: 'Drone1', employeeId: 4, address: expectedAddress )
+
+      def actualCompany = reflectionBuilder.reflectionCompany( name: 'ACME', drones: [] ) {
+         addr( id: 'a1', line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+         director(  name: expectedDirector.name, employeeId: expectedDirector.employeeId ){
+            address( refId: 'a1' )
+         }
+         financialController(  name: expectedFinancialController.name, employeeId: expectedFinancialController.employeeId ){
+            address( refId: 'a1' )
+         }
+         drones(  name: expectedDrone0.name, employeeId: expectedDrone0.employeeId ){
+            address( refId: 'a1' )
+         }
+         drones(  name: expectedDrone1.name, employeeId: expectedDrone1.employeeId ){
+            address( refId: 'a1' )
+         }
+      }
+      
+      assert actualCompany != null
+      assert actualCompany.name == expectedCompany.name
+      def actualAddress = actualCompany.addr
+      assert actualAddress != null
+      assert actualAddress.line1 == expectedAddress.line1
+      assert actualAddress.line2 == expectedAddress.line2
+      assert actualAddress.zip == expectedAddress.zip
+      assert actualAddress.state == expectedAddress.state
+
+      assert actualCompany.director != null
+      assert actualCompany.director.name == expectedDirector.name
+      assert actualCompany.director.employeeId == expectedDirector.employeeId
+      assert actualCompany.director.address.line1 == expectedAddress.line1
+
+      assert actualCompany.financialController != null
+      assert actualCompany.financialController.name == expectedFinancialController.name
+      assert actualCompany.financialController.employeeId == expectedFinancialController.employeeId
+      assert actualCompany.financialController.address.line1 == expectedAddress.line1
+
+      assert actualCompany.drones != null
+      assert actualCompany.drones.size() == 2
+      assert actualCompany.drones[0].name == expectedDrone0.name
+      assert actualCompany.drones[0].employeeId == expectedDrone0.employeeId
+      assert actualCompany.drones[0].address != null
+      assert actualCompany.drones[0].address.line1 == expectedAddress.line1
+      assert actualCompany.drones[1].name == expectedDrone1.name
+      assert actualCompany.drones[1].address != null
+      assert actualCompany.drones[1].employeeId == expectedDrone1.employeeId
+      assert actualCompany.drones[1].address.line1 == expectedAddress.line1
+   }
+
+   void testPlural() {
+       def dracula = builder.person(name: 'Dracula') {
+           allergy(name: 'garlic', reaction: 'moderate burns')
+           allergy(name: 'cross', reaction: 'aversion')
+           allergy(name: 'wood stake', reaction: 'death')
+           allergy(name: 'sunlight', reaction: 'burst into flames')
+           petMonkey(name: 'La-la')
+           petMonkey(name: 'Ampersand')
+       }
+
+       assert dracula.allergies.size() == 4
+       assert dracula.petMonkeys.size() == 2
+   }
+
+   void testCompanyAndEmployeeAndAddressUsingBeanFactory() {
+      def expectedAddress = new Address( line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+      def expectedEmployee = new Employee( name: 'Duke', employeeId: 1, address: expectedAddress )
+      def expectedCompany = new Company( name: 'ACME' )
+      def actualCompany = builder.bean(new Company(), name: 'ACME', employees: [] ) {
+         bean(Employee, name: 'Duke', employeeId: 1 ) {
+            bean(Address, line1: '123 Groovy Rd', zip: 12345, state: 'JV' )
+         }
+      }
+      assert actualCompany != null
+      // assert actualCompany.class == Company
+      assert actualCompany.name == expectedCompany.name
+      assert actualCompany.employees.size() == 1
+      def actualEmployee = actualCompany.employees[0]
+      // assert actualEmployee.class == Employee
+      assert actualEmployee.name == expectedEmployee.name
+      assert actualEmployee.employeeId == expectedEmployee.employeeId
+      def actualAddress = actualEmployee.address
+      assert actualAddress != null
+      // assert actualAddress.class == Address
+      assert actualAddress.line1 == expectedAddress.line1
+      assert actualAddress.line2 == expectedAddress.line2
+      assert actualAddress.zip == expectedAddress.zip
+      assert actualAddress.state == expectedAddress.state
+   }
+
+   void setUp() {
+      builder = new ObjectGraphBuilder()
+      builder.classNameResolver = "groovy.util"
+      reflectionBuilder = new ObjectGraphBuilder()
+      reflectionBuilder.classNameResolver = [ name: 'reflection', root: "groovy.util" ]
+   }
+}
+
+class Company {
+   String name
+   Address address
+   List employees = []
+
+   String toString() { "Company=[name:${name}, address:${address}, employees:${employees}]" }
+}
+
+class Address {
+   String line1
+   String line2
+   int zip
+   String state
+
+   String toString() { "Address=[line1:${line1}, line2:${line2}, zip:${zip}, state:${state}]" }
+}
+
+class Employee {
+   String name
+   int employeeId
+   Address address
+   Company company
+
+   String toString() { "Employee=[name:${name}, employeeId:${employeeId}, address:${address}, company:${company.name}]" }
+}
+
+class ReflectionCompany {
+   String name
+   Address addr
+   Employee director
+   Employee financialController
+   List<Employee> drones
+
+   String toString() { "Company=[name:${name}, address:${address}, director:${md}, financialController:${cio}, drones:${drones}]" }
+}
+
+class Person {
+    String name
+    List allergies = []
+    List petMonkeys = []
+
+    String toString() { "Person=[name:${name}, allergies:${allergies}, petMonkeys:${petMonkeys}]" }
+}
+
+class Allergy {
+    String name
+    String reaction
+
+    String toString() { "Allergy=[name:${name}, reaction:${reaction}]" }
+}
+
+class PetMonkey {
+    String name
+
+    String toString() { "PetMonkey=[name:${name}]" }
 }
diff --git a/src/test/org/codehaus/groovy/ast/CodeVisitorSupportTest.groovy b/src/test/org/codehaus/groovy/ast/CodeVisitorSupportTest.groovy
index 79c1a33..471a6fe 100644
--- a/src/test/org/codehaus/groovy/ast/CodeVisitorSupportTest.groovy
+++ b/src/test/org/codehaus/groovy/ast/CodeVisitorSupportTest.groovy
@@ -42,7 +42,7 @@ class CodeVisitorSupportTest extends GroovyTestCase {
         assert visitor.history[2] == BooleanExpression
         assert visitor.history[3] == BlockStatement
         assert visitor.history[4] == BlockStatement
-        assert visitor.history.size == 5
+        assert visitor.history.size() == 5
     }
 
     void testEmptyStatementsOnIfElse() {
@@ -57,7 +57,7 @@ class CodeVisitorSupportTest extends GroovyTestCase {
         assert visitor.history[2] == BooleanExpression
         assert visitor.history[3] == BlockStatement
         assert visitor.history[4] == EmptyStatement
-        assert visitor.history.size == 5
+        assert visitor.history.size() == 5
     }
 
     void testTryCatchFinally() {
diff --git a/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy b/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy
index 60983fd..37e4f7a 100644
--- a/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy
+++ b/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy
@@ -340,14 +340,14 @@ assert (a..<b) == null
 
     void testPropertyExpression() {
         isRendered """
-assert a.size == null
-       | |    |
-       | 1    false
-       [9]
+assert a.bytes == null
+       | |     |
+       | [65]  false
+       'A'
 
         """, {
-            def a = [9]
-            assert a.size == null
+            def a = 'A'
+            assert a.bytes == null
         }
 
         isRendered """
diff --git a/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy b/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy
index cec4851..467dacc 100644
--- a/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy
+++ b/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy
@@ -156,7 +156,7 @@ class EvaluationTest extends GroovyTestCase {
     }
 
     void testPropertyExpression() {
-        assert [1,2,3].size == 3
+        assert 'A'.bytes == [65] as byte[]
         assert (new Properties().next.next.next.x = 10) == 10
         assert Integer.MIN_VALUE < Integer.MAX_VALUE
     }


[groovy] 02/02: add an additional test method

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 8fc0e23cfe48f379a3a1ab59a9433ab3973ce384
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Apr 17 11:00:14 2019 +1000

    add an additional test method
---
 .../src/main/java/groovy/test/GroovyAssert.java            | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java b/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
index 831f64a..917fed0 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
@@ -26,6 +26,7 @@ import org.junit.Test;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.math.BigDecimal;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Logger;
 
@@ -333,6 +334,19 @@ public class GroovyAssert extends org.junit.Assert {
         return true;
     }
 
+    /**
+     * @return true if the JDK version is at least the version given by specVersion (e.g. "1.8", "9.0")
+     * @since 2.5.7
+     */
+    public static boolean isAtLeastJdk(String specVersion) {
+        boolean result = false;
+        try {
+            result = new BigDecimal(System.getProperty("java.specification.version")).compareTo(new BigDecimal(specVersion)) >= 0;
+        } catch (Exception ignore) {
+        }
+        return result;
+    }
+
     private static String buildExceptionList(Throwable th) {
         StringBuilder sb = new StringBuilder();
         int level = 0;