@aj-shadow/actorjs-documentation-text 0.0.0-aj-beta.221

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/.gitattributes +26 -0
  2. package/Documentation/Document-global-Be-100-more-efficient.txt +31 -0
  3. package/Documentation/Document-global-actorjs-trigger-mock-and-intercept-anything.txt +21 -0
  4. package/Documentation/Document-global-advanced-visualization.txt +28 -0
  5. package/Documentation/Document-global-debugging.txt +4 -0
  6. package/Documentation/Document-global-divide-and-reuse.txt +37 -0
  7. package/Documentation/Document-global-general-separation.txt +2 -0
  8. package/Documentation/Document-global-markup-anchor.txt +6 -0
  9. package/Documentation/Document-global-markup-api-status.txt +39 -0
  10. package/Documentation/Document-global-markup-chart-line.txt +18 -0
  11. package/Documentation/Document-global-markup-documentation-status.txt +39 -0
  12. package/Documentation/Document-global-markup-documentation.txt +72 -0
  13. package/Documentation/Document-global-markup-embed.txt +6 -0
  14. package/Documentation/Document-global-markup-flowchart.txt +88 -0
  15. package/Documentation/Document-global-markup-html.txt +122 -0
  16. package/Documentation/Document-global-markup-ie.txt +18 -0
  17. package/Documentation/Document-global-markup-image.txt +55 -0
  18. package/Documentation/Document-global-markup-lab.txt +63 -0
  19. package/Documentation/Document-global-markup-markup.txt +21 -0
  20. package/Documentation/Document-global-markup-navigation.txt +25 -0
  21. package/Documentation/Document-global-markup-node-diagram.txt +163 -0
  22. package/Documentation/Document-global-markup-note.txt +6 -0
  23. package/Documentation/Document-global-markup-ref.txt +6 -0
  24. package/Documentation/Document-global-markup-sequence-diagram.txt +215 -0
  25. package/Documentation/Document-global-markup-state-machine.txt +121 -0
  26. package/Documentation/Document-global-markup-table.txt +34 -0
  27. package/Documentation/Document-global-navigation-pane.txt +3 -0
  28. package/Documentation/Document-global-navigation.txt +2 -0
  29. package/Documentation/Document-global-specialized-javascript-editors.txt +2 -0
  30. package/Documentation/Document-global-stacks-connection.txt +2 -0
  31. package/Documentation/Document-global-stacks-server.txt +2 -0
  32. package/Documentation/Document-global-test-environment-overview.txt +15 -0
  33. package/Documentation/Document-global-the-architecture.txt +51 -0
  34. package/Documentation/Document-global-the-development-environment.txt +5 -0
  35. package/Documentation/Document-global-the-test-environment.txt +15 -0
  36. package/Documentation/Document-global-think-ahead.txt +35 -0
  37. package/Documentation/Document-global-thinking-in-actors-unlimited.txt +1 -0
  38. package/Documentation/Document-global-what-is-a-stack.txt +2 -0
  39. package/Documentation/Document-global-why-actorjs.txt +52 -0
  40. package/Documentation/Document-global-why-actors-unlimited.txt +182 -0
  41. package/Documentation/Document-global-x-test-case-tool.txt +2 -0
  42. package/Documentation/Navigation-Documentation-actorjs-global.txt +372 -0
  43. package/Documentation/Navigation-Documentation-actorsite-global.txt +363 -0
  44. package/Documentation/abstractions/Document-global-addressing.txt +81 -0
  45. package/Documentation/abstractions/Document-global-configuration-floor.txt +2 -0
  46. package/Documentation/abstractions/Document-global-content.txt +3 -0
  47. package/Documentation/abstractions/Document-global-functions-test.txt +4 -0
  48. package/Documentation/abstractions/Document-global-functions-unde-test.txt +2 -0
  49. package/Documentation/abstractions/Document-global-load-test.txt +3 -0
  50. package/Documentation/abstractions/Document-global-repo.txt +79 -0
  51. package/Documentation/abstractions/Document-global-shared-data.txt +5 -0
  52. package/Documentation/abstractions/Document-global-system-to-test.txt +2 -0
  53. package/Documentation/abstractions/Document-global-system-under-test.txt +3 -0
  54. package/Documentation/abstractions/Document-global-test-data.txt +251 -0
  55. package/Documentation/abstractions/Document-global-test-suite.txt +37 -0
  56. package/Documentation/abstractions/Document-global-verification-data.txt +103 -0
  57. package/Documentation/abstractions/actor/Document-global-actor-condition.txt +74 -0
  58. package/Documentation/abstractions/actor/Document-global-actor-local.txt +44 -0
  59. package/Documentation/abstractions/actor/Document-global-actor-originating.txt +100 -0
  60. package/Documentation/abstractions/actor/Document-global-actor-proxy.txt +119 -0
  61. package/Documentation/abstractions/actor/Document-global-actor-terminating.txt +101 -0
  62. package/Documentation/abstractions/actor/Document-global-actor.txt +90 -0
  63. package/Documentation/abstractions/actor/Document-global-execution-states.txt +21 -0
  64. package/Documentation/abstractions/actorpart/Document-global-actorpart.txt +2 -0
  65. package/Documentation/abstractions/stack/Document-global-client-connection.txt +3 -0
  66. package/Documentation/abstractions/stack/Document-global-connection.txt +3 -0
  67. package/Documentation/abstractions/stack/Document-global-decoder.txt +3 -0
  68. package/Documentation/abstractions/stack/Document-global-encoder.txt +3 -0
  69. package/Documentation/abstractions/stack/Document-global-message.txt +4 -0
  70. package/Documentation/abstractions/stack/Document-global-server-connection.txt +3 -0
  71. package/Documentation/abstractions/stack/Document-global-stack.txt +12 -0
  72. package/Documentation/abstractions/stack/Document-global-worker.txt +3 -0
  73. package/Documentation/abstractions/test-case/Document-global-phases.txt +30 -0
  74. package/Documentation/abstractions/test-case/Document-global-test-case-result.txt +23 -0
  75. package/Documentation/abstractions/test-case/Document-global-test-case.txt +199 -0
  76. package/Documentation/actor-api/Document-global-actor-part.txt +7 -0
  77. package/Documentation/actor-api/Document-global-actor.txt +375 -0
  78. package/Documentation/actor-api/Document-global-async.txt +176 -0
  79. package/Documentation/actor-api/Document-global-client-stack.txt +215 -0
  80. package/Documentation/actor-api/Document-global-content.txt +106 -0
  81. package/Documentation/actor-api/Document-global-logger.txt +426 -0
  82. package/Documentation/actor-api/Document-global-process.txt +7 -0
  83. package/Documentation/actor-api/Document-global-server-stack.txt +213 -0
  84. package/Documentation/actor-api/Document-global-shared-data.txt +259 -0
  85. package/Documentation/actor-api/Document-global-test-data.txt +816 -0
  86. package/Documentation/actor-api/Document-global-timer.txt +70 -0
  87. package/Documentation/actor-api/Document-global-verification-data.txt +624 -0
  88. package/Documentation/connection-worker-api/Document-global-logger.txt +3 -0
  89. package/Documentation/documentation-references.json +199 -0
  90. package/Documentation/embedded/Document-global-test-case-result.txt +10 -0
  91. package/Documentation/howto/Document-global-create-actor.txt +1 -0
  92. package/Documentation/howto/Document-global-create-stack.txt +1 -0
  93. package/Documentation/howto/Document-global-create-test-case.txt +1 -0
  94. package/Documentation/howto/Document-global-create-test-suite.txt +1 -0
  95. package/Documentation/howto/Document-global-define-addresses.txt +1 -0
  96. package/Documentation/howto/Document-global-define-fut.txt +1 -0
  97. package/Documentation/howto/Document-global-define-sut.txt +16 -0
  98. package/Documentation/howto/Document-global-full-workflow.txt +143 -0
  99. package/Documentation/howto/Document-global-normal-workflow.txt +58 -0
  100. package/Documentation/howto/Document-global-prerequisites.txt +8 -0
  101. package/Documentation/howto/prerequisites/Document-global-install-actorjs.txt +64 -0
  102. package/Documentation/howto/prerequisites/Document-global-install-git.txt +26 -0
  103. package/Documentation/howto/prerequisites/Document-global-install-nodejs.txt +19 -0
  104. package/Documentation/markup/Document-global-markup-test-case.txt +6 -0
  105. package/Documentation/markup/Document-global-markup-test-suite.txt +13 -0
  106. package/Documentation/markup/embed/Document-global-inner_markup_tc.txt +164 -0
  107. package/Documentation/nodejs-api/Document-global-fs.txt +7 -0
  108. package/Documentation/stack-api/Document-global-ascii-dictionary.txt +108 -0
  109. package/Documentation/stack-api/Document-global-binary-log.txt +91 -0
  110. package/Documentation/stack-api/Document-global-bit-byte.txt +80 -0
  111. package/Documentation/stack-api/Document-global-content-base.txt +169 -0
  112. package/Documentation/stack-api/Document-global-ip-log.txt +101 -0
  113. package/Documentation/stack-api/Document-global-log-inner.txt +152 -0
  114. package/Documentation/stack-api/Document-global-log-part-error.txt +12 -0
  115. package/Documentation/stack-api/Document-global-log-part-ref.txt +80 -0
  116. package/Documentation/stack-api/Document-global-log-part-text.txt +81 -0
  117. package/Documentation/tools/Document-global-actors.txt +196 -0
  118. package/Documentation/tools/Document-global-addressing.txt +38 -0
  119. package/Documentation/tools/Document-global-content.txt +1 -0
  120. package/Documentation/tools/Document-global-global-test-data.txt +197 -0
  121. package/Documentation/tools/Document-global-stacks.txt +1 -0
  122. package/Documentation/tools/Document-global-test-case-analyze.txt +3 -0
  123. package/Documentation/tools/Document-global-test-case-debug.txt +16 -0
  124. package/Documentation/tools/Document-global-test-case-definition.txt +37 -0
  125. package/Documentation/tools/Document-global-test-case-execution.txt +28 -0
  126. package/Documentation/tools/Document-global-test-case-log.txt +95 -0
  127. package/Documentation/tools/Document-global-test-case-sequence-diagram.txt +17 -0
  128. package/Documentation/tools/Document-global-test-case-specification.txt +3 -0
  129. package/Documentation/tools/Document-global-test-cases.txt +11 -0
  130. package/Documentation/tools/Document-global-tool-test-suite.txt +202 -0
  131. package/Education/Document-global-add-your-first-addresses.txt +75 -0
  132. package/Education/Document-global-define-your-first-sut.txt +18 -0
  133. package/Education/Document-global-make-your-first-actors.txt +35 -0
  134. package/Education/Document-global-make-your-first-test-case.txt +43 -0
  135. package/Education/Document-global-make-your-first-test-suite.txt +29 -0
  136. package/Education/Document-global-share-your-work.txt +35 -0
  137. package/Education/Navigation-Education-actorjs-global.txt +31 -0
  138. package/LICENSE.txt +96 -0
  139. package/README.md +5 -0
  140. package/Workshop/Document-global-actordemo-image-ai.txt +5 -0
  141. package/Workshop/Document-global-actordemo-login.txt +10 -0
  142. package/Workshop/Document-global-actordemo-site.txt +3 -0
  143. package/Workshop/Document-global-actordemo-start.txt +5 -0
  144. package/Workshop/Document-global-actordemo-the-architecture.txt +27 -0
  145. package/Workshop/Document-global-introduction-actor.txt +84 -0
  146. package/Workshop/Document-global-introduction-actorjs.txt +42 -0
  147. package/Workshop/Document-global-introduction-stack.txt +25 -0
  148. package/Workshop/Document-global-introduction-system-under-test.txt +102 -0
  149. package/Workshop/Document-global-introduction-test-case.txt +50 -0
  150. package/Workshop/Document-global-introduction-test-suite.txt +31 -0
  151. package/Workshop/Document-global-login-with-puppeter.txt +45 -0
  152. package/Workshop/Document-global-mock-with-http.txt +83 -0
  153. package/Workshop/Document-global-mock-with-icap.txt +94 -0
  154. package/Workshop/Document-global-prerequisites-actorJs.txt +18 -0
  155. package/Workshop/Document-global-prerequisites-actordemo.txt +15 -0
  156. package/Workshop/Document-global-trigger-with-http.txt +93 -0
  157. package/Workshop/Document-global-trigger-with-puppeter.txt +49 -0
  158. package/Workshop/Navigation-Workshop-actorjs-global.txt +86 -0
  159. package/npm-shrinkwrap.json +13 -0
  160. package/package.json +10 -0
@@ -0,0 +1,119 @@
1
+ # **Actor Proxy**
2
+
3
+ ## **Description**
4
+ The [[REF=, ABS_Actor_Proxy]] does have client and server capabilities. It means that it can use both [[REF=, ABS_Stack_Client_Connection]]s and [[REF=, ABS_Stack_Server_Connection]]s which can can setup connections and communicate with servers and listen for connections and communicate with clients. The [[REF=, ABS_Actor_Proxy]] can be used in all [[REF=, ABS_Test_Case_Phases]].
5
+
6
+ ## **States**
7
+ The [[REF=, ABS_Actor_Proxy]] supports the following [[REF=, ABS_Actor_State_Execution]]:
8
+ * ***data**
9
+ * ***initServer**
10
+ * ***initClient**
11
+ * ***run**
12
+ * ***exit**
13
+
14
+ ```state
15
+ Title: ActorProxy
16
+ Config(width: 400, height: 200, widthBias: 25, heightBias: 25)
17
+
18
+ States[data, initServer, initClient, run]
19
+ States[, done, exit]
20
+
21
+ data -> initServer[success]: success
22
+ data -> done[failure]: error, failure, interrupt
23
+ initServer -> initClient[success]: success
24
+ initServer -> done[failure]: error, failure, interrupt
25
+ initClient -> run[success]: success
26
+ initClient -> done[failure]: error, failure, interrupt
27
+ run -> exit[normal]: always
28
+ exit -> done[normal]: always
29
+ ```
30
+
31
+ ## **Example 1 - Actor Proxy Wizard**
32
+ Here is the code produced by the [[REF=, ABS_Actor_Proxy]] Wizard.
33
+ ```javascript
34
+
35
+ const ActorApi = require('actor-api');
36
+
37
+
38
+ class NotImplementedProxy extends ActorApi.ActorProxy {
39
+ constructor() {
40
+ super();
41
+ this.clientConnection = this.create();
42
+ this.serverConnection = this.create();
43
+ }
44
+
45
+ *data() {
46
+ }
47
+
48
+ *initServer() {
49
+ this.createServer('[stack]', this.serverConnection);
50
+ }
51
+
52
+ *initClient() {
53
+ this.createConnection('[stack]', this.clientConnection);
54
+ }
55
+
56
+ *run() {
57
+ this.serverConnection.accept();
58
+ }
59
+
60
+ *exit() {
61
+ this.closeConnection(this.serverConnection);
62
+ this.closeConnection(this.clientConnection);
63
+ }
64
+ }
65
+
66
+ module.exports = NotImplementedProxy;
67
+
68
+ ```
69
+
70
+ ## **Example 2 - static http**
71
+ This is a very simple example where the [[REF=, ABS_Actor]] listens for incoming connections and connects to a web server. When it gets an HTTP GET it proxies it to the outgoing connection. When it get an response it proxies it to the incoming connection.
72
+
73
+ ```javascript
74
+
75
+ const ActorApi = require('actor-api');
76
+ const HttpApi = require('http-stack-api');
77
+
78
+
79
+ class StaticHttpActorProxy extends ActorApi.ActorProxy {
80
+ constructor() {
81
+ super();
82
+ this.clientConnection = this.create();
83
+ this.serverConnection = this.create();
84
+ }
85
+
86
+ *data() {
87
+ this.requistUri = this.getTestDataString('Request-URI', '/demo');
88
+ }
89
+
90
+ *initServer() {
91
+ this.createServer('http', this.serverConnection);
92
+ }
93
+
94
+ *initClient() {
95
+ this.createConnection('http', this.clientConnection);
96
+ }
97
+
98
+ *run() {
99
+ this.serverConnection .accept();
100
+
101
+ const request = this.serverConnection .receive();
102
+ this.clientConnection.send(request );
103
+
104
+ const response = this.clientConnection.receive();
105
+ VERIFY_VALUE(HttpApi.StatusCode.OK, response.statusCode, ' HTTP response line status code:');
106
+ VERIFY_CONTENT_OPTIONAL('content-name', response.getHeaderNumber(HttpApi.Header.CONTENT_LENGTH), response.getBody());
107
+
108
+ this.serverConnection.send(response ));
109
+ }
110
+
111
+ *exit() {
112
+ this.closeConnection(this.serverConnection);
113
+ this.closeConnection(this.clientConnection);
114
+ }
115
+ }
116
+
117
+ module.exports = StaticHttpActorProxy;
118
+
119
+ ```
@@ -0,0 +1,101 @@
1
+ # **Actor Terminating**
2
+
3
+ ## **Description**
4
+ The [[REF=, ABS_Actor_Terminating]] does have server capabilities. It means that it can use [[REF=, ABS_Stack_Server_Connection]]s which can listen for connections and communicate with clients. The [[REF=, ABS_Actor_Terminating]] can be used in all [[REF=, ABS_Test_Case_Phases]].
5
+
6
+ ## **States**
7
+ The [[REF=, ABS_Actor_Terminating]] supports the following [[REF=, ABS_Actor_State_Execution]]:
8
+ * ***data**
9
+ * ***initServer**
10
+ * ***run**
11
+ * ***exit**
12
+
13
+ ```state
14
+ Title: ActorTerminating
15
+ Config(width: 400, height: 200, widthBias: 25, heightBias: 25)
16
+
17
+ States[data, initServer, run]
18
+ States[, done, exit]
19
+
20
+ data -> initServer[success]: success
21
+ data -> done[failure]: error, failure, interrupt
22
+ initServer -> run[success]: success
23
+ initServer -> done[failure]: error, failure, interrupt
24
+ run -> exit[normal]: always
25
+ exit -> done[normal]: always
26
+ ```
27
+
28
+ ## **Example 1 - Actor Terminating Wizard**
29
+ Here is the code produced by the [[REF=, ABS_Actor_Terminating]] Wizard.
30
+
31
+ ```javascript
32
+
33
+ const ActorApi = require('actor-api');
34
+
35
+
36
+ class NotImplementedTerm extends ActorApi.ActorTerminating {
37
+ constructor() {
38
+ super();
39
+ this.connection = this.create();
40
+ }
41
+
42
+ *data() {
43
+ }
44
+
45
+ *initServer() {
46
+ this.createServer('[stack]', this.connection);
47
+ }
48
+
49
+ *run() {
50
+ this.connection.accept();
51
+ }
52
+
53
+ *exit() {
54
+ this.closeConnection(this.connection);
55
+ }
56
+ }
57
+
58
+ module.exports = NotImplementedTerm;
59
+
60
+ ```
61
+
62
+ ## **Example 2 - static http**
63
+ This is a very simple example where the [[REF=, ABS_Actor]] listens for incoming connections. It then receives an HTTP GET and sends a response with the status code 200.
64
+
65
+ ```javascript
66
+
67
+ const ActorApi = require('actor-api');
68
+ const HttpApi = require('http-stack-api');
69
+ const HttpGet200OkResponse = require('./msg/HttpGet200OkResponse');
70
+
71
+
72
+ class StaticHttpActorTerm extends ActorApi.ActorTerminating {
73
+ constructor() {
74
+ super();
75
+ this.httpConnection = this.create();
76
+ this.content = null;
77
+ }
78
+
79
+ *data() {
80
+ this.content = this.getContent('content-name');
81
+ }
82
+
83
+ *initServer() {
84
+ this.createServer('http', this.httpConnection);
85
+ }
86
+
87
+ *run() {
88
+ this.httpConnection.accept();
89
+
90
+ const request = this.httpConnection.receive();
91
+ this.httpConnection.send(new HttpGet200OkResponse(this.content));
92
+ }
93
+
94
+ *exit() {
95
+ this.closeConnection(this.httpConnection);
96
+ }
97
+ }
98
+
99
+ module.exports = StaticHttpActorTerm;
100
+
101
+ ```
@@ -0,0 +1,90 @@
1
+ # **Actor Abstraction**
2
+
3
+ ## **Description**
4
+ An [[REF=, ABS_Actor]] is the fundamental building block of ActorJs. [[REF=, ABS_Actor]]s are a small pieces of code that are executed in parallel or serial with other [[REF=, ABS_Actor]]s in a [[REF=, ABS_Test_Case]]. They acts instead of simulators, mocked up processes or real systems. The Actors will be reused in a lot of Test Cases. ActorJs starts, stops and interrupts [[REF=, ABS_Actor]]s depending on the data and the outcome of the [[REF=, ABS_Test_Case]].
5
+
6
+ The [[REF=, ABS_Actor]] is 100% code, which gives the test developer full control. For maximal reuse and optimal maintenance, the [[REF=, ABS_Actor]]s has its own:
7
+ * Logic
8
+ * Flow
9
+
10
+ ActorJs will provide the [[REF=, ABS_Actor]] with:
11
+ * [[REF=Addresses, ABS_Addressing]]
12
+ * [[REF=, ABS_Test_Data]]
13
+ * [[REF=, ABS_Verification_Data]]
14
+
15
+ A [[REF=, ABS_Test_Case]] contains [[REF=, ABS_Actor]]s to isolate the [[REF=, ABS_System_Under_Test]]. An [[REF=, ABS_Actor]] can be reused over and over again in different [[REF=, ABS_Test_Case]]s. It can change its behavior depending on [[REF=, ABS_Test_Data]].
16
+
17
+ ## **Actor Types**
18
+ Thera are five different types of [[REF=, ABS_Actor]]s with different characteristics.
19
+ * [[REF=, ABS_Actor_Originating]]: which has client capabilities.
20
+ * [[REF=, ABS_Actor_Terminating]]: which has server capabilities.
21
+ * [[REF=, ABS_Actor_Proxy]]: which has client and server capabilities.
22
+ * [[REF=, ABS_Actor_Local]]: which has not either client or server capabilities.
23
+ * [[REF=, ABS_Actor_Condition]]: which has client capabilities. But it is executed in both the [[REF=, ABS_Test_Case_Phase_Precondition]] and the [[REF=, ABS_Test_Case_Phase_Postcondition]].
24
+
25
+ [[EMBED=abstractions/actor/execution-states]]
26
+
27
+ ## **Example**
28
+ We have a [[REF=, ABS_System_To_Test]]. It contains a Browser, a Proxy and a web-server.
29
+ ```node
30
+ Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 50, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
31
+
32
+ Nodes[Browser, , Proxy, , web-server]
33
+
34
+ Groups[STT(0; 5; 0; 1)]
35
+
36
+ Browser => Proxy[http]: http
37
+ Proxy => web-server[http]: http
38
+ ```
39
+ If we want to test the Proxy we'll define it as the [[REF=, ABS_System_Under_Test]]. Then we have to simulate the Browser and the web server with [[REF=, ABS_Actor]]s.
40
+ ```node
41
+ Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 50, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
42
+
43
+ Nodes[Browser, , Proxy, , web-server]
44
+
45
+ Groups[Actor Orig(0; 1; 0; 1), SUT(2; 3; 0; 1), Actor Term(4; 5; 0; 1)]
46
+
47
+ Browser => Proxy[http]: http
48
+ Proxy => web-server[http]: http
49
+ ```
50
+ We want to test when the Browser gets an image from the web-server via the Proxy. The Use Case looks like this:
51
+ ```seq
52
+ Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
53
+
54
+ Nodes[Browser, Proxy, web-server]
55
+ Browser => Proxy[http]: Get /image.png
56
+ Proxy => web-server[http]: Get /image.png
57
+ web-server => Proxy[http]: 200 OK
58
+ Proxy => Browser[http]: 200 OK
59
+ ```
60
+ To implement this Use Case we need:
61
+ * a HTTP Stack
62
+ * a HTTP get image request message
63
+ * a HTTP get image response message
64
+
65
+ When having them in place it is just to implement the [[REF=, ABS_Actor]]s.
66
+ 1) The Browser [[REF=, ABS_Actor]] sends a request and receives a response.
67
+ 2) The web-server [[REF=, ABS_Actor]] receives a request and sends a response.
68
+
69
+ ## **Implementation**
70
+ Minimal code is needed to implement simple [[REF=, ABS_Actor]]s. We recommend that [[REF=, ABS_Actor]]s are kept simple and just implements the part of the flow in the Use Case. But of course an [[REF=, ABS_Actor]] can implement a whole simulator but then nothing is won compared to use of simulators.
71
+ #### **Browser**
72
+ ```javascript
73
+
74
+ *run() {
75
+ this.httpConnection.send(new HttpMsgGetRequest(this.requistUri));
76
+ const response = this.httpConnection.receive();
77
+ }
78
+
79
+ ```
80
+ #### **web-server**
81
+ ```javascript
82
+
83
+ *run() {
84
+ this.httpConnection.accept();
85
+ const request = this.httpConnection.receive();
86
+ this.httpConnection.send(new HttpGet200OkResponse(this.content));
87
+ }
88
+
89
+ ```
90
+
@@ -0,0 +1,21 @@
1
+ ## **Execution States**
2
+ The methods to override when implementing an [[REF=, ABS_Actor]] are called execution states. It is because an [[REF=, ABS_Actor]] is a small state-machine and a method with the name of the new state, execution state, will be called when the [[REF=, ABS_Actor]] state changes:
3
+
4
+ ### **The execution states**
5
+ * ***data**: in this state all [[REF=, ABS_Test_Data]] must be read. This state will be executed first for all [[REF=, ABS_Actor]]s independent of the execution parameter in the Actor table.
6
+ * ***initServer**: in this state the [[REF=, ABS_Actor]]s with server capabilities can listen on incoming connections from clients. If it is done here ActorJs makes sure that the [[REF=, ABS_Actor]]s with client capabilities which is started at the same time will be called after the servers have started.
7
+ * ***initClient**: in this state the [[REF=, ABS_Actor]]s with client capabilities can connect to servers. If it is done here ActorJs makes sure that the [[REF=, ABS_Actor]]s with server capabilities which is started at the same time will be called before.
8
+ * ***run**: this state is the state where the actual test is suppost to be performed.
9
+ * ***exit**: in this state the client and servers that are not already closed must be closed.
10
+
11
+ ### **Actor Condition execution states**
12
+ The [[REF=, ABS_Actor_Condition]] is are a little bit special though it is executed in both the [[REF=, ABS_Test_Case_Phase_Precondition]] and in the [[REF=, ABS_Test_Case_Phase_Postcondition]]. There task is change the configuration of the [[REF=, ABS_System_Under_Test]] and restore the configuration afterwards.
13
+
14
+ Another special case is that if an [[REF=, ABS_Actor_Condition]] have succeeded in the [[REF=, ABS_Test_Case_Phase_Precondition]] the [[REF=, ABS_Test_Case_Phase_Postcondition]] will always be executed even when we have a failure and other [[REF=, ABS_Actor]]s are interrupted. This is because we still have to restore the [[REF=, ABS_System_Under_Test]].
15
+ * ***initClientPre**: same as initClient but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
16
+ * ***runPre**: same as run but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
17
+ * ***exitPre**: same as exit but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
18
+ * ***initClientPost**: same as initClient but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
19
+ * ***runPost**: same as run but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
20
+ * ***exitPost**: same as exit but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
21
+
@@ -0,0 +1,2 @@
1
+ # **Actor Part Abstraction**
2
+ ## **Description**
@@ -0,0 +1,3 @@
1
+ # **Stack Client Connection** `TODO`
2
+
3
+ ## **Description**
@@ -0,0 +1,3 @@
1
+ # **Stack Connection** `TODO`
2
+
3
+ ## **Description**
@@ -0,0 +1,3 @@
1
+ # **Stack Decoder**
2
+
3
+ ## **Description**
@@ -0,0 +1,3 @@
1
+ # **Stack Encoder** `TODO`
2
+
3
+ ## **Description**
@@ -0,0 +1,4 @@
1
+ # **Stack Message**
2
+
3
+ ## **Description**
4
+ The [[REF=, ABS_Stack_Message]] object contains all data sent or received with Stack. It is just a [[REF=, MDN_object]] decided by the Stack owner. The [[REF=, ABS_Stack_Encoder]] and the [[REF=, ABS_Stack_Decoder]] are depending on the format of the [[REF=, ABS_Stack_Message]].
@@ -0,0 +1,3 @@
1
+ # **Stack Server Connection** `TODO`
2
+
3
+ ## **Description**
@@ -0,0 +1,12 @@
1
+ # **Stack Abstraction**
2
+ ## **Description**
3
+ An implementation of a protocol is called a [[REF=, ABS_Stack]]. A [[REF=, ABS_Stack]] contains an [[REF=, ABS_Stack_Encoder]] and a [[REF=, ABS_Stack_Decoder]]. When testing we do not want the [[REF=, ABS_Stack]]s to timeout so no timers are implemented in the [[REF=, ABS_Stack]]s. When testing timeouts the implementation will be done in an [Actor](actors) to be able to test all scenarios without having to update a [[REF=, ABS_Stack]].
4
+
5
+ ## **Objects**
6
+ There are six objects needed in most of the stacks to be able to implement them.
7
+ * [ConnectionClient](client-connection)
8
+ * [ConnectionServer](server-connection)
9
+ * [Encoder](encoder)
10
+ * [Decoder](decoder)
11
+ * [Message](message)
12
+ * [Worker](worker)
@@ -0,0 +1,3 @@
1
+ # **Stack Worker** `TODO`
2
+
3
+ ## **Description**
@@ -0,0 +1,30 @@
1
+ ## **Test Case Phases**
2
+ A [[REF=, ABS_Test_Case]] is divided to three phases.
3
+
4
+ * **precondition**: this phase is used to prepare the [[REF=, ABS_System_Under_Test]], if it is needed for the [[REF=, ABS_Test_Case]]. There can be a lot of things that it might to do before running the actual test:
5
+ * Change configuration on the [System Under Test](system-under-tests)
6
+ * Add, remove or change files on the [System Under Test](system-under-tests)
7
+ * Change data in the Database of the [System Under Test](system-under-tests)
8
+ * **execution**: in this phase the actual test of the [[REF=, ABS_System_Under_Test]] is performed.
9
+ * **postcondition**: this phase is used to restore the configuration of the [[REF=, ABS_System_Under_Test]] to the [[REF=, ABS_System_Configuration_Floor]], if it is changed in the precondition phase. Thas means that it must always be possible to run what ever [[REF=, ABS_Test_Case]] independent of which [[REF=, ABS_Test_Case]]s have been running before it.
10
+
11
+ ```seq
12
+ Nodes[pre, post, orig, SUT, term]
13
+ pre => SUT[unknown]: config
14
+ orig => SUT[http]: Get /image
15
+ SUT => term[http]: Get /image
16
+ term => SUT[http]: 200 Ok
17
+ SUT => orig[http]: 200 Ok
18
+ post => SUT[unknown]: restore config
19
+ ```
20
+
21
+ [[ANCHOR={"id":"execution-phase-postcondition","visible":true}]]
22
+ ### **Precondition Phase**
23
+
24
+
25
+ [[ANCHOR={"id":"execution-phase-execution","visible":true}]]
26
+ ### **Execution Phase**
27
+
28
+
29
+ [[ANCHOR={"id":"execution-phase-precondition","visible":true}]]
30
+ ### **Postcondition Phase**
@@ -0,0 +1,23 @@
1
+ These are the possible execution results from an [[REF=, ABS_Actor_State]]:
2
+
3
+ ***Not Executed Result***
4
+ * [[RESULT=none]] **none** value: **0**: Not executed so there are no result.
5
+
6
+ ***Success Results***
7
+ * [[RESULT=n/a]] **n/a** value: **1**: Not Applicable, this [[REF=, ABS_Actor_State]] is not supported by this type of [[REF=, ABS_Actor]].
8
+ * [[RESULT=n_impl]] **n_impl** value: **2**: Not Implemented, the [[REF=, ABS_Actor]] has not implemented this [[REF=, ABS_Actor_State]].
9
+ * [[RESULT=success]] **success** value: **3**: Success, the result of the [[REF=, ABS_Actor_State]] is Success.
10
+
11
+ ***Failure Results***
12
+ * [[RESULT=n_exec]] **n_exec** value: **4**: Not Executed, the [[REF=, ABS_Actor_State]] is not executed because some other [[REF=, ABS_Actor_State]] has returned a **Failure Result**.
13
+ * [[RESULT=interrupt]] **interrupt** value: **5**: Interrupted, the [[REF=, ABS_Actor_State]] has been interrupted because some other [[REF=, ABS_Actor_State]] has returned a **Failure Result**.
14
+ * [[RESULT=error]] **error** value: **6**: Error, ActorJs has catched an exception in the [[REF=, ABS_Actor_State]].
15
+ * [[RESULT=failure]] **failure** value: **7**: Failure, A verification have failed in the [[REF=, ABS_Actor_State]].
16
+ * [[RESULT=timeout]] **timeout** value: **8**: Timeout, the [[REF=, ABS_Actor_State]] has not completed its task in time.
17
+
18
+ ***Reflection Results***
19
+ * ([[RESULT=reflection]] **reflection** value: **9**): If the [[REF=, ABS_Actor]] can not be created there will be no [[REF=, ABS_Actor_State]] result. Then the [[REF=, ABS_Actor]] will return **reflection** as its result.
20
+
21
+ An [[REF=, ABS_Actor]] will get the result with the highest value returned from an one of its [[REF=, ABS_Actor_State]]s.
22
+ A [[REF=, ABS_Test_Case]] will get the result with the highest value returned from one of its [[REF=, ABS_Actor]]s.
23
+ A [[REF=, ABS_Test_Suite]] will get the result with the highest value returned from one of its [[REF=, ABS_Test_Case]]s.
@@ -0,0 +1,199 @@
1
+ # **Test Case Abstraction**
2
+
3
+ [[ANCHOR={"id":"6cf956b9-7c22-4271-bbc3-f47f7ddcc1d5","visible":true}]]
4
+ [[NOTE={"guid":"dad57cec-1318-4676-8955-75d1b1d4926a"}]]
5
+ ## **Description**
6
+ The general definition of what a Test Case is can be found at [[REF=, WIKI_Test_Case]].
7
+
8
+ An ActorJs [[REF=, ABS_Test_Case]] is 100% data driven. The data to provide is:
9
+ * [[REF=, ABS_Actor]]s
10
+ * [[REF=, ABS_Test_Data]]
11
+ * [[REF=, ABS_Verification_Data]]
12
+
13
+ Even though a [[REF=, ABS_Test_Case]] is 100% data driven you still have 100% control of the code. The code is written as [[REF=, ABS_Actor]]s. It is the [[REF=, ABS_Actor]]s who decides what [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] they need.
14
+
15
+ [[EMBED=abstractions/test-case/phases]]
16
+
17
+ [[ANCHOR={"id":"bfee328d-0855-4cfd-b13c-d785185f858b","visible":true}]]
18
+ [[NOTE={"guid":"b70b4de2-daf0-4407-8321-aba957cbb98e"}]]
19
+ ## **Example**
20
+ A [[REF=, ABS_System_Under_Test]], **Image Service**, delivers images to clients and converts the format of the images if needed.
21
+
22
+ ```node
23
+ Config(nodeWidth: 90, nodeHeight: 35, nodeWidthBetween: 65, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
24
+
25
+ Nodes[, , Image Store]
26
+ Nodes[Client, Image Service]
27
+ Nodes[, , Image Converter]
28
+
29
+
30
+ Client => Image Service[http]: http
31
+ Image Service => Image Store[http]: http
32
+ Image Service => Image Converter[icap]: icap
33
+ ```
34
+ We can make a sequence diagram with the different parts of the example.
35
+ ```seq
36
+ Title: Getting and converting an image
37
+ Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
38
+
39
+ Nodes[ClientOrig, SUT, ImageConverterTerm, ImageStoreTerm]
40
+ ClientOrig => SUT[http]: GET /i.jpg
41
+ SUT => ImageStoreTerm[http]: Get /i.jpg
42
+ ImageStoreTerm => SUT[http]: 200 OK (gif)
43
+ SUT => ImageConverterTerm[icap]: respmod(gif)
44
+ ImageConverterTerm => SUT[icap]: 200 OK (jpg)
45
+ SUT => ClientOrig[http]: 200 OK
46
+ ```
47
+ ___
48
+ [[ANCHOR={"id":"118c6304-7a0d-43c8-af26-f05133156a1a","visible":true}]]
49
+ [[NOTE={"guid":"cdebf447-4c25-4840-b02a-b3045ddd89c1"}]]
50
+ ### **Breaking Down**
51
+ * The Image Service is the SUT that we will Test.
52
+ * We know have to simulate the Client, the Image Store and the Image Converter.
53
+
54
+ Without ActorJS this is `a very complex task`. We need three simulators or a combination of simulators and real systems. But with `real systems negative testing and other scenarios are almost impossible to perform`.
55
+
56
+ [[IE=With ActorJs this is very simple]].
57
+
58
+ ___
59
+ [[ANCHOR={"id":"df5cafb7-c0b6-49d7-aa68-fd235b33db6d","visible":true}]]
60
+ [[NOTE={"guid":"cb5be92c-c873-4e93-94b3-9159b3e7bd55"}]]
61
+ ### **Creating the Actors**
62
+ We will create three [[REF=, ABS_Actor]]s:
63
+ * ***ClientOrig***: sends an http request and receive an http response.
64
+ * ***ImageStoreTerm***: receives an http request and sends http response.
65
+ * ***ImageConverterTerm***: receives an icap request and sends icap response.
66
+
67
+ Usually the [[REF=, ABS_Actor]]s below contains little bit more code. To make them reusable and maintainable [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] is used. We just wants to [[IE=explain how extremely simple]] it is to get the message flow to work. The [[REF=, ABS_Actor]]s are created in the [[REF=, TOOL_Actor_Editor]].
68
+ [[ANCHOR={"id":"ace1dcf8-03cd-4757-b56e-b02363d6fccf","visible":true}]]
69
+ [[NOTE={"guid":"c314cb2f-ff28-406b-ab19-1d5a2af85d8f"}]]
70
+ ### **ClientOrig**
71
+ ```javascript
72
+
73
+ const ActorApi = require('actor-api');
74
+ const HttpMsgGetImage= require('./msg/HttpMsgGetImage');
75
+
76
+
77
+ class ClientOrig extends ActorApi.ActorOriginating {
78
+ constructor() {
79
+ super();
80
+ this.httpConnection = this.create();
81
+ }
82
+
83
+ *initClient() {
84
+ this.createConnection('http', this.httpConnection);
85
+ }
86
+
87
+ *run() {
88
+ this.httpConnection.send(new HttpMsgGetImage());
89
+ const response = this.httpConnection.receive();
90
+ }
91
+
92
+ *exit() {
93
+ this.closeConnection(this.httpConnection);
94
+ }
95
+ }
96
+ ```
97
+ [[ANCHOR={"id":"3d257f98-db9e-4ee6-9876-f639d82878a5","visible":true}]]
98
+ [[NOTE={"guid":"9107d3ba-ce82-448e-b34d-95453d389d41"}]]
99
+ ### **ImageStoreTerm**
100
+ ```javascript
101
+
102
+ const ActorApi = require('actor-api');
103
+ const HttpGet200OkResponse = require('./msg/HttpGet200OkResponse');
104
+
105
+
106
+ class ImageStoreTerm extends ActorApi.ActorTerminating {
107
+ constructor() {
108
+ super();
109
+ this.httpConnection = this.create();
110
+ }
111
+
112
+ *initServer() {
113
+ this.createServer('http', this.httpConnection);
114
+ }
115
+
116
+ *run() {
117
+ this.httpConnection.accept();
118
+ const request = this.httpConnection.receive();
119
+ this.httpConnection.send(new HttpGet200OkResponse());
120
+ }
121
+
122
+ *exit() {
123
+ this.closeConnection(this.httpConnection);
124
+ }
125
+ }
126
+ ```
127
+ [[ANCHOR={"id":"1c9df4ae-c852-4239-b780-259d804fb519","visible":true}]]
128
+ [[NOTE={"guid":"b7190304-6c33-4884-8652-ba6a25f2cb93"}]]
129
+ ### **ImageConverterTerm**
130
+ ```javascript
131
+
132
+ const ActorApi = require('actor-api');
133
+ const IcapGet200OkResponse= require('./msg/IcapGet200OkResponse');
134
+
135
+
136
+ class ImageConverterTerm extends ActorApi.ActorTerminating {
137
+ constructor() {
138
+ super();
139
+ this.icapConnection = this.create();
140
+ }
141
+
142
+ *initServer() {
143
+ this.createServer('icap', this.icapConnection);
144
+ }
145
+
146
+ *run() {
147
+ this.icapConnection.accept();
148
+ const request = this.icapConnection.receive();
149
+ this.icapConnection.send(new IcapGet200OkResponse());
150
+ }
151
+
152
+ *exit() {
153
+ this.closeConnection(this.icapConnection);
154
+ }
155
+ }
156
+ ```
157
+ ___
158
+ [[ANCHOR={"id":"2efacc83-2b86-4b7a-b501-3393838d60aa","visible":true}]]
159
+ [[NOTE={"guid":"cf7ddd87-6f6c-4554-9360-237d22e50072"}]]
160
+ ### **Creating a Test Case**
161
+ [[ANCHOR={"id":"033dfe0d-d81e-41a6-922a-5ab5c7a44600","visible":true}]]
162
+ [[NOTE={"guid":"9179d915-0cd1-4ee6-b7a4-e6e8dbe8db68"}]]
163
+ #### **Table**
164
+ To Create a [[REF=, ABS_Test_Case]] it is just to create a table with the [[REF=, ABS_Actor]]s and their addresses. In most real [[REF=, ABS_Test_Case]]s there will also be tables for [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]].
165
+ ```tc
166
+ |Actor |
167
+ |name |node|type|phase|execution|src |dst |srv|testData|verification|
168
+ |Actors-global.demo.ClientOrig |orig|exec| | |i_service| | | | |
169
+ |Actors-global.demo.ImageStoreTerm |term|exec| | | |i_store | | | |
170
+ |Actors-global.demo.ImageConverterTerm|term|exec| | | |i_converter| | | |
171
+ | | | | | | | | | | |
172
+ ```
173
+ [[ANCHOR={"id":"61705a37-25a2-4aab-83a5-3892ea2c11cd","visible":true}]]
174
+ [[NOTE={"guid":"359224a6-3d7b-4825-9e3d-b2bcdcc44091"}]]
175
+ #### **Markup**
176
+ Editing the tables will be done in a markup text format. This means that they will be easy to store in a repo and it will be easy to merge them.
177
+ ```escape
178
+
179
+
180
+
181
+ |Actor |
182
+ |name |type|phase|execution|src|dst |srv |testData|verification|
183
+ |Actors-global.demo.ClientOrig |orig|exec | | |i_service| | | |
184
+ |Actors-global.demo.ImageStoreTerm |term|exec | | | |i_store | | |
185
+ |Actors-global.demo.ImageConverterTerm|term|exec | | | |i_store | | |
186
+ ```
187
+ <br>
188
+ <br>
189
+ <br>
190
+ <br>
191
+ <br>
192
+ <br>
193
+ <br>
194
+ <br>
195
+ <br>
196
+ <br>
197
+ <br>
198
+ <br>
199
+ <br>
@@ -0,0 +1,7 @@
1
+ # **ActorPart API**
2
+ [[API-STATUS=STABLE, ]]
3
+ [[DOC-STATUS=NOT-YET, ]]
4
+
5
+ [[NOTE={"guid":"07d866ab-5ca0-4839-b84f-d462aaf57e6b"}]]
6
+ [[ANCHOR={"id":"cb3ec7cd-9356-4cf9-a86f-f2f29f59231a","visible":true}]]
7
+ ## **Description**