/interpreter/tags/at_build150307/test/edu/vub/at/objects/natives/StripesTest.java

http://ambienttalk.googlecode.com/ · Java · 103 lines · 51 code · 18 blank · 34 comment · 0 complexity · 75d0dbef953a1487940652116d486c1c MD5 · raw file

  1. package edu.vub.at.objects.natives;
  2. import edu.vub.at.AmbientTalkTest;
  3. import edu.vub.at.eval.Evaluator;
  4. import edu.vub.at.exceptions.InterpreterException;
  5. import edu.vub.at.objects.ATObject;
  6. import edu.vub.at.objects.ATStripe;
  7. import edu.vub.at.objects.natives.grammar.AGSymbol;
  8. /**
  9. * Tests stripe definition, tagging, checking.
  10. *
  11. * @author tvcutsem
  12. */
  13. public class StripesTest extends AmbientTalkTest {
  14. // test fixture
  15. // defstripe A <: stripe;
  16. private NATStripe stripeA_ = NATStripe.atValue(AGSymbol.jAlloc("A"), NATTable.EMPTY);
  17. // defstripe B <: A;
  18. private NATStripe stripeB_ = NATStripe.atValue(AGSymbol.jAlloc("B"),
  19. NATTable.atValue(new ATObject[] { stripeA_ }));
  20. // defstripe C <: A;
  21. private NATStripe stripeC_ = NATStripe.atValue(AGSymbol.jAlloc("C"),
  22. NATTable.atValue(new ATObject[] { stripeA_ }));
  23. // defstripe D <: B, C;
  24. private NATStripe stripeD_ = NATStripe.atValue(AGSymbol.jAlloc("D"),
  25. NATTable.atValue(new ATObject[] { stripeB_, stripeC_ }));
  26. // object: { nil } stripedWith: [ B ]
  27. private NATObject striped_ = new NATObject(Evaluator.getGlobalLexicalScope(), new ATStripe[] { stripeB_ });
  28. // stripes defined without parent have the root stripe as single parent
  29. public void testParentlessStripe() throws InterpreterException {
  30. assertTrue(stripeA_.base_getParentStripes().base_getLength().equals(NATNumber.ONE));
  31. ATStripe root = stripeA_.base_getParentStripes().base_at(NATNumber.ONE).asStripe();
  32. assertEquals(NATStripe.OBJRootStripe._INSTANCE_, root);
  33. }
  34. // stripe subtyping:
  35. public void testPositiveSubstriping() throws InterpreterException {
  36. ATStripe root = NATStripe.OBJRootStripe._INSTANCE_;
  37. // root <: root
  38. assertTrue(root.base_isSubstripeOf(root).asNativeBoolean().javaValue);
  39. // A <: A
  40. assertTrue(stripeA_.base_isSubstripeOf(stripeA_).asNativeBoolean().javaValue);
  41. // A <: root
  42. assertTrue(stripeA_.base_isSubstripeOf(root).asNativeBoolean().javaValue);
  43. // B <: A
  44. assertTrue(stripeB_.base_isSubstripeOf(stripeA_).asNativeBoolean().javaValue);
  45. // D <: B
  46. assertTrue(stripeD_.base_isSubstripeOf(stripeB_).asNativeBoolean().javaValue);
  47. // D <: C
  48. assertTrue(stripeD_.base_isSubstripeOf(stripeC_).asNativeBoolean().javaValue);
  49. // D <: A
  50. assertTrue(stripeD_.base_isSubstripeOf(stripeA_).asNativeBoolean().javaValue);
  51. // D <: root
  52. assertTrue(stripeD_.base_isSubstripeOf(root).asNativeBoolean().javaValue);
  53. }
  54. public void testNegativeSubstriping() throws InterpreterException {
  55. ATStripe root = NATStripe.OBJRootStripe._INSTANCE_;
  56. // root <: A
  57. assertFalse(root.base_isSubstripeOf(stripeA_).asNativeBoolean().javaValue);
  58. // A <: D
  59. assertFalse(stripeA_.base_isSubstripeOf(stripeD_).asNativeBoolean().javaValue);
  60. // A <: B
  61. assertFalse(stripeA_.base_isSubstripeOf(stripeB_).asNativeBoolean().javaValue);
  62. // B <: C
  63. assertFalse(stripeB_.base_isSubstripeOf(stripeC_).asNativeBoolean().javaValue);
  64. // C <: B
  65. assertFalse(stripeC_.base_isSubstripeOf(stripeB_).asNativeBoolean().javaValue);
  66. // B <: D
  67. assertFalse(stripeB_.base_isSubstripeOf(stripeD_).asNativeBoolean().javaValue);
  68. }
  69. // object stripe testing:
  70. public void testObjectStripes() throws InterpreterException {
  71. // is: striped_ stripedWith: B => true
  72. assertTrue(striped_.meta_isStripedWith(stripeB_).asNativeBoolean().javaValue);
  73. // is: striped_ stripedWith: A => true
  74. assertTrue(striped_.meta_isStripedWith(stripeA_).asNativeBoolean().javaValue);
  75. // is: striped_ stripedWith: D => false
  76. assertFalse(striped_.meta_isStripedWith(stripeD_).asNativeBoolean().javaValue);
  77. // is: striped_ stripedWith: root => true
  78. assertTrue(striped_.meta_isStripedWith(NATStripe.OBJRootStripe._INSTANCE_).asNativeBoolean().javaValue);
  79. // is: striped_ stripedWith: C => false
  80. assertFalse(striped_.meta_isStripedWith(stripeC_).asNativeBoolean().javaValue);
  81. // negative test: object has no stripes
  82. NATObject nostripes = new NATObject();
  83. assertFalse(nostripes.meta_isStripedWith(stripeB_).asNativeBoolean().javaValue);
  84. }
  85. }