/src/unit/com/erlang4j/internal/process/StateMachineOneStateThreadTest.java

http://erlang4j.googlecode.com/ · Java · 83 lines · 64 code · 17 blank · 2 comment · 2 complexity · 660d3b64fe3545040c279b3059ff0789 MD5 · raw file

  1. package com.erlang4j.internal.process;
  2. import static com.erlang4j.api.Erlang4jMessageLanguage.atom;
  3. import static com.erlang4j.api.Erlang4jMessageLanguage.binding;
  4. import static com.erlang4j.api.Erlang4jMessageLanguage.state;
  5. import static com.erlang4j.api.Erlang4jMessageLanguage.string;
  6. import static com.erlang4j.api.Erlang4jMessageLanguage.tuple;
  7. import junit.framework.TestCase;
  8. import com.ericsson.otp.erlang.OtpErlangPid;
  9. import com.ericsson.otp.erlang.OtpNode;
  10. import com.erlang4j.api.exceptionHandler.SysoutExceptionHandler;
  11. import com.erlang4j.internal.adapters.MockAdapter;
  12. import com.erlang4j.internal.basicIo.MockBasicMailBox;
  13. import com.erlang4j.tests.Erlang4JTestHelper;
  14. public class StateMachineOneStateThreadTest extends TestCase {
  15. private OtpErlangPid self;
  16. private MockBasicMailBox mockBasicMailBox;
  17. private StateMachine process;
  18. private MockAdapter adapter1;
  19. private MockAdapter adapter2;
  20. private MockAdapter adapter3;
  21. public void testIsAlive() throws InterruptedException {
  22. assertFalse(process.isAlive());
  23. MessageProcessorThread thread = process.spawn();
  24. assertTrue(thread.isAlive()); // I know this is potential race condition...but this should always be true
  25. // because of the code in spawn, so if it EVER goes wrong its bad
  26. assertTrue(process.isAlive());
  27. while (adapter3.getCount() < 1)
  28. Thread.sleep(0);
  29. assertTrue(thread.isAlive());
  30. assertTrue(process.isAlive());
  31. thread.terminate();
  32. assertFalse(process.isAlive());
  33. assertFalse(thread.isAlive()); // I know this is potential race condition...but this should always be false
  34. // because of the code in terminate, so if it EVER goes wrong its bad
  35. }
  36. public void testAdaptersGotCalled() throws InterruptedException {
  37. MessageProcessorThread thread = process.spawn();
  38. while (adapter3.getCount() < 1)
  39. Thread.sleep(0);
  40. assertEquals(1, adapter1.getCount());
  41. assertEquals(1, adapter2.getCount());
  42. assertEquals(1, adapter3.getCount());
  43. assertEquals(binding("Initial", "initial", "Value", "value1"), adapter1.context);
  44. assertEquals(binding("Initial", "initial"), adapter2.context);
  45. assertEquals(binding("Initial", "initial"), adapter3.context);
  46. thread.terminate();
  47. }
  48. public void testWithNoAdapters() {
  49. process = new StateMachine(mockBasicMailBox, new SysoutExceptionHandler(), binding("Initial", "initial"));
  50. Erlang4JTestHelper.assertThrows(IllegalStateException.class, new Runnable() {
  51. public void run() {
  52. process.spawn();
  53. }
  54. });
  55. }
  56. @Override
  57. protected void setUp() throws Exception {
  58. super.setUp();
  59. self = new OtpNode("asd").createPid();
  60. mockBasicMailBox = new MockBasicMailBox(self, tuple(atom("one"), string("value1")), atom("two"), string("initial"));
  61. adapter1 = new MockAdapter("{one,Value}");
  62. adapter2 = new MockAdapter("two");
  63. adapter3 = new MockAdapter("Initial");
  64. process = new StateMachine(mockBasicMailBox, new SysoutExceptionHandler(), binding("Initial", "initial"), state(null, adapter1, adapter2, adapter3));
  65. }
  66. }