blob: 6b3444b91c980771a742e91a1af5ffa7afa00f54 [file] [log] [blame]
package groovy.util
class ObjectGraphBuilderTest extends GroovyTestCase {
ObjectGraphBuilder builder
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 setUp() {
builder = new ObjectGraphBuilder()
builder.classNameResolver = "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}]" }
}