cauldron 0.1.3 → 0.1.5

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 (409) hide show
  1. data/.gitignore +51 -0
  2. data/Gemfile +6 -3
  3. data/Gemfile.lock +16 -3
  4. data/Rakefile +94 -92
  5. data/VERSION +1 -1
  6. data/bin/cauldron +2 -2
  7. data/cauldron.gemspec +15 -451
  8. data/features/cauldron_new_approach.feature +46 -0
  9. data/features/step_definitions/cauldron_steps.rb +11 -0
  10. data/features/step_definitions/terminal_steps.rb +0 -2
  11. data/features/support/env.rb +11 -1
  12. data/features/support/hooks.rb +5 -0
  13. data/lib/cauldron.rb +13 -7
  14. data/lib/cauldron/array_reverse_operator.rb +39 -0
  15. data/lib/cauldron/concat_operator.rb +34 -0
  16. data/lib/cauldron/if_relationship.rb +37 -0
  17. data/lib/cauldron/numeric_operator.rb +45 -0
  18. data/lib/cauldron/pot.rb +54 -162
  19. data/lib/cauldron/relationship.rb +5 -0
  20. data/lib/cauldron/terminal.rb +4 -60
  21. data/lib/cauldron/version.rb +3 -0
  22. data/lib/core/string.rb +21 -0
  23. data/sandbox.rb +27 -6
  24. data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
  25. data/spec/cauldron/concat_operator_spec.rb +89 -0
  26. data/spec/cauldron/if_relationship_spec.rb +25 -0
  27. data/spec/cauldron/numeric_operator_spec.rb +70 -0
  28. data/spec/cauldron/pot_spec.rb +81 -151
  29. data/spec/cauldron/terminal_spec.rb +1 -39
  30. data/spec/examples/adding_if_statement.yml +13 -0
  31. data/spec/examples/simple_head_theory.txt +13 -0
  32. data/spec/spec_helper.rb +1 -14
  33. data/tasks/theory_tasks.rake +207 -207
  34. metadata +92 -532
  35. data/cauldron/.autotest +0 -23
  36. data/cauldron/History.txt +0 -6
  37. data/cauldron/Manifest.txt +0 -8
  38. data/cauldron/README.txt +0 -57
  39. data/cauldron/Rakefile +0 -27
  40. data/cauldron/bin/cauldron +0 -3
  41. data/cauldron/lib/cauldron.rb +0 -3
  42. data/cauldron/test/test_cauldron.rb +0 -8
  43. data/features/cauldron_example_cases.feature +0 -13
  44. data/features/cauldron_generates_runtime_method.feature +0 -16
  45. data/features/cauldron_generates_single_paramter_methods.feature +0 -25
  46. data/features/cauldron_interactive_start_terminal.feature +0 -17
  47. data/features/cauldron_quit_terminal.feature +0 -9
  48. data/features/cauldron_start_terminal.feature +0 -12
  49. data/features/support/method_1.example +0 -3
  50. data/features/support/method_2.example +0 -6
  51. data/lib/Chain.rb +0 -771
  52. data/lib/ChainMapping.rb +0 -172
  53. data/lib/CodeHandler.rb +0 -513
  54. data/lib/Mapping.rb +0 -27
  55. data/lib/MappingValues.rb +0 -24
  56. data/lib/PartialChain.rb +0 -253
  57. data/lib/Theory.rb +0 -295
  58. data/lib/UnifiedChain.rb +0 -351
  59. data/lib/cauldron/conversion.rb +0 -15
  60. data/lib/cauldron/demos.rb +0 -280
  61. data/lib/cauldron/env.rb +0 -1
  62. data/lib/cauldron/sexp2cauldron.rb +0 -139
  63. data/lib/cauldron/theory_factory.rb +0 -10
  64. data/lib/cauldron/util/home.rb +0 -21
  65. data/lib/cauldron/util/saver.rb +0 -45
  66. data/lib/core/ActsAsCode.rb +0 -25
  67. data/lib/core/BlockToken.rb +0 -33
  68. data/lib/core/CCall.rb +0 -7
  69. data/lib/core/CTestCase.rb +0 -27
  70. data/lib/core/ClassMethodCallContainer.rb +0 -58
  71. data/lib/core/Container.rb +0 -95
  72. data/lib/core/InstanceCallContainer.rb +0 -298
  73. data/lib/core/MethodUsage.rb +0 -65
  74. data/lib/core/PrintVariables.rb +0 -25
  75. data/lib/core/TheoryGenerator.rb +0 -753
  76. data/lib/core/Token.rb +0 -7
  77. data/lib/core/assignment/Assignment.rb +0 -18
  78. data/lib/core/assignment/Equal.rb +0 -39
  79. data/lib/core/assignment/Equivalent.rb +0 -20
  80. data/lib/core/assignment/NotEqual.rb +0 -14
  81. data/lib/core/call_container/CallContainer.rb +0 -72
  82. data/lib/core/class_method_call/New.rb +0 -15
  83. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
  84. data/lib/core/declaration/Declaration.rb +0 -16
  85. data/lib/core/declaration/LiteralDeclaration.rb +0 -47
  86. data/lib/core/declaration/VariableDeclaration.rb +0 -59
  87. data/lib/core/instance_call/ArrayEach.rb +0 -23
  88. data/lib/core/instance_call/ArrayLength.rb +0 -15
  89. data/lib/core/instance_call/Chop.rb +0 -19
  90. data/lib/core/instance_call/Copy.rb +0 -22
  91. data/lib/core/instance_call/DeclaredVariable.rb +0 -18
  92. data/lib/core/instance_call/InstanceCall.rb +0 -77
  93. data/lib/core/instance_call/Params.rb +0 -15
  94. data/lib/core/instance_call/Push.rb +0 -20
  95. data/lib/core/instance_call/StringLength.rb +0 -32
  96. data/lib/core/instance_call/Times.rb +0 -20
  97. data/lib/core/instance_call/instance_calls.rb +0 -176
  98. data/lib/core/instance_call/length_equal.rb +0 -15
  99. data/lib/core/kernal/EvalCall.rb +0 -15
  100. data/lib/core/kernal/LocalVariablesCall.rb +0 -15
  101. data/lib/core/literal/Literal.rb +0 -111
  102. data/lib/core/literal/Raw.rb +0 -23
  103. data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
  104. data/lib/core/literal/StatementLiteral.rb +0 -28
  105. data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
  106. data/lib/core/method_call/ClassCall.rb +0 -33
  107. data/lib/core/method_call/DefCall.rb +0 -72
  108. data/lib/core/method_call/EvaluateClassCall.rb +0 -29
  109. data/lib/core/method_call/MethodNameCall.rb +0 -27
  110. data/lib/core/method_call/ToDeclarationCall.rb +0 -15
  111. data/lib/core/requirement/Requirement.rb +0 -292
  112. data/lib/core/runtime_class/ArrayClass.rb +0 -19
  113. data/lib/core/runtime_class/ClassCallClass.rb +0 -23
  114. data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
  115. data/lib/core/runtime_class/ClassName.rb +0 -18
  116. data/lib/core/runtime_class/DefCallClass.rb +0 -21
  117. data/lib/core/runtime_class/EqualClass.rb +0 -19
  118. data/lib/core/runtime_class/FixnumClass.rb +0 -15
  119. data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
  120. data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
  121. data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
  122. data/lib/core/runtime_class/LiteralClass.rb +0 -19
  123. data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
  124. data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
  125. data/lib/core/runtime_class/RequirementClass.rb +0 -19
  126. data/lib/core/runtime_class/ReturnClass.rb +0 -21
  127. data/lib/core/runtime_class/RuntimeClass.rb +0 -30
  128. data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
  129. data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
  130. data/lib/core/runtime_class/StatementClass.rb +0 -53
  131. data/lib/core/runtime_class/StringClass.rb +0 -23
  132. data/lib/core/runtime_class/StringLengthClass.rb +0 -19
  133. data/lib/core/runtime_class/StringVariableClass.rb +0 -19
  134. data/lib/core/runtime_class/ThisClass.rb +0 -15
  135. data/lib/core/runtime_class/UnknownClass.rb +0 -23
  136. data/lib/core/runtime_class/class_names.rb +0 -95
  137. data/lib/core/runtime_class/runtime_class.rb +0 -123
  138. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
  139. data/lib/core/runtime_method/ParametersContainer.rb +0 -29
  140. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
  141. data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
  142. data/lib/core/runtime_method/WriteParameters.rb +0 -35
  143. data/lib/core/statement/ActsAsStatement.rb +0 -20
  144. data/lib/core/statement/ArrayAccess.rb +0 -122
  145. data/lib/core/statement/BlockStatement.rb +0 -348
  146. data/lib/core/statement/DeclarationStatement.rb +0 -19
  147. data/lib/core/statement/HackStatement.rb +0 -25
  148. data/lib/core/statement/HashAccess.rb +0 -18
  149. data/lib/core/statement/OpenStatement.rb +0 -178
  150. data/lib/core/statement/RealisedStatement.rb +0 -5
  151. data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
  152. data/lib/core/statement/Statement.rb +0 -1091
  153. data/lib/core/statement/StatementGroup.rb +0 -157
  154. data/lib/core/statement/StatementStructure2.rb +0 -224
  155. data/lib/core/statement/TheoryStatement.rb +0 -68
  156. data/lib/core/statement/TopologicalStatements.rb +0 -34
  157. data/lib/core/syntax/Addition.rb +0 -26
  158. data/lib/core/syntax/BlockContainer.rb +0 -102
  159. data/lib/core/syntax/Boolean.rb +0 -15
  160. data/lib/core/syntax/Code.rb +0 -11
  161. data/lib/core/syntax/Do.rb +0 -20
  162. data/lib/core/syntax/False.rb +0 -12
  163. data/lib/core/syntax/If.rb +0 -36
  164. data/lib/core/syntax/Nil.rb +0 -15
  165. data/lib/core/syntax/Return.rb +0 -33
  166. data/lib/core/syntax/Subtract.rb +0 -19
  167. data/lib/core/syntax/This.rb +0 -40
  168. data/lib/core/syntax/True.rb +0 -20
  169. data/lib/core/syntax/syntax.rb +0 -24
  170. data/lib/core/tracking/ActsAsTrackable.rb +0 -65
  171. data/lib/core/tracking/History.rb +0 -167
  172. data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
  173. data/lib/core/tracking/Step.rb +0 -52
  174. data/lib/core/variable/ArrayVariable.rb +0 -76
  175. data/lib/core/variable/BaseVariable.rb +0 -152
  176. data/lib/core/variable/BlockVariable.rb +0 -92
  177. data/lib/core/variable/FixnumVariable.rb +0 -35
  178. data/lib/core/variable/HistoryVariable.rb +0 -8
  179. data/lib/core/variable/MethodParameter.rb +0 -179
  180. data/lib/core/variable/MethodUsageVariable.rb +0 -60
  181. data/lib/core/variable/NilVariable.rb +0 -29
  182. data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
  183. data/lib/core/variable/StatementVariable.rb +0 -72
  184. data/lib/core/variable/StepVariable.rb +0 -7
  185. data/lib/core/variable/StringVariable.rb +0 -46
  186. data/lib/core/variable/TypeVariable.rb +0 -72
  187. data/lib/core/variable/Unknown.rb +0 -102
  188. data/lib/core/variable/UnknownVariable.rb +0 -29
  189. data/lib/core/variable/Variable.rb +0 -70
  190. data/lib/core/variable/VariableContainer.rb +0 -28
  191. data/lib/core/variable/VariableIncluded.rb +0 -27
  192. data/lib/core/variable/VariableReference.rb +0 -85
  193. data/lib/error/FailedToFindStatementContainerError.rb +0 -7
  194. data/lib/error/FailedToFindStatementError.rb +0 -7
  195. data/lib/error/FailedToFindVariableError.rb +0 -7
  196. data/lib/error/FailedToLiteraliseError.rb +0 -7
  197. data/lib/error/FailedVariableMatch.rb +0 -7
  198. data/lib/error/ImproperStatementUsageError.rb +0 -7
  199. data/lib/error/IncompatiableRequirementsError.rb +0 -7
  200. data/lib/error/InvalidStatementError.rb +0 -7
  201. data/lib/error/MethodSizeError.rb +0 -7
  202. data/lib/error/RuntimeSyntaxError.rb +0 -7
  203. data/lib/error/UnexpectedStatementTypeError.rb +0 -7
  204. data/lib/error/UnknownStatementType.rb +0 -7
  205. data/lib/error/UnliteralisableError.rb +0 -7
  206. data/lib/implemented_chain.rb +0 -35
  207. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
  208. data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
  209. data/lib/intrinsic/IntrinsicObject.rb +0 -22
  210. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
  211. data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
  212. data/lib/logger/StandardLogger.rb +0 -62
  213. data/lib/required.rb +0 -222
  214. data/lib/ruby_code/Array.rb +0 -95
  215. data/lib/ruby_code/Fixnum.rb +0 -39
  216. data/lib/ruby_code/Hash.rb +0 -25
  217. data/lib/ruby_code/NilClass.rb +0 -19
  218. data/lib/ruby_code/Object.rb +0 -24
  219. data/lib/ruby_code/String.rb +0 -63
  220. data/lib/ruby_code/Symbol.rb +0 -7
  221. data/lib/standard_library/Tasks.rb +0 -12
  222. data/lib/theories.rb +0 -166
  223. data/lib/theory/ActionImplementation.rb +0 -17
  224. data/lib/theory/TheoryAction.rb +0 -100
  225. data/lib/theory/TheoryChainValidator.rb +0 -103
  226. data/lib/theory/TheoryComponent.rb +0 -59
  227. data/lib/theory/TheoryConnector.rb +0 -756
  228. data/lib/theory/TheoryDependent.rb +0 -135
  229. data/lib/theory/TheoryImplementation.rb +0 -75
  230. data/lib/theory/TheoryResult.rb +0 -131
  231. data/lib/theory/TheoryVariable.rb +0 -63
  232. data/lib/theory/theory_collection.rb +0 -62
  233. data/lib/util/ClassEvaluation.rb +0 -44
  234. data/lib/util/CodeEvaluation.rb +0 -39
  235. data/lib/util/DeclarationStatementEvaluation.rb +0 -32
  236. data/lib/util/MethodEvaluation.rb +0 -49
  237. data/lib/util/MethodTester.rb +0 -71
  238. data/lib/util/MethodValidation.rb +0 -149
  239. data/lib/util/MethodWriter.rb +0 -66
  240. data/lib/util/Parser.rb +0 -305
  241. data/lib/util/StatementCheck.rb +0 -44
  242. data/lib/util/StringToTheory.rb +0 -142
  243. data/lib/util/System.rb +0 -8
  244. data/spec/cauldron/chain_spec.rb +0 -24
  245. data/spec/cauldron/demos_spec.rb +0 -30
  246. data/spec/cauldron/runtime_method_spec.rb +0 -92
  247. data/spec/cauldron/saver_spec.rb +0 -45
  248. data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
  249. data/spec/cauldron/theory_action_spec.rb +0 -25
  250. data/spec/cauldron/theory_connector_spec.rb +0 -52
  251. data/spec/cauldron/theory_spec.rb +0 -59
  252. data/spec/cauldron/unified_chain_spec.rb +0 -140
  253. data/test/fixtures/chains/1/declaration.txt +0 -26
  254. data/test/fixtures/chains/1/dump +0 -0
  255. data/test/fixtures/chains/2/declaration.txt +0 -26
  256. data/test/fixtures/chains/2/dump +0 -0
  257. data/test/fixtures/chains/3/declaration.txt +0 -26
  258. data/test/fixtures/chains/3/dump +0 -0
  259. data/test/fixtures/implementation_results/0/declaration.txt +0 -3
  260. data/test/fixtures/implementation_results/0/dump +0 -0
  261. data/test/fixtures/theories/0/declaration.txt +0 -9
  262. data/test/fixtures/theories/0/desc +0 -10
  263. data/test/fixtures/theories/0/dump +0 -0
  264. data/test/fixtures/theories/1/declaration.txt +0 -15
  265. data/test/fixtures/theories/1/desc +0 -11
  266. data/test/fixtures/theories/1/dump +0 -0
  267. data/test/fixtures/theories/10/declaration.txt +0 -23
  268. data/test/fixtures/theories/10/desc +0 -17
  269. data/test/fixtures/theories/10/dump +0 -0
  270. data/test/fixtures/theories/11/declaration.txt +0 -20
  271. data/test/fixtures/theories/11/desc +0 -14
  272. data/test/fixtures/theories/11/dump +0 -0
  273. data/test/fixtures/theories/12/declaration.txt +0 -18
  274. data/test/fixtures/theories/12/desc +0 -12
  275. data/test/fixtures/theories/12/dump +0 -0
  276. data/test/fixtures/theories/13/declaration.txt +0 -24
  277. data/test/fixtures/theories/13/desc +0 -20
  278. data/test/fixtures/theories/13/dump +0 -0
  279. data/test/fixtures/theories/14/declaration.txt +0 -26
  280. data/test/fixtures/theories/14/desc +0 -20
  281. data/test/fixtures/theories/14/dump +0 -0
  282. data/test/fixtures/theories/15/declaration.txt +0 -20
  283. data/test/fixtures/theories/15/desc +0 -14
  284. data/test/fixtures/theories/15/dump +0 -0
  285. data/test/fixtures/theories/16/declaration.txt +0 -30
  286. data/test/fixtures/theories/16/desc +0 -14
  287. data/test/fixtures/theories/16/dump +0 -0
  288. data/test/fixtures/theories/17/declaration.txt +0 -25
  289. data/test/fixtures/theories/17/desc +0 -11
  290. data/test/fixtures/theories/17/dump +0 -0
  291. data/test/fixtures/theories/18/declaration.txt +0 -23
  292. data/test/fixtures/theories/18/desc +0 -11
  293. data/test/fixtures/theories/18/dump +0 -0
  294. data/test/fixtures/theories/19/declaration.txt +0 -23
  295. data/test/fixtures/theories/19/desc +0 -11
  296. data/test/fixtures/theories/19/dump +0 -0
  297. data/test/fixtures/theories/2/declaration.txt +0 -12
  298. data/test/fixtures/theories/2/desc +0 -10
  299. data/test/fixtures/theories/2/dump +0 -0
  300. data/test/fixtures/theories/20/declaration.txt +0 -23
  301. data/test/fixtures/theories/20/desc +0 -17
  302. data/test/fixtures/theories/20/dump +0 -0
  303. data/test/fixtures/theories/3/declaration.txt +0 -19
  304. data/test/fixtures/theories/3/desc +0 -11
  305. data/test/fixtures/theories/3/dump +0 -0
  306. data/test/fixtures/theories/4/declaration.txt +0 -11
  307. data/test/fixtures/theories/4/desc +0 -11
  308. data/test/fixtures/theories/4/dump +0 -0
  309. data/test/fixtures/theories/5/declaration.txt +0 -6
  310. data/test/fixtures/theories/5/desc +0 -9
  311. data/test/fixtures/theories/5/dump +0 -0
  312. data/test/fixtures/theories/6/declaration.txt +0 -13
  313. data/test/fixtures/theories/6/desc +0 -11
  314. data/test/fixtures/theories/6/dump +0 -0
  315. data/test/fixtures/theories/7/declaration.txt +0 -19
  316. data/test/fixtures/theories/7/desc +0 -11
  317. data/test/fixtures/theories/7/dump +0 -0
  318. data/test/fixtures/theories/8/declaration.txt +0 -21
  319. data/test/fixtures/theories/8/desc +0 -11
  320. data/test/fixtures/theories/8/dump +0 -0
  321. data/test/fixtures/theories/9/declaration.txt +0 -24
  322. data/test/fixtures/theories/9/desc +0 -20
  323. data/test/fixtures/theories/9/dump +0 -0
  324. data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
  325. data/test/fixtures/theory_implementations/0/desc.txt +0 -9
  326. data/test/fixtures/theory_implementations/0/dump +0 -0
  327. data/test/fixtures/theory_implementations/0/theory_id +0 -1
  328. data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
  329. data/test/fixtures/theory_implementations/1/desc.txt +0 -9
  330. data/test/fixtures/theory_implementations/1/dump +0 -1
  331. data/test/fixtures/theory_implementations/1/theory_id +0 -1
  332. data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
  333. data/test/fixtures/theory_implementations/2/desc.txt +0 -9
  334. data/test/fixtures/theory_implementations/2/dump +0 -0
  335. data/test/fixtures/theory_implementations/2/theory_id +0 -1
  336. data/test/output/simple_method.txt +0 -5
  337. data/test/output/test_method/first_possible_method.txt +0 -6
  338. data/test/output/test_simple_cases/simple_case_01.txt +0 -8
  339. data/test/output/test_simple_cases/simple_case_02.txt +0 -7
  340. data/test/output/test_simple_cases/simple_case_03.txt +0 -8
  341. data/test/output/test_simple_cases/simple_case_04.txt +0 -8
  342. data/test/output/test_simple_cases/simple_case_05.txt +0 -8
  343. data/test/output/test_simple_cases/simple_case_06.txt +0 -9
  344. data/test/output/test_simple_cases/simple_case_07.txt +0 -9
  345. data/test/output/test_simple_cases/simple_case_08.txt +0 -9
  346. data/test/tc_describe.rb +0 -46
  347. data/test/tc_method.rb +0 -130
  348. data/test/tc_requirement.rb +0 -30
  349. data/test/tc_suite_complete.rb +0 -26
  350. data/test/tc_variable.rb +0 -52
  351. data/test/ts_complete.rb +0 -74
  352. data/test/ts_stable.rb +0 -81
  353. data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
  354. data/test/unit/core/method_call/tc_class_call.rb +0 -20
  355. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
  356. data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
  357. data/test/unit/core/statement/tc_array_access.rb +0 -63
  358. data/test/unit/core/statement/tc_block_statement.rb +0 -53
  359. data/test/unit/core/statement/tc_hack_statement.rb +0 -26
  360. data/test/unit/core/statement/tc_open_statement.rb +0 -79
  361. data/test/unit/core/statement/tc_statement.rb +0 -483
  362. data/test/unit/core/statement/tc_statement_group.rb +0 -35
  363. data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
  364. data/test/unit/core/statement/tc_theory_statement.rb +0 -53
  365. data/test/unit/core/syntax/tc_block_container.rb +0 -32
  366. data/test/unit/core/syntax/tc_if_container.rb +0 -39
  367. data/test/unit/core/tc_class_method_call.rb +0 -34
  368. data/test/unit/core/tc_container.rb +0 -41
  369. data/test/unit/core/tc_ctest_case.rb +0 -25
  370. data/test/unit/core/tc_instance_call_container.rb +0 -93
  371. data/test/unit/core/tc_literal.rb +0 -30
  372. data/test/unit/core/tc_theory_generator.rb +0 -336
  373. data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
  374. data/test/unit/core/tracking/tc_history.rb +0 -104
  375. data/test/unit/core/tracking/tc_step.rb +0 -65
  376. data/test/unit/core/variable/tc_array_variable.rb +0 -61
  377. data/test/unit/core/variable/tc_block_variable.rb +0 -17
  378. data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
  379. data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
  380. data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
  381. data/test/unit/core/variable/tc_string_variable.rb +0 -37
  382. data/test/unit/core/variable/tc_unknown.rb +0 -24
  383. data/test/unit/core/variable/tc_variable_reference.rb +0 -28
  384. data/test/unit/ruby_code/tc_array.rb +0 -64
  385. data/test/unit/ruby_code/tc_fixnum.rb +0 -18
  386. data/test/unit/ruby_code/tc_hash.rb +0 -41
  387. data/test/unit/ruby_code/tc_string.rb +0 -38
  388. data/test/unit/tc_chain.rb +0 -434
  389. data/test/unit/tc_chain_mapping.rb +0 -62
  390. data/test/unit/tc_chain_with_case_1.rb +0 -169
  391. data/test/unit/tc_instance_call.rb +0 -40
  392. data/test/unit/tc_method_usage.rb +0 -35
  393. data/test/unit/tc_pot.rb +0 -124
  394. data/test/unit/tc_runtime_tracking_method.rb +0 -40
  395. data/test/unit/tc_theory.rb +0 -531
  396. data/test/unit/tc_variable_declaration.rb +0 -32
  397. data/test/unit/theory/tc_theory_action.rb +0 -108
  398. data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
  399. data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
  400. data/test/unit/theory/tc_theory_connector.rb +0 -361
  401. data/test/unit/theory/tc_theory_dependent.rb +0 -153
  402. data/test/unit/theory/tc_theory_implementation.rb +0 -137
  403. data/test/unit/theory/tc_theory_result.rb +0 -112
  404. data/test/unit/theory/tc_theory_variable.rb +0 -45
  405. data/test/unit/util/tc_method_validation.rb +0 -101
  406. data/test/unit/util/tc_parser.rb +0 -110
  407. data/test/unit/util/tc_string_to_theory.rb +0 -300
  408. data/test/unit/variable/tc_method_usage_variable.rb +0 -25
  409. data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,63 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestArrayAccess < Test::Unit::TestCase
5
-
6
- def setup
7
- animals = ['spider','bear','rat'].to_var
8
- @index_0 = ArrayAccess.new(animals,Literal.new(0))
9
- @index_1 = ArrayAccess.new(animals,Literal.new(1))
10
- @index_2 = ArrayAccess.new(animals,Literal.new(2))
11
- @index_3 = ArrayAccess.new(animals,Literal.new(3))
12
-
13
- @spider_index_variable = FixnumVariable.new(0)
14
- @spider_access = ArrayAccess.new(animals,@spider_index_variable)
15
-
16
- @characters = ['Manny','Guybrush','Elaine',9].to_var
17
- @manny_access = ArrayAccess.new(@characters,Literal.new(0))
18
- @access_9 = ArrayAccess.new(@characters,Literal.new(3))
19
- @nil_access = ArrayAccess.new(@characters,Literal.new(4))
20
-
21
- end
22
-
23
- def teardown
24
- System.reset
25
- end
26
-
27
- def test_write
28
- assert_equal('var_0[0]',@index_0.write)
29
- assert_equal('var_0[1]',@index_1.write)
30
- assert_equal('var_0[2]',@index_2.write)
31
- assert_equal('var_0[3]',@index_3.write)
32
- assert_equal('var_0[3]',@index_3.write)
33
-
34
- # Create methods to access
35
- assert_equal('var_0[var_'+@spider_index_variable.variable_id.to_s+']',@spider_access.write)
36
-
37
- end
38
-
39
- def test_response
40
- assert(@manny_access.response.kind_of?(StringVariable))
41
- assert_equal('Manny',@manny_access.response.value)
42
- assert_equal(9,@access_9.response.value)
43
- assert_equal(nil,@nil_access.response.value)
44
- end
45
-
46
- def test_equivalent?
47
- assert(@manny_access.equivalent?(@manny_access))
48
- assert_equal(false,@spider_access.equivalent?(@manny_access))
49
-
50
- # Test accessing using the same varaible
51
- array_access_1 = ArrayAccess.new(@characters,1.to_literal)
52
- array_access_2 = ArrayAccess.new(@characters,2.to_literal)
53
- assert_equal(false,array_access_1.equivalent?(array_access_2))
54
-
55
- # Check a duplicate declaration are equivalent
56
- assert(array_access_1.equivalent?(ArrayAccess.new(@characters,1.to_literal)))
57
-
58
- # Check that duplcate arrays and keys are caught
59
- assert(ArrayAccess.new(['warren'].to_literal,0.to_literal).equivalent?(ArrayAccess.new(['warren'].to_literal,0.to_literal)))
60
-
61
- end
62
-
63
- end
@@ -1,53 +0,0 @@
1
- $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
-
3
- require 'required'
4
- require 'test/unit'
5
-
6
- class TestBlockStatement < Test::Unit::TestCase
7
-
8
- def setup
9
-
10
- @games = ['Grim Fandango','Monkey Island', 'Full Throttle','Simon the Soreceror'].to_var
11
- @block_variable = BlockVariable.new
12
- @block_container = BlockContainer.new(@block_variable)
13
- @each_game = BlockStatement.new(
14
- Statement.new(InstanceCallContainer.new(@games,ArrayEach.new)),
15
- @block_container
16
- )
17
- @declared_unknown = Unknown.new
18
- @declare_six = Statement.new(@declared_unknown,Equal.new,Literal.new(6))
19
- @populated_loop_block_var = BlockVariable.new
20
- @populated_loop = BlockStatement.new(
21
- Statement.new(InstanceCallContainer.new(@games,ArrayEach.new)),
22
- BlockContainer.new(@populated_loop_block_var),
23
- @declare_six
24
- )
25
-
26
- end
27
-
28
- def teardown
29
- System.reset
30
- RuntimeMethod.reset_global_id
31
- end
32
-
33
- def test_initialize
34
- end
35
-
36
- def test_write
37
- assert_equal("var_0.each do |var_"+@block_variable.variable_id.to_s+"|\nend\n",@each_game.write(0))
38
- assert_equal(" var_0.each do |var_1|\n end\n",@each_game.write(1))
39
- assert_equal(
40
- "var_0.each do |var_"+@populated_loop_block_var.variable_id.to_s+"|\n var_"+@declared_unknown.variable_id.to_s+" = 6\nend\n",
41
- @populated_loop.write(0)
42
- )
43
- assert_equal(
44
- " var_0.each do |var_"+@populated_loop_block_var.variable_id.to_s+"|\n var_"+@declare_six.declared_variable_id.to_s+" = 6\n end\n",
45
- @populated_loop.write(1)
46
- )
47
- end
48
-
49
- def test_copy
50
- assert_equal(@each_game.write,@each_game.copy.write)
51
- end
52
-
53
- end
@@ -1,26 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestHackStatement < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- @example_hack_statement = HackStatement.new("@var.push({'test':'sadasd','somethingelse':8}")
9
- end
10
-
11
- def teardown
12
- System.reset
13
- RuntimeMethod.reset_global_id
14
- end
15
-
16
- def test_write
17
- assert_equal("@var.push({'test':'sadasd','somethingelse':8}",@example_hack_statement.write)
18
- end
19
-
20
- def test_copy
21
- assert_nothing_raised(){@example_hack_statement.copy}
22
- assert_not_nil(@example_hack_statement.copy)
23
- assert_equal(@example_hack_statement.write,@example_hack_statement.copy.write)
24
- end
25
-
26
- end
@@ -1,79 +0,0 @@
1
- $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
-
3
- require 'required'
4
- require 'test/unit'
5
-
6
- class TestOpenStatement < Test::Unit::TestCase
7
-
8
- def setup
9
-
10
- # Create a simple open if statement
11
- @simple_if_statement_var = Unknown.new
12
- simple_if_statement = Statement.new(If.new,Container.new(@simple_if_statement_var,Equivalent.new,'Stobart'.to_literal))
13
- @simple_open_if_statement = OpenStatement.new(simple_if_statement)
14
-
15
- # Create a simple open statement with variables
16
- @simple_open_statement_with_theory_variables = StringToTheory.run("if(var1 == 8)\nend")
17
- @simple_open_statement_with_theory_variables.push StringToTheory.run("var2 = var1.length")
18
-
19
- # More complex open statement with theory variables
20
- @open_theory_statement_two = StringToTheory.run("if(var1.realise2(var3).params[0].value.length == var2.length)\nend")
21
- @open_theory_statement_two.push StringToTheory.run("var4 = var2.length")
22
-
23
- end
24
-
25
- def teardown
26
- System.reset
27
- RuntimeMethod.reset_global_id
28
- end
29
-
30
- def test_initialize
31
- end
32
-
33
- def test_write
34
-
35
- # Test the simple statement is written out properly
36
- assert_equal("if(#{@simple_if_statement_var.write} == 'Stobart')\nend" ,@simple_open_if_statement.write)
37
-
38
- # Test that internal statements are properly tabs
39
- @simple_open_if_statement << Statement.new(Return.new,True.new)
40
- assert_equal("if(#{@simple_if_statement_var.write} == 'Stobart')\n return true\nend" ,@simple_open_if_statement.write)
41
-
42
- end
43
-
44
- def test_select_all_with_theory_variables
45
- assert_equal(3,@simple_open_statement_with_theory_variables.select_all {|x| x.kind_of?(TheoryVariable)}.length)
46
- @simple_open_statement_with_theory_variables.select_all {|x| x.kind_of?(TheoryVariable)}.each do |x|
47
- assert(x.kind_of?(TheoryVariable))
48
- end
49
- end
50
-
51
- def test_select_all_with_open_theory_statement_two
52
- assert_equal(5,@open_theory_statement_two.select_all {|x| x.kind_of?(TheoryVariable)}.length)
53
- end
54
-
55
- def test_copy
56
-
57
- # Test copy with an open theory statement
58
- # TODO This is quite a good way to test copy - I should use it across the other main classes
59
- initial_theory = StringToTheory.run("if(var1.length = var2.length)\nend")
60
- # => TODO uniq shouldn't be needed - why is it selecting the same value
61
- original_element_ids = initial_theory.select_all{true}.collect {|x| x.object_id}.uniq
62
-
63
- copied_theory = initial_theory.copy
64
- copied_elements_ids = copied_theory.select_all{true}.collect {|x| x.object_id}.uniq
65
-
66
- assert_equal(
67
- original_element_ids.length*2,
68
- (copied_elements_ids + original_element_ids).uniq.length
69
- )
70
- end
71
-
72
- def test_write_structure_with_simple_examples
73
- assert_equal("if(a == b)\nend",Parser.run("if(var1 == var2)\nend").write_structure)
74
- assert_equal("if(a == b)\n return c\nend",Parser.run("if(var1 == var2)\nreturn 8\nend").write_structure)
75
- assert_equal("if(a.chop == b)\n return c\nend",Parser.run("if(var1.chop == var2)\nreturn 8\nend").write_structure)
76
- assert_equal("if(a.chop == b)\n return a.chop\nend", Parser.run("if(var1.chop == var2)\nreturn var1.chop\nend").write_structure)
77
- end
78
-
79
- end
@@ -1,483 +0,0 @@
1
- $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
-
3
- require 'cauldron'
4
- require 'test/unit'
5
-
6
- class TestStatement < Test::Unit::TestCase
7
-
8
- def setup
9
-
10
- # Create a simple literal declaration statement
11
- @var_a = Unknown.new
12
- @simple_statement = Statement.new(@var_a,Equal.new,Literal.new('Daggerfall'))
13
-
14
- # Create a statement with a variable in it
15
- @var_b = 'Arena'.to_var
16
- @var_c = Unknown.new
17
- @statement_b = Statement.new(@var_c,Equal.new,InstanceCallContainer.new(@var_b,Chop.new))
18
-
19
- # Create a return statement
20
- @return_statement_a = Statement.new(Return.new,@var_b)
21
-
22
- # Create a statement with mulitiple variables
23
- @var_e = 3.to_var
24
- @var_f = 6.to_var
25
- @var_g = Unknown.new
26
- @statement_c = Statement.new(@var_g,Equal.new,@var_e,Addition.new,@var_f)
27
-
28
- # Create some statements that's unknown variable is determined
29
- @wally = StringVariable.new('Wally')
30
- @chopped_wally = Unknown.new
31
- @chop_wally = Statement.new(@chopped_wally,Equal.new,InstanceCallContainer.new(@wally,Chop.new))
32
- @number_9 = FixnumVariable.new(9)
33
- @declared_number = Unknown.new
34
- @statement_d = Statement.new(@declared_number,Equal.new,@number_9)
35
-
36
- # Create some statements that's unknown variable can't be determined
37
- @var_h = Unknown.new
38
- @var_i = Unknown.new
39
- @statemnet_e = Statement.new(@var_h,Equal.new,@chopped_wally)
40
- @statemnet_f = Statement.new(@var_i,Equal.new,InstanceCallContainer.new(@chopped_wally,Chop.new))
41
-
42
- # Create a statement that accesses an array variable
43
- animals = ['bear','badger','bison','beever','bird'].to_var
44
-
45
- # 3.times
46
- @three_times = Statement.new(InstanceCallContainer.new(3.to_literal,Times.new))
47
-
48
- # Return 'sparky' method
49
- # def return_sparky
50
- # return 'sparky'
51
- # end
52
- @return_sparky_method = RuntimeMethod.new(MethodUsage.new)
53
- return_sparky = Statement.new(Return.new,'sparky'.to_literal)
54
- @return_sparky_method.push(return_sparky)
55
-
56
- end
57
-
58
- def teardown
59
- System.reset
60
- end
61
-
62
- def test_simple_valid_syntax
63
-
64
- # Statement: var0 = var1.chop
65
- declaration_statement = DeclarationStatement.new(Unknown.new,Equal.new,InstanceCallContainer.new(Unknown.new,Chop.new))
66
- assert_equal(false,declaration_statement.valid_syntax?)
67
-
68
- # Statement: var0 = 'test'.chop
69
- chop_string_statement = DeclarationStatement.new(Unknown.new,Equal.new,InstanceCallContainer.new(Literal.new('test'),Chop.new))
70
- assert_equal(true,chop_string_statement.valid_syntax?)
71
-
72
- # Statement: return false
73
- return_statement = Statement.new(Return.new,False.new)
74
- assert_equal(true,return_statement.valid_syntax?)
75
-
76
- end
77
-
78
- def test_not_declared_variables
79
-
80
- # Create a simple declaration statement var1 = var0
81
- simple_declaration_statement = DeclarationStatement.new(Unknown.new,Equal.new,Unknown.new)
82
- assert_equal(false,simple_declaration_statement.valid_syntax?)
83
-
84
- # Check the number of unknown variables returned
85
- assert_equal(1,simple_declaration_statement.not_declared_variables.length)
86
-
87
- # Create the statement with undeclared variables in an instance call
88
- declaration_statement = DeclarationStatement.new(Unknown.new,Equal.new,InstanceCallContainer.new(Unknown.new,Chop.new))
89
- assert_equal(false,declaration_statement.valid_syntax?)
90
-
91
- # Check the number of undeclared variables
92
- assert_equal(1,declaration_statement.not_declared_variables.length)
93
-
94
- # Create a declared variable that references itself var0 = var0 (this is valid ruby, var0 is just nil)
95
- unknown_var = Unknown.new()
96
- referencing_statement = DeclarationStatement.new(unknown_var,Equal.new,unknown_var)
97
- assert_equal(0,referencing_statement.not_declared_variables.length)
98
-
99
- # Check that undeclared variable is found in array access
100
- # e.g var_c = var_b[var_a]
101
- # 1.
102
- var_1_a = 0.to_var
103
- var_1_b = ['dogs','cats','mass hysteria'].to_var
104
- var_1_c = Unknown.new
105
- statement_1 = Statement.new(var_1_c,Equal.new,ArrayAccess.new(var_1_b,var_1_a))
106
- assert_equal(2,statement_1.not_declared_variables.length)
107
-
108
- # Check that push statements are properly handled
109
- vault_101 = Unknown.new() # e.g ArrayVariable
110
- butch = Unknown.new # e.g. StringVariable
111
- example_1 = Statement.new(InstanceCallContainer.new(vault_101,Push.new,butch))
112
- assert_equal(2,example_1.not_declared_variables.length)
113
-
114
- # 2.
115
- # Check that arguments are picked up as "not_declared_variables"
116
- # e.g. var_b = RuntimeMethod.new(var_a) -> should return "var_a"
117
- var_a = Unknown.new
118
- var_b = Unknown.new
119
- var_b_statement = Statement.new(var_b,Equal.new,ClassMethodCallContainer.new(RuntimeMethodClass.new,New.new,var_a))
120
- assert_equal(1,var_b_statement.not_declared_variables.length)
121
-
122
- # Create a declared variable that references itself var0 += var0
123
- # TODO Currently only uses equal
124
-
125
- end
126
-
127
- # Check that I am able to substitute one variable for another
128
- # within a statement.
129
- #
130
- def test_variable_subst
131
-
132
- # Create the substitute variable (the one to replace the current one) self.class = String
133
- subst_variable = MethodParameter.new
134
-
135
- # Create the variable to be replaced self.class = String
136
- replacable_variable = Unknown.new
137
-
138
- # Create the statement 'tests' = var.chop
139
- tests = 'test'.to_var
140
- # TODO This contains duplicate statements - when you describe it self.class = String twice
141
- # e.g 'tests' = var.chop
142
- statement = Statement.new(tests,Equal.new,InstanceCallContainer.new(replacable_variable,Chop.new))
143
-
144
- # Confirm that the statement isn't valid sytax becuase replacable_variable has no actual value
145
- assert_equal(false,statement.valid_syntax?)
146
-
147
- # Replaced the replacable variable e.g. var1 in var0 = var1.chop
148
- assert_nothing_raised(){ statement.subst(replacable_variable.variable_id,subst_variable) }
149
-
150
- # Check the printed statement
151
- assert_equal('var_'+tests.variable_id.to_s+' = var_'+replacable_variable.variable_id.to_s+'.chop',statement.write)
152
-
153
- # Check that a statement is returned
154
- assert_equal( true,statement.subst(subst_variable.variable_id,replacable_variable).kind_of?(Statement) )
155
-
156
- # Check the resulting statement is properly updated
157
- updated_statement = statement.subst(replacable_variable.variable_id,subst_variable)
158
-
159
- # Check the original statement is printed out in the same way - after the substiution
160
- assert_equal('var_'+tests.variable_id.to_s+' = var_'+replacable_variable.variable_id.to_s+'.chop',statement.write)
161
-
162
- # Check the print out for the updated statement
163
- assert_equal('var_'+tests.variable_id.to_s+' = var_'+subst_variable.variable_id.to_s+'.chop',updated_statement.write)
164
-
165
- # Check that the variable_ids of both statements don't match
166
- assert_not_equal(statement[2].subject.variable_id,updated_statement[2].subject.variable_id)
167
-
168
- end
169
-
170
- def test_find_variable
171
-
172
- # Test a variable with the correct id is returned
173
- assert(@simple_statement.find_variable(@var_a.variable_id).kind_of?(Variable))
174
- assert_equal(@var_a.variable_id,@simple_statement.find_variable(@var_a.variable_id).variable_id)
175
-
176
- # Attempt to retrieve a variable that doesn't exist
177
- assert_raise(FailedToFindVariableError){@simple_statement.find_variable(Variable.variable_id+1)}
178
-
179
- # Attempt to find a variable used in the statement i.e. not declared in the statement
180
- assert_nothing_raised(){@statement_b.find_variable(@var_b.variable_id)}
181
- assert_equal(@var_b.variable_id,@statement_b.find_variable(@var_b.variable_id).variable_id)
182
-
183
- assert_kind_of(Variable,@statement_b.find_variable(@var_b.variable_id))
184
- assert_kind_of(Variable,@statement_b.find_variable(@var_c.variable_id))
185
-
186
- # Test that returned variable isn't the original instance
187
- assert_not_equal(@var_b.object_id, @statement_b.find_variable(@var_b.variable_id))
188
-
189
- # Test find_variable a return statement
190
- assert(@return_statement_a.find_variable(@var_b.variable_id).kind_of?(Variable))
191
- assert_equal(@var_b.variable_id,@return_statement_a.find_variable(@var_b.variable_id).variable_id)
192
-
193
- # Test that an unknown variable is retrieved and still unknown
194
- assert_equal(true,@chop_wally.find_variable(@chopped_wally.variable_id).kind_of?(Unknown))
195
-
196
- assert_equal(true,@statemnet_e.find_variable(@var_h.variable_id).kind_of?(Unknown))
197
- assert_equal(true,@statemnet_f.find_variable(@var_i.variable_id).kind_of?(Unknown))
198
-
199
- end
200
-
201
- # Check that the statement is properly copied.
202
- #
203
- def test_copy
204
-
205
- # Check that the variable_ids are different
206
- assert_not_equal(@statement_b.object_id,@statement_b.copy.object_id)
207
-
208
- # Check each of the variables within the statements
209
- assert_equal(@statement_b.length,@statement_b.copy.length)
210
- copied_statement = @statement_b.copy
211
- @statement_b.each_with_index do |statement,i|
212
- assert_not_equal(statement.object_id,copied_statement[i].object_id)
213
- end
214
-
215
- end
216
-
217
- def test_required_variable_ids
218
-
219
- # Confirm that the simple statement var = 'daggerfall' has no dependencies
220
- assert_equal(0,@simple_statement.required_variable_ids.length)
221
-
222
- # Confirm varA = varB.chop has one dependency
223
- assert_equal(1,@statement_b.required_variable_ids.length)
224
- assert_equal(@var_b.variable_id,@statement_b.required_variable_ids.first)
225
-
226
- assert_equal(2,Parser.run('var3 = var1 + var2').required_variable_ids.length)
227
-
228
- end
229
-
230
- def test_to_literal_string
231
- assert_equal("var='Daggerfall'",@simple_statement.to_literal_string)
232
- end
233
-
234
- # Tests that unrealised variables can be identified in a statement
235
- #
236
- def test_unrealised_variables
237
-
238
- # 1. var = 'test'
239
- example_1 = Statement.new(Unknown.new,Equal.new,'test'.to_literal)
240
- assert_equal(1,example_1.unrealised_variables.length)
241
-
242
- # 2. Test NilVariables aren't regared as unrealised
243
- example_2 = Statement.new(Unknown.new,Equal.new,NilVariable.new)
244
- assert_equal(1,example_2.unrealised_variables.length)
245
-
246
- # 3. Check that a undeclared String Variable is caught
247
- example_3 = Statement.new(Unknown.new,Equal.new,StringVariable.new(nil))
248
- assert_equal(2,example_3.unrealised_variables.length)
249
-
250
- # 4. Check that statements can contain no unreleasid variables
251
- manny = StringVariable.new('Manny')
252
- example_4 = Statement.new(FixnumVariable.new(5),Equal.new,InstanceCallContainer.new(manny,StringLength.new))
253
- assert_equal(0,example_4.unrealised_variables.length)
254
-
255
- # 5. Check the instance calls are caught
256
- nil_string_variable = StringVariable.new(nil)
257
- unknown_example_5 = Unknown.new
258
- example_5 = Statement.new(unknown_example_5,Equal.new,InstanceCallContainer.new(nil_string_variable,StringLength.new))
259
- assert_equal(2,example_5.unrealised_variables.length)
260
- assert(example_5.unrealised_variables.any? {|x| x.variable_id == nil_string_variable.variable_id})
261
- assert(example_5.unrealised_variables.any? {|x| x.variable_id == unknown_example_5.variable_id})
262
-
263
- # 6. Check that .push methods are properly caught
264
- # e.g. var_34.push(var_24)
265
- vault_101 = Unknown.new() # e.g ArrayVariable
266
- butch = Unknown.new # e.g. StringVariable
267
- example_6 = Statement.new(InstanceCallContainer.new(vault_101,Push.new,butch))
268
- assert_equal(2,example_6.unrealised_variables.length)
269
-
270
- end
271
-
272
- def test_variables
273
-
274
- # 1. Check that the write number of variables are returned
275
- # e.g. var_xx.push(var_xx)
276
- vault_101 = Unknown.new() # e.g ArrayVariable
277
- butch = Unknown.new # e.g. StringVariable
278
- example_1 = Statement.new(InstanceCallContainer.new(vault_101,Push.new,butch))
279
- assert_equal(2,example_1.variables.length)
280
-
281
- # 2. Check that literals are ignored
282
- assert_equal(0,@three_times.variables.length)
283
-
284
- # 3. Check that accessed arrays are caught
285
- # var_xx = var_a[0]
286
- countries = Statement.new(Unknown.new,Equal.new,ArrayAccess.new(['U.K','France','Poland'].to_var,0))
287
- assert_equal(2,countries.variables.length)
288
-
289
- # 4. Check array access using a variable
290
- pip = 'pip'.to_var
291
- wooter = 'wooter'.to_var
292
- people = [pip,wooter].to_var
293
- people_access = Statement.new(Unknown.new,Equal.new,ArrayAccess.new(people,1.to_var))
294
- assert_equal(3,people_access.variables.length)
295
- assert(people_access.variables.any? {|x| x.variable_id == people.variable_id})
296
-
297
- end
298
-
299
- def test_write
300
-
301
- end
302
-
303
- def test_realise2
304
-
305
- # 1. Test that a statement can realise itself with a pasted in history instance
306
- # a. First create the context of the statement so the history instance can be created
307
- runtime_method_1 = RuntimeMethod.new(MethodUsage.new)
308
- unknown_variable_1 = Unknown.new
309
- statement_1 = Statement.new(unknown_variable_1,Equal.new,'sparky'.to_literal)
310
- #statement_1.statement_type = StatementStructure::DECLARATION_STATEMENT
311
- runtime_method_1.push(statement_1)
312
-
313
- # b. Now get the history instance for the runime method with the statement
314
- runtime_method_1_history = runtime_method_1.history(ParametersContainer.new)
315
-
316
- # c. Check that the statement can be realised with the history instance
317
- realised_statement = statement_1.realise2(runtime_method_1_history)
318
- assert_equal(StringVariable,realised_statement.find_variable(unknown_variable_1.variable_id).class)
319
- assert_equal('sparky',realised_statement.find_variable(unknown_variable_1.variable_id).value)
320
-
321
- # 2. Test that a statement that calls a method can be realised
322
- # a. Create the method that is called
323
- return_sparky = Statement.new(Return.new,'sparky'.to_declaration)
324
- #return_sparky.statement_type = StatementStructure::DECLARATION_STATEMENT
325
- calling_runtime_method_2 = RuntimeMethod.new(MethodUsage.new,'sparky'.to_var,return_sparky)
326
-
327
- # b. Create the method that calls "calling_runtime_method_2"
328
- runtime_method_2 = RuntimeMethod.new(MethodUsage.new)
329
- unknown_variable_2 = Unknown.new
330
- statement_2 = Statement.new(unknown_variable_2,Equal.new,DefCall.new('sparky'.to_var,calling_runtime_method_2))
331
- #statement_2.statement_type = StatementStructure::DECLARATION_STATEMENT
332
- runtime_method_2.push(statement_2)
333
-
334
- # c. Retrieve the history instance for the runtime method
335
- history_2 = runtime_method_2.history(ParametersContainer.new,[calling_runtime_method_2])
336
-
337
- assert_equal(true,statement_2.realise2(history_2).find_variable(unknown_variable_2.variable_id).kind_of?(StringVariable))
338
- assert_equal('sparky',statement_2.realise2(history_2).find_variable(unknown_variable_2.variable_id).value)
339
-
340
- # 3. Try complex return type e.g StatementVaraible
341
- # a. Create the method that is called
342
- # def called_method
343
- # return Statement.new(Return.new,'sparky')
344
- # end
345
- #
346
- blank_statement = Statement.new
347
- #blank_statement.statement_type = StatementStructure::MISC_STATEMENT
348
- called_runtime_method_3 = RuntimeMethod.new(MethodUsage.new,blank_statement.to_var)
349
-
350
- # b. Create the statement that is returned as a variable.
351
- declared_return_statement_var = Unknown.new
352
- return_return_statement = Statement.new(Return.new,Parser.run("Statement.new(Return.new,'sparky')"))
353
- called_runtime_method_3.push(return_return_statement)
354
-
355
- # c. Create the method that includes a call to "called_runtime_method_3"
356
- runtime_method_3 = RuntimeMethod.new(MethodUsage.new)
357
- unknown_variable_3 = Unknown.new
358
- statement_3 = Statement.new(unknown_variable_3,Equal.new,DefCall.new(blank_statement.to_var,called_runtime_method_3))
359
- #statement_3.statement_type = StatementStructure::DECLARATION_STATEMENT
360
- runtime_method_3.push(statement_3)
361
-
362
- # d. Retrieve the history object for "runtime_method_3"
363
- history_3 = runtime_method_3.history(ParametersContainer.new,[called_runtime_method_3])
364
- assert_equal(true, statement_3.realise2(history_3).find_variable(unknown_variable_3.variable_id).kind_of?(StatementVariable) )
365
-
366
- end
367
-
368
- def test_classes_match?
369
-
370
- # Test a simple return statement for both negative and positive results
371
- return_statement = Statement.new(Return.new,6.to_literal)
372
- assert(return_statement.classes_match?(Return,Literal))
373
- assert_equal(false,return_statement.classes_match?(Return,Unknown))
374
- assert_equal(false,return_statement.classes_match?(Return,Literal,Unknown))
375
-
376
- end
377
-
378
- def test_find_actual_variable
379
-
380
- # 1. Check that the actual variable is returned from a statement
381
- assert_equal(@simple_statement[0].variable_id,@simple_statement.find_actual_variable(@simple_statement[0].variable_id).variable_id)
382
- assert_equal(@simple_statement[0].object_id,@simple_statement.find_actual_variable(@simple_statement[0].variable_id).object_id)
383
-
384
- end
385
-
386
- def test_select_all
387
-
388
- # Check that both Unknown's are found within the statement
389
- statement = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new(Unknown.new,Chop.new))
390
- assert_equal(2,statement.select_all {|x| x.kind_of?(Unknown)}.length)
391
-
392
- end
393
-
394
- def test_equivalent?
395
-
396
- # Check that 'unknown = method_call' and 'unknown = "Sparky"' aren't equivalent
397
- unknown_method_call = Statement.new(
398
- Unknown.new,Equal.new,DefCall.new(StringVariable.new('Sparky'),@return_sparky_method)
399
- )
400
- #unknown_method_call.statement_type = StatementStructure::DECLARATION_STATEMENT
401
- unknown_sparky_declaration = Statement.new(
402
- Unknown.new,Equal.new,'Sparky'.to_literal
403
- )
404
- #unknown_sparky_declaration.statement_type = StatementStructure::DECLARATION_STATEMENT
405
- assert_equal(false,unknown_method_call.equivalent?(unknown_sparky_declaration))
406
- assert_equal(false,unknown_sparky_declaration.equivalent?(unknown_method_call))
407
- assert(true,unknown_sparky_declaration.equivalent?(unknown_sparky_declaration))
408
-
409
- # Check that two 'unknown = MethodUsage.new' are caught as equivalent
410
- statement_1 = Statement.new(Unknown.new,Equal.new,ClassMethodCallContainer.new(MethodUsageClass.new,New.new))
411
- statement_2 = Statement.new(Unknown.new,Equal.new,ClassMethodCallContainer.new(MethodUsageClass.new,New.new))
412
- assert_equal(true,statement_1.equivalent?(statement_2))
413
-
414
- end
415
-
416
- def test_creates_variable?
417
-
418
- # Check that a declaration statement creates a variable
419
- statement_1 = Statement.new(Unknown.new,Equal.new,6.to_declaration)
420
- assert(statement_1.creates_variable?)
421
-
422
- # Check that a statement doesn't create a variable
423
- statement_2 = Statement.new(Return.new,7.to_declaration)
424
- assert_equal(false,statement_2.creates_variable?)
425
-
426
- # Check that a statement that modifies a variable is detected
427
- statement_3 = Statement.new(InstanceCallContainer.new([].to_var,Push.new,'antz'.to_literal))
428
- assert_equal(true,statement_3.creates_variable?)
429
-
430
- end
431
-
432
- def test_created_variable
433
-
434
- # Test that declaration statements are handles 'var_a = 'bramble jelly'
435
- statement_1_unknown = Unknown.new
436
- statement_1 = Statement.new(statement_1_unknown,Equal.new,'bramble jelly'.to_literal)
437
- assert(statement_1.created_variable.kind_of?(Variable))
438
- assert_equal(statement_1_unknown.variable_id,statement_1.created_variable.variable_id)
439
- assert_not_nil(statement_1.created_variable_id)
440
- assert_not_nil(statement_1.created_variable.uniq_id)
441
- assert_equal(statement_1.created_variable.uniq_id,statement_1_unknown.uniq_id)
442
- assert_equal(statement_1.created_variable.variable_id,statement_1.declared_variable.variable_id)
443
-
444
- # Test that statements the don't create a variable are appropriatly handled
445
- statement_2 = Statement.new(Return.new,'rowiage'.to_var)
446
- assert_equal(false,statement_2.creates_variable?)
447
- assert_raises(ImproperStatementUsageError){statement_2.created_variable}
448
-
449
- # Test that modifying statements have a new created variable
450
- statement_3_empty_array_var = [].to_var
451
- statement_3_empty_array_var.copy
452
- statement_3 = Statement.new(InstanceCallContainer.new(statement_3_empty_array_var,Push.new,'Normandy SR2'.to_literal))
453
- assert(true,statement_3.creates_variable?)
454
- assert_nothing_raised(){statement_3.created_variable}
455
- assert(statement_3.created_variable.kind_of?(ArrayVariable))
456
- assert_equal(statement_3.created_variable.variable_id,statement_3_empty_array_var.variable_id)
457
- # assert_not_equal(
458
- # statement_3.created_variable.uniq_id,
459
- # statement_3_empty_array_var.uniq_id
460
- # )
461
-
462
- end
463
-
464
- def test_tokens
465
- # TODO This should be a Statement
466
- assert_equal(
467
- 2,
468
- Statement.new(Unknown.new,Equal.new,Unknown.new).tokens.length
469
- )
470
- end
471
-
472
- def test_write_structure_simple
473
- assert_equal("a = b",Parser.run("var1 = var2").write_structure)
474
- assert_equal("a = b + c",Parser.run("var1 = var2 + var3").write_structure)
475
- assert_equal("a = b + c",Parser.run("var1 = var2 + 7").write_structure)
476
- assert_equal("a = b + c",Parser.run("var1 = var2 + 'adeley'").write_structure)
477
- assert_equal("a.chop",Statement.new(Parser.run("var1.chop")).write_structure)
478
- assert_equal("a = b.chop + c",Parser.run("var2 = var5.chop + 9").write_structure)
479
- assert_equal("a = b.chop + a",Parser.run("var2 = var5.chop + var2").write_structure)
480
- end
481
-
482
-
483
- end