@main[]
$a[^A::create[]]
$b[^B::create[]]
Testing old implementation bugs:
ok: ^MAIN:a.test[]
ok: ^b.ok[$a]
bug1: ^b.bug1[$a]
bug2: ^b.bug2[]
bug3: ^b.bug3[]
Testing new implementation:
Dynamic properties:
^b.test_property[]
Static class properties:
^B:test_property[]
Misc:
^b.test_implementation[]
@CLASS
A
@create[]
$valueA[value]
@test[]
self: $self.CLASS_NAME, ^if(^reflection:dynamical[]){dynamical}{static}
@GET_property[]
Get A property: '$valueA', self $self.CLASS_NAME, ^if(^reflection:dynamical[]){dynamical}{static}
@SET_property[v]
$MAIN:log[Set A property: '$v', self $self.CLASS_NAME, ^if(^reflection:dynamical[]){dynamical}{static}]
$valueA[$v]
@CLASS
B
@BASE
A
@create[]
^BASE:create[]
$valueB[anotherValue]
$valueC[dynamic]
@ok[a]
^a.test[]
@bug1[a]
$A:whatever ^a.test[]
@bug2[]
^MAIN:a.test[]
@bug3[]
$t[test] ^A:$t[]
@GET_property[]
Get B property: '$valueB', self $self.CLASS_NAME, ^if(^reflection:dynamical[]){dynamical}{static}
@SET_property[v]
$MAIN:log[Set B property: '$v', self $self.CLASS_NAME, ^if(^reflection:dynamical[]){dynamical}{static}]
$valueB[$v]
@test_property[]
$property
$property[-]
$MAIN:log
$B:property
$B:property[ups]
$MAIN:log
$A:property
$A:property[-]
$MAIN:log
$BASE:property
$BASE:property[-]
$MAIN:log
@dump[o]
class: $o.CLASS_NAME
content: ^json:string[$o; $.indent(true) ]
@test_implementation[]
B:CLASS: ^dump[$B:CLASS] - before
B::create: ^dump[^B::create[]] - no valueA and valueB as they are now class B properties
B:CLASS: ^dump[$B:CLASS] - after
testing constructor:
A::create: ^dump[^A::create[]]
A:CLASS: ^dump[$A:CLASS]
A:CLASS_NAME: $A:CLASS_NAME
B:CLASS_NAME: $B:CLASS_NAME
E-mail: