|
Groovy example source code file (InnerClassTest.groovy)
The Groovy InnerClassTest.groovy source codepackage 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.