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.
- data/.gitignore +51 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +16 -3
- data/Rakefile +94 -92
- data/VERSION +1 -1
- data/bin/cauldron +2 -2
- data/cauldron.gemspec +15 -451
- data/features/cauldron_new_approach.feature +46 -0
- data/features/step_definitions/cauldron_steps.rb +11 -0
- data/features/step_definitions/terminal_steps.rb +0 -2
- data/features/support/env.rb +11 -1
- data/features/support/hooks.rb +5 -0
- data/lib/cauldron.rb +13 -7
- data/lib/cauldron/array_reverse_operator.rb +39 -0
- data/lib/cauldron/concat_operator.rb +34 -0
- data/lib/cauldron/if_relationship.rb +37 -0
- data/lib/cauldron/numeric_operator.rb +45 -0
- data/lib/cauldron/pot.rb +54 -162
- data/lib/cauldron/relationship.rb +5 -0
- data/lib/cauldron/terminal.rb +4 -60
- data/lib/cauldron/version.rb +3 -0
- data/lib/core/string.rb +21 -0
- data/sandbox.rb +27 -6
- data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
- data/spec/cauldron/concat_operator_spec.rb +89 -0
- data/spec/cauldron/if_relationship_spec.rb +25 -0
- data/spec/cauldron/numeric_operator_spec.rb +70 -0
- data/spec/cauldron/pot_spec.rb +81 -151
- data/spec/cauldron/terminal_spec.rb +1 -39
- data/spec/examples/adding_if_statement.yml +13 -0
- data/spec/examples/simple_head_theory.txt +13 -0
- data/spec/spec_helper.rb +1 -14
- data/tasks/theory_tasks.rake +207 -207
- metadata +92 -532
- data/cauldron/.autotest +0 -23
- data/cauldron/History.txt +0 -6
- data/cauldron/Manifest.txt +0 -8
- data/cauldron/README.txt +0 -57
- data/cauldron/Rakefile +0 -27
- data/cauldron/bin/cauldron +0 -3
- data/cauldron/lib/cauldron.rb +0 -3
- data/cauldron/test/test_cauldron.rb +0 -8
- data/features/cauldron_example_cases.feature +0 -13
- data/features/cauldron_generates_runtime_method.feature +0 -16
- data/features/cauldron_generates_single_paramter_methods.feature +0 -25
- data/features/cauldron_interactive_start_terminal.feature +0 -17
- data/features/cauldron_quit_terminal.feature +0 -9
- data/features/cauldron_start_terminal.feature +0 -12
- data/features/support/method_1.example +0 -3
- data/features/support/method_2.example +0 -6
- data/lib/Chain.rb +0 -771
- data/lib/ChainMapping.rb +0 -172
- data/lib/CodeHandler.rb +0 -513
- data/lib/Mapping.rb +0 -27
- data/lib/MappingValues.rb +0 -24
- data/lib/PartialChain.rb +0 -253
- data/lib/Theory.rb +0 -295
- data/lib/UnifiedChain.rb +0 -351
- data/lib/cauldron/conversion.rb +0 -15
- data/lib/cauldron/demos.rb +0 -280
- data/lib/cauldron/env.rb +0 -1
- data/lib/cauldron/sexp2cauldron.rb +0 -139
- data/lib/cauldron/theory_factory.rb +0 -10
- data/lib/cauldron/util/home.rb +0 -21
- data/lib/cauldron/util/saver.rb +0 -45
- data/lib/core/ActsAsCode.rb +0 -25
- data/lib/core/BlockToken.rb +0 -33
- data/lib/core/CCall.rb +0 -7
- data/lib/core/CTestCase.rb +0 -27
- data/lib/core/ClassMethodCallContainer.rb +0 -58
- data/lib/core/Container.rb +0 -95
- data/lib/core/InstanceCallContainer.rb +0 -298
- data/lib/core/MethodUsage.rb +0 -65
- data/lib/core/PrintVariables.rb +0 -25
- data/lib/core/TheoryGenerator.rb +0 -753
- data/lib/core/Token.rb +0 -7
- data/lib/core/assignment/Assignment.rb +0 -18
- data/lib/core/assignment/Equal.rb +0 -39
- data/lib/core/assignment/Equivalent.rb +0 -20
- data/lib/core/assignment/NotEqual.rb +0 -14
- data/lib/core/call_container/CallContainer.rb +0 -72
- data/lib/core/class_method_call/New.rb +0 -15
- data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
- data/lib/core/declaration/Declaration.rb +0 -16
- data/lib/core/declaration/LiteralDeclaration.rb +0 -47
- data/lib/core/declaration/VariableDeclaration.rb +0 -59
- data/lib/core/instance_call/ArrayEach.rb +0 -23
- data/lib/core/instance_call/ArrayLength.rb +0 -15
- data/lib/core/instance_call/Chop.rb +0 -19
- data/lib/core/instance_call/Copy.rb +0 -22
- data/lib/core/instance_call/DeclaredVariable.rb +0 -18
- data/lib/core/instance_call/InstanceCall.rb +0 -77
- data/lib/core/instance_call/Params.rb +0 -15
- data/lib/core/instance_call/Push.rb +0 -20
- data/lib/core/instance_call/StringLength.rb +0 -32
- data/lib/core/instance_call/Times.rb +0 -20
- data/lib/core/instance_call/instance_calls.rb +0 -176
- data/lib/core/instance_call/length_equal.rb +0 -15
- data/lib/core/kernal/EvalCall.rb +0 -15
- data/lib/core/kernal/LocalVariablesCall.rb +0 -15
- data/lib/core/literal/Literal.rb +0 -111
- data/lib/core/literal/Raw.rb +0 -23
- data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
- data/lib/core/literal/StatementLiteral.rb +0 -28
- data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
- data/lib/core/method_call/ClassCall.rb +0 -33
- data/lib/core/method_call/DefCall.rb +0 -72
- data/lib/core/method_call/EvaluateClassCall.rb +0 -29
- data/lib/core/method_call/MethodNameCall.rb +0 -27
- data/lib/core/method_call/ToDeclarationCall.rb +0 -15
- data/lib/core/requirement/Requirement.rb +0 -292
- data/lib/core/runtime_class/ArrayClass.rb +0 -19
- data/lib/core/runtime_class/ClassCallClass.rb +0 -23
- data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
- data/lib/core/runtime_class/ClassName.rb +0 -18
- data/lib/core/runtime_class/DefCallClass.rb +0 -21
- data/lib/core/runtime_class/EqualClass.rb +0 -19
- data/lib/core/runtime_class/FixnumClass.rb +0 -15
- data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
- data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
- data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
- data/lib/core/runtime_class/LiteralClass.rb +0 -19
- data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
- data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
- data/lib/core/runtime_class/RequirementClass.rb +0 -19
- data/lib/core/runtime_class/ReturnClass.rb +0 -21
- data/lib/core/runtime_class/RuntimeClass.rb +0 -30
- data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
- data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
- data/lib/core/runtime_class/StatementClass.rb +0 -53
- data/lib/core/runtime_class/StringClass.rb +0 -23
- data/lib/core/runtime_class/StringLengthClass.rb +0 -19
- data/lib/core/runtime_class/StringVariableClass.rb +0 -19
- data/lib/core/runtime_class/ThisClass.rb +0 -15
- data/lib/core/runtime_class/UnknownClass.rb +0 -23
- data/lib/core/runtime_class/class_names.rb +0 -95
- data/lib/core/runtime_class/runtime_class.rb +0 -123
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
- data/lib/core/runtime_method/ParametersContainer.rb +0 -29
- data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
- data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
- data/lib/core/runtime_method/WriteParameters.rb +0 -35
- data/lib/core/statement/ActsAsStatement.rb +0 -20
- data/lib/core/statement/ArrayAccess.rb +0 -122
- data/lib/core/statement/BlockStatement.rb +0 -348
- data/lib/core/statement/DeclarationStatement.rb +0 -19
- data/lib/core/statement/HackStatement.rb +0 -25
- data/lib/core/statement/HashAccess.rb +0 -18
- data/lib/core/statement/OpenStatement.rb +0 -178
- data/lib/core/statement/RealisedStatement.rb +0 -5
- data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
- data/lib/core/statement/Statement.rb +0 -1091
- data/lib/core/statement/StatementGroup.rb +0 -157
- data/lib/core/statement/StatementStructure2.rb +0 -224
- data/lib/core/statement/TheoryStatement.rb +0 -68
- data/lib/core/statement/TopologicalStatements.rb +0 -34
- data/lib/core/syntax/Addition.rb +0 -26
- data/lib/core/syntax/BlockContainer.rb +0 -102
- data/lib/core/syntax/Boolean.rb +0 -15
- data/lib/core/syntax/Code.rb +0 -11
- data/lib/core/syntax/Do.rb +0 -20
- data/lib/core/syntax/False.rb +0 -12
- data/lib/core/syntax/If.rb +0 -36
- data/lib/core/syntax/Nil.rb +0 -15
- data/lib/core/syntax/Return.rb +0 -33
- data/lib/core/syntax/Subtract.rb +0 -19
- data/lib/core/syntax/This.rb +0 -40
- data/lib/core/syntax/True.rb +0 -20
- data/lib/core/syntax/syntax.rb +0 -24
- data/lib/core/tracking/ActsAsTrackable.rb +0 -65
- data/lib/core/tracking/History.rb +0 -167
- data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
- data/lib/core/tracking/Step.rb +0 -52
- data/lib/core/variable/ArrayVariable.rb +0 -76
- data/lib/core/variable/BaseVariable.rb +0 -152
- data/lib/core/variable/BlockVariable.rb +0 -92
- data/lib/core/variable/FixnumVariable.rb +0 -35
- data/lib/core/variable/HistoryVariable.rb +0 -8
- data/lib/core/variable/MethodParameter.rb +0 -179
- data/lib/core/variable/MethodUsageVariable.rb +0 -60
- data/lib/core/variable/NilVariable.rb +0 -29
- data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
- data/lib/core/variable/StatementVariable.rb +0 -72
- data/lib/core/variable/StepVariable.rb +0 -7
- data/lib/core/variable/StringVariable.rb +0 -46
- data/lib/core/variable/TypeVariable.rb +0 -72
- data/lib/core/variable/Unknown.rb +0 -102
- data/lib/core/variable/UnknownVariable.rb +0 -29
- data/lib/core/variable/Variable.rb +0 -70
- data/lib/core/variable/VariableContainer.rb +0 -28
- data/lib/core/variable/VariableIncluded.rb +0 -27
- data/lib/core/variable/VariableReference.rb +0 -85
- data/lib/error/FailedToFindStatementContainerError.rb +0 -7
- data/lib/error/FailedToFindStatementError.rb +0 -7
- data/lib/error/FailedToFindVariableError.rb +0 -7
- data/lib/error/FailedToLiteraliseError.rb +0 -7
- data/lib/error/FailedVariableMatch.rb +0 -7
- data/lib/error/ImproperStatementUsageError.rb +0 -7
- data/lib/error/IncompatiableRequirementsError.rb +0 -7
- data/lib/error/InvalidStatementError.rb +0 -7
- data/lib/error/MethodSizeError.rb +0 -7
- data/lib/error/RuntimeSyntaxError.rb +0 -7
- data/lib/error/UnexpectedStatementTypeError.rb +0 -7
- data/lib/error/UnknownStatementType.rb +0 -7
- data/lib/error/UnliteralisableError.rb +0 -7
- data/lib/implemented_chain.rb +0 -35
- data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
- data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
- data/lib/intrinsic/IntrinsicObject.rb +0 -22
- data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
- data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
- data/lib/logger/StandardLogger.rb +0 -62
- data/lib/required.rb +0 -222
- data/lib/ruby_code/Array.rb +0 -95
- data/lib/ruby_code/Fixnum.rb +0 -39
- data/lib/ruby_code/Hash.rb +0 -25
- data/lib/ruby_code/NilClass.rb +0 -19
- data/lib/ruby_code/Object.rb +0 -24
- data/lib/ruby_code/String.rb +0 -63
- data/lib/ruby_code/Symbol.rb +0 -7
- data/lib/standard_library/Tasks.rb +0 -12
- data/lib/theories.rb +0 -166
- data/lib/theory/ActionImplementation.rb +0 -17
- data/lib/theory/TheoryAction.rb +0 -100
- data/lib/theory/TheoryChainValidator.rb +0 -103
- data/lib/theory/TheoryComponent.rb +0 -59
- data/lib/theory/TheoryConnector.rb +0 -756
- data/lib/theory/TheoryDependent.rb +0 -135
- data/lib/theory/TheoryImplementation.rb +0 -75
- data/lib/theory/TheoryResult.rb +0 -131
- data/lib/theory/TheoryVariable.rb +0 -63
- data/lib/theory/theory_collection.rb +0 -62
- data/lib/util/ClassEvaluation.rb +0 -44
- data/lib/util/CodeEvaluation.rb +0 -39
- data/lib/util/DeclarationStatementEvaluation.rb +0 -32
- data/lib/util/MethodEvaluation.rb +0 -49
- data/lib/util/MethodTester.rb +0 -71
- data/lib/util/MethodValidation.rb +0 -149
- data/lib/util/MethodWriter.rb +0 -66
- data/lib/util/Parser.rb +0 -305
- data/lib/util/StatementCheck.rb +0 -44
- data/lib/util/StringToTheory.rb +0 -142
- data/lib/util/System.rb +0 -8
- data/spec/cauldron/chain_spec.rb +0 -24
- data/spec/cauldron/demos_spec.rb +0 -30
- data/spec/cauldron/runtime_method_spec.rb +0 -92
- data/spec/cauldron/saver_spec.rb +0 -45
- data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
- data/spec/cauldron/theory_action_spec.rb +0 -25
- data/spec/cauldron/theory_connector_spec.rb +0 -52
- data/spec/cauldron/theory_spec.rb +0 -59
- data/spec/cauldron/unified_chain_spec.rb +0 -140
- data/test/fixtures/chains/1/declaration.txt +0 -26
- data/test/fixtures/chains/1/dump +0 -0
- data/test/fixtures/chains/2/declaration.txt +0 -26
- data/test/fixtures/chains/2/dump +0 -0
- data/test/fixtures/chains/3/declaration.txt +0 -26
- data/test/fixtures/chains/3/dump +0 -0
- data/test/fixtures/implementation_results/0/declaration.txt +0 -3
- data/test/fixtures/implementation_results/0/dump +0 -0
- data/test/fixtures/theories/0/declaration.txt +0 -9
- data/test/fixtures/theories/0/desc +0 -10
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/declaration.txt +0 -15
- data/test/fixtures/theories/1/desc +0 -11
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/declaration.txt +0 -23
- data/test/fixtures/theories/10/desc +0 -17
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/declaration.txt +0 -20
- data/test/fixtures/theories/11/desc +0 -14
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/declaration.txt +0 -18
- data/test/fixtures/theories/12/desc +0 -12
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/declaration.txt +0 -24
- data/test/fixtures/theories/13/desc +0 -20
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/declaration.txt +0 -26
- data/test/fixtures/theories/14/desc +0 -20
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/declaration.txt +0 -20
- data/test/fixtures/theories/15/desc +0 -14
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/declaration.txt +0 -30
- data/test/fixtures/theories/16/desc +0 -14
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/declaration.txt +0 -25
- data/test/fixtures/theories/17/desc +0 -11
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/declaration.txt +0 -23
- data/test/fixtures/theories/18/desc +0 -11
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/declaration.txt +0 -23
- data/test/fixtures/theories/19/desc +0 -11
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/declaration.txt +0 -12
- data/test/fixtures/theories/2/desc +0 -10
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/declaration.txt +0 -23
- data/test/fixtures/theories/20/desc +0 -17
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/declaration.txt +0 -19
- data/test/fixtures/theories/3/desc +0 -11
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/declaration.txt +0 -11
- data/test/fixtures/theories/4/desc +0 -11
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/declaration.txt +0 -6
- data/test/fixtures/theories/5/desc +0 -9
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/declaration.txt +0 -13
- data/test/fixtures/theories/6/desc +0 -11
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/declaration.txt +0 -19
- data/test/fixtures/theories/7/desc +0 -11
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/declaration.txt +0 -21
- data/test/fixtures/theories/8/desc +0 -11
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/declaration.txt +0 -24
- data/test/fixtures/theories/9/desc +0 -20
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/0/desc.txt +0 -9
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/0/theory_id +0 -1
- data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/1/desc.txt +0 -9
- data/test/fixtures/theory_implementations/1/dump +0 -1
- data/test/fixtures/theory_implementations/1/theory_id +0 -1
- data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/2/desc.txt +0 -9
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/fixtures/theory_implementations/2/theory_id +0 -1
- data/test/output/simple_method.txt +0 -5
- data/test/output/test_method/first_possible_method.txt +0 -6
- data/test/output/test_simple_cases/simple_case_01.txt +0 -8
- data/test/output/test_simple_cases/simple_case_02.txt +0 -7
- data/test/output/test_simple_cases/simple_case_03.txt +0 -8
- data/test/output/test_simple_cases/simple_case_04.txt +0 -8
- data/test/output/test_simple_cases/simple_case_05.txt +0 -8
- data/test/output/test_simple_cases/simple_case_06.txt +0 -9
- data/test/output/test_simple_cases/simple_case_07.txt +0 -9
- data/test/output/test_simple_cases/simple_case_08.txt +0 -9
- data/test/tc_describe.rb +0 -46
- data/test/tc_method.rb +0 -130
- data/test/tc_requirement.rb +0 -30
- data/test/tc_suite_complete.rb +0 -26
- data/test/tc_variable.rb +0 -52
- data/test/ts_complete.rb +0 -74
- data/test/ts_stable.rb +0 -81
- data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
- data/test/unit/core/method_call/tc_class_call.rb +0 -20
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
- data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
- data/test/unit/core/statement/tc_array_access.rb +0 -63
- data/test/unit/core/statement/tc_block_statement.rb +0 -53
- data/test/unit/core/statement/tc_hack_statement.rb +0 -26
- data/test/unit/core/statement/tc_open_statement.rb +0 -79
- data/test/unit/core/statement/tc_statement.rb +0 -483
- data/test/unit/core/statement/tc_statement_group.rb +0 -35
- data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
- data/test/unit/core/statement/tc_theory_statement.rb +0 -53
- data/test/unit/core/syntax/tc_block_container.rb +0 -32
- data/test/unit/core/syntax/tc_if_container.rb +0 -39
- data/test/unit/core/tc_class_method_call.rb +0 -34
- data/test/unit/core/tc_container.rb +0 -41
- data/test/unit/core/tc_ctest_case.rb +0 -25
- data/test/unit/core/tc_instance_call_container.rb +0 -93
- data/test/unit/core/tc_literal.rb +0 -30
- data/test/unit/core/tc_theory_generator.rb +0 -336
- data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
- data/test/unit/core/tracking/tc_history.rb +0 -104
- data/test/unit/core/tracking/tc_step.rb +0 -65
- data/test/unit/core/variable/tc_array_variable.rb +0 -61
- data/test/unit/core/variable/tc_block_variable.rb +0 -17
- data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
- data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
- data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
- data/test/unit/core/variable/tc_string_variable.rb +0 -37
- data/test/unit/core/variable/tc_unknown.rb +0 -24
- data/test/unit/core/variable/tc_variable_reference.rb +0 -28
- data/test/unit/ruby_code/tc_array.rb +0 -64
- data/test/unit/ruby_code/tc_fixnum.rb +0 -18
- data/test/unit/ruby_code/tc_hash.rb +0 -41
- data/test/unit/ruby_code/tc_string.rb +0 -38
- data/test/unit/tc_chain.rb +0 -434
- data/test/unit/tc_chain_mapping.rb +0 -62
- data/test/unit/tc_chain_with_case_1.rb +0 -169
- data/test/unit/tc_instance_call.rb +0 -40
- data/test/unit/tc_method_usage.rb +0 -35
- data/test/unit/tc_pot.rb +0 -124
- data/test/unit/tc_runtime_tracking_method.rb +0 -40
- data/test/unit/tc_theory.rb +0 -531
- data/test/unit/tc_variable_declaration.rb +0 -32
- data/test/unit/theory/tc_theory_action.rb +0 -108
- data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
- data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
- data/test/unit/theory/tc_theory_connector.rb +0 -361
- data/test/unit/theory/tc_theory_dependent.rb +0 -153
- data/test/unit/theory/tc_theory_implementation.rb +0 -137
- data/test/unit/theory/tc_theory_result.rb +0 -112
- data/test/unit/theory/tc_theory_variable.rb +0 -45
- data/test/unit/util/tc_method_validation.rb +0 -101
- data/test/unit/util/tc_parser.rb +0 -110
- data/test/unit/util/tc_string_to_theory.rb +0 -300
- data/test/unit/variable/tc_method_usage_variable.rb +0 -25
- 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
|