cauldron 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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