|
Groovy example source code file (InnerClassTest.groovy)
The Groovy InnerClassTest.groovy source code
package gls.innerClass
import gls.CompilableTestSupport
class InnerClassTest extends CompilableTestSupport {
void testTimerAIC() {
assertScript """
boolean called = false
Timer timer = new Timer()
timer.schedule(new TimerTask() {
void run() {
called = true
}
}, 0)
sleep 100
assert called
"""
}
void testAICReferenceInClosure() {
assertScript """
def y = [true]
def o = new Object() {
def foo() {
def c = {
assert y[0]
}
c()
}
}
o.foo()
"""
}
void testExtendsObjectAndAccessAFinalVariableInScope() {
assertScript """
final String objName = "My name is Guillaume"
assert new Object() {
String toString() { objName }
}.toString() == objName
"""
}
void testExtendsObjectAndReferenceAMethodParameterWithinAGString() {
assertScript """
Object makeObj0(String name) {
new Object() {
String toString() { "My name is \${name}" }
}
}
assert makeObj0("Guillaume").toString() == "My name is Guillaume"
"""
}
void testExtendsObjectAndReferenceAGStringPropertyDependingOnAMethodParameter() {
assertScript """
Object makeObj1(String name) {
new Object() {
String objName = "My name is \${name}"
String toString() { objName }
}
}
assert makeObj1("Guillaume").toString() == "My name is Guillaume"
"""
}
void testUsageOfInitializerBlockWithinAnAIC () {
assertScript """
Object makeObj2(String name) {
new Object() {
String objName
// initializer block
{
objName = "My name is " + name
}
String toString() {
objName
}
}
}
assert makeObj2("Guillaume").toString() == "My name is Guillaume"
"""
}
void testStaticInnerClass() {
assertScript """
import java.lang.reflect.Modifier
class A {
static class B{}
}
def x = new A.B()
assert x != null
def mods = A.B.modifiers
assert Modifier.isPublic(mods)
"""
assertScript """
class A {
static class B{}
}
assert A.declaredClasses.length==1
assert A.declaredClasses[0]==A.B
"""
}
void testNonStaticInnerClass_FAILS() {
if (notYetImplemented()) return
shouldNotCompile """
class A {
class B {}
}
def x = new A.B()
"""
}
void testAnonymousInnerClass() {
assertScript """
class Foo {}
def x = new Foo(){
def bar() { 1 }
}
assert x.bar() == 1
"""
}
void testLocalVariable() {
assertScript """
class Foo {}
final val = 2
def x = new Foo() {
def bar() { val }
}
assert x.bar() == val
assert x.bar() == 2
"""
}
void testConstructor() {
shouldNotCompile """
class Foo {}
def x = new Foo() {
Foo() {}
}
"""
}
void testUsageOfOuterField() {
assertScript """
interface Run {
def run()
}
class Foo {
private x = 1
def foo() {
def runner = new Run() {
def run() { return x }
}
runner.run()
}
void x(y) { x = y }
}
def foo = new Foo()
assert foo.foo() == 1
foo.x(2)
assert foo.foo() == 2
"""
assertScript """
interface Run {
def run()
}
class Foo {
private static x = 1
static foo() {
def runner = new Run() {
def run() { return x }
}
runner.run()
}
static x(y) { x = y }
}
assert Foo.foo() == 1
Foo.x(2)
assert Foo.foo() == 2
"""
}
void testUsageOfOuterFieldOverriden_FAILS() {
if (notYetImplemented()) return
assertScript """
interface Run {
def run()
}
class Foo {
private x = 1
def foo() {
def runner = new Run(){
def run() { return x }
}
runner.run()
}
void setX(y) { x=y }
}
class Bar extends Foo {
def x = "string"
}
def bar = new Bar()
assert bar.foo() == 1
bar.x(2)
assert bar.foo() == 2
bar.x = "new string"
assert bar.foo() == 2
"""
//TODO: static part
}
void testUsageOfOuterMethod() {
assertScript """
interface Run {
def run()
}
class Foo {
private x(){1}
def foo() {
def runner = new Run(){
def run() { return x() }
}
runner.run()
}
}
def foo = new Foo()
assert foo.foo() == 1
"""
assertScript """
interface Run {
def run()
}
class Foo {
private static x() {1}
def foo() {
def runner = new Run() {
def run() { return x() }
}
runner.run()
}
}
def foo = new Foo()
assert foo.foo() == 1
"""
}
void testUsageOfOuterMethodOverriden() {
assertScript """
interface Run {
def run()
}
class Foo {
private x(){1}
def foo() {
def runner = new Run(){
def run() { return x() }
}
runner.run()
}
}
class Bar extends Foo{
def x() { 2 }
}
def bar = new Bar()
assert bar.foo() == 1
"""
assertScript """
interface Run {
def run()
}
class Foo {
private static x() { 1 }
static foo() {
def runner = new Run() {
def run() { return x() }
}
runner.run()
}
}
class Bar extends Foo {
static x() { 2 }
}
def bar = new Bar()
assert bar.foo() == 1
"""
}
void testClassOutputOrdering() {
// this does actually not do much, but before this
// change the inner class was tried to be executed
// because a class ordering bug. The main method
// makes the Foo class executeable, but Foo$Bar is
// not. So if Foo$Bar is returned, asserScript will
// fail. If Foo is returned, asserScript will not
// fail.
assertScript """
class Foo {
static class Bar{}
static main(args){}
}
"""
}
void testInnerClassDotThisUsage() {
assertScript """
class A{
int x = 0;
class B{
int y = 2;
class C {
void foo() {
A.this.x = 1
A.B.this.y = 2*B.this.y;
}
}
}
}
def a = new A()
def b = new A.B(a)
def c = new A.B.C(b)
c.foo()
assert a.x == 1
assert b.y == 4
"""
}
void testImplicitThisPassingWithNamedArguments() {
def oc = new MyOuterClass4028()
assert oc.foo().propMap.size() == 2
}
void testThis0 () {
assertScript """
class A {
static def field = 10
void main (a) {
new C ().r ()
}
class C {
def r () {
4.times {
new B(it).u (it)
}
}
}
class B {
def s
B (s) { this.s = s}
def u (i) { println i + s + field }
}}"""
}
}
class MyOuterClass4028 {
def foo() {
new MyInnerClass4028(fName: 'Roshan', lName: 'Dawrani')
}
class MyInnerClass4028 {
Map propMap
def MyInnerClass4028(Map propMap) {
this.propMap = propMap
}
}
}
Other Groovy examples (source code examples)Here is a short list of links related to this Groovy InnerClassTest.groovy source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.