1
class MetaClassRegistryTest extends GroovyTestCase {
2
def registry = GroovySystem.metaClassRegistry
4
void testListenerAdditionAndRemoval() {
6
def registry = GroovySystem.metaClassRegistry
7
registry.updateConstantMetaClass = {event -> called = event}
8
Integer.metaClass.foo = {->}
11
assert registry.constantMetaClassChangeListeners.size() == 2
12
registry.removeConstantMetaClassChangeListener(registry.constantMetaClassChangeListeners[1])
13
assert registry.constantMetaClassChangeListeners.size() == 1
15
def oldCalled = called;
16
Integer.metaClass = null
17
Integer.metaClass.bar = {}
19
shouldFail(MissingMethodException) {
22
assert called == oldCalled
23
Integer.metaClass = null
24
shouldFail(MissingMethodException) {
29
void testDefaultListenerRemoval() {
30
assert registry.constantMetaClassChangeListeners.size() == 1
31
registry.removeConstantMetaClassChangeListener(registry.constantMetaClassChangeListeners[0])
32
assert registry.constantMetaClassChangeListeners.size() == 1
35
void testIteratorIteration(){
36
// at the start the iteration might show elements, even if
37
// they are no longer in use. After they are added to the list,
38
// they can not be collected for now.
40
registry.each { metaClasses <<it }
42
// we add one more constant meta class and then count them to
43
// see if the numberfits
44
Integer.metaClass.foo = {}
46
registry.each{count++}
47
assert count == 1+metaClasses.size()
49
// we remove the class again, but it might still show up
50
// in the list.. so we don't test that
51
Integer.metaClass = null
54
void testIteratorRemove() {
55
Integer.metaClass.foo {->1}
57
for (def it = registry.iterator(); it.hasNext;) {
60
shouldFail(MissingMethodException) {
b'\\ No newline at end of file'