/interpreter/tags/at2dist170907/test/edu/vub/at/objects/natives/EscapeTest.java

http://ambienttalk.googlecode.com/ · Java · 49 lines · 32 code · 12 blank · 5 comment · 0 complexity · 20acbdb880061d2e08805eda7f8b529b MD5 · raw file

  1. package edu.vub.at.objects.natives;
  2. import edu.vub.at.AmbientTalkTest;
  3. import edu.vub.at.exceptions.XIllegalOperation;
  4. /**
  5. * The purpose of this class is to test the escape() primitive method of block closures.
  6. *
  7. * @author tvcutsem
  8. */
  9. public class EscapeTest extends AmbientTalkTest {
  10. public static void main(String[] args) {
  11. junit.swingui.TestRunner.run(EscapeTest.class);
  12. }
  13. public void testNominalCase() {
  14. evalAndCompareTo("{ |quit| 1 + 2; quit(3 + 4); 1/0 }.escape()", "7");
  15. }
  16. public void testNominalNilCase() {
  17. evalAndCompareTo("{ |quit| 1 + 2; quit(); 1/0 }.escape()", "nil");
  18. }
  19. public void testNestedCase() {
  20. evalAndCompareTo("{ |quit1| 1 + 2; { |quit2| quit1(3 + 4); 1/0 }.escape() ; 1/0 }.escape()", "7");
  21. }
  22. public void testDeepEscapeCase() {
  23. evalAndCompareTo("{ |quit| def foo(q) { bar(q); 1 }; def bar(q) { q(41); 2 }; foo(quit) }.escape() + 1", "42");
  24. }
  25. public void testNotInvokedCase() {
  26. evalAndCompareTo("{ |quit| 1 + 2; 3 + 4; 5 + 6 }.escape()", "11");
  27. }
  28. public void testFaultyCase() {
  29. evalAndTestException("def temp := nil; { |quit| temp := quit }.escape(); temp(5)", XIllegalOperation.class);
  30. }
  31. public void testFaultySelfEvalCase() {
  32. evalAndTestException("({ |quit| quit }.escape())()", XIllegalOperation.class);
  33. }
  34. public void testFaultyNestedCase() {
  35. evalAndTestException("def temp := nil; { |quit| { |quit2| temp := quit2; quit() }.escape() }.escape(); temp()", XIllegalOperation.class);
  36. }
  37. }