diff --git a/tests/closure_event.aer b/tests/closure_event.aer new file mode 100644 index 0000000..12627b3 --- /dev/null +++ b/tests/closure_event.aer @@ -0,0 +1,41 @@ +class Button { + public callback $OnBeforeClick; + public callback $OnAfterClick; + public string $Name; + + public void __construct() { + $this->Name = 'MyButton'; + } + + public void Click() { + $this->DoBeforeClick(); + print('Click!'); + $this->DoAfterClick(); + } + + private void DoBeforeClick() { + if($this->OnBeforeClick) { + callback $event = $this->OnBeforeClick; + $event($this); + } + } + + private void DoAfterClick() { + if($this->OnAfterClick) { + callback $event = $this->OnAfterClick; + $event($this); + } + } + +} + +class Program { + + void main() { + object $MyWidget = new Button(); + $MyWidget->OnBeforeClick = void(object $Sender) { print($Sender->Name + ' (Before Click)'); }; + $MyWidget->OnAfterClick = void(object $Sender) { print($Sender->Name + ' (After Click)'); }; + $MyWidget->Click(); + } + +} diff --git a/tests/closure_event.exp b/tests/closure_event.exp new file mode 100644 index 0000000..750a77a --- /dev/null +++ b/tests/closure_event.exp @@ -0,0 +1 @@ +MyButton (Before Click)Click!MyButton (After Click)