Skip to content

Instantly share code, notes, and snippets.

@aalmiray
Created June 25, 2010 20:36
Show Gist options
  • Save aalmiray/453408 to your computer and use it in GitHub Desktop.
Save aalmiray/453408 to your computer and use it in GitHub Desktop.
package griffon.util
import org.codehaus.groovy.control.CompilationFailedException
class ListenerTest extends GroovyTestCase {
void testSimpleValues() {
GroovyShell shell = new GroovyShell()
shell.evaluate("""
import griffon.util.Listener
import groovy.beans.Bindable
class EventHolder {
static event
}
@Bindable
class Producer {
@Listener({EventHolder.event = it})
String value1
@Listener(foo)
String value2
def foo = { EventHolder.event = it }
}
assert !EventHolder.event
Producer p = new Producer(value1: 'Griffon')
assert EventHolder.event
assert EventHolder.event.propertyName == 'value1'
assert EventHolder.event.newValue == 'Griffon'
EventHolder.event = null
p.value2 = 'Groovy'
assert EventHolder.event
assert EventHolder.event.propertyName == 'value2'
assert EventHolder.event.newValue == 'Groovy'
""")
}
void testListValues() {
GroovyShell shell = new GroovyShell()
shell.evaluate("""
import griffon.util.Listener
import groovy.beans.Bindable
class EventHolder2 {
static List events = []
}
@Bindable
class Producer2 {
@Listener([{EventHolder2.events << it},
{EventHolder2.events << it}])
String value1
@Listener([foo, bar])
String value2
def foo = { EventHolder2.events << it }
def bar = { EventHolder2.events << it }
}
assert !EventHolder2.events
def p = new Producer2(value1: 'Griffon')
assert EventHolder2.events
assert EventHolder2.events[0].propertyName == 'value1'
assert EventHolder2.events[0].newValue == 'Griffon'
assert EventHolder2.events[1].propertyName == 'value1'
assert EventHolder2.events[1].newValue == 'Griffon'
EventHolder2.events = []
p.value2 = 'Groovy'
assert EventHolder2.events
assert EventHolder2.events[0].propertyName == 'value2'
assert EventHolder2.events[0].newValue == 'Groovy'
assert EventHolder2.events[1].propertyName == 'value2'
assert EventHolder2.events[1].newValue == 'Groovy'
""")
}
void testAnnotatedClass() {
GroovyShell shell = new GroovyShell()
shell.evaluate("""
import griffon.util.Listener
import groovy.beans.Bindable
class EventHolder3 {
static event
}
@Bindable
@Listener({EventHolder3.event = it})
class Producer3 {
String value1
String value2
}
@Bindable
@Listener(foo)
class Producer4 {
String value1
String value2
def foo = { EventHolder3.event = it }
}
assert !EventHolder3.event
def p = new Producer3(value1: 'Griffon')
assert EventHolder3.event
assert EventHolder3.event.propertyName == 'value1'
assert EventHolder3.event.newValue == 'Griffon'
EventHolder3.event = null
p.value2 = 'Groovy'
assert EventHolder3.event
assert EventHolder3.event.propertyName == 'value2'
assert EventHolder3.event.newValue == 'Groovy'
EventHolder3.event = null
p = new Producer4(value1: 'Griffon')
assert EventHolder3.event
assert EventHolder3.event.propertyName == 'value1'
assert EventHolder3.event.newValue == 'Griffon'
EventHolder3.event = null
p.value2 = 'Groovy'
assert EventHolder3.event
assert EventHolder3.event.propertyName == 'value2'
assert EventHolder3.event.newValue == 'Groovy'
""")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment