cauldron 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. data/Gemfile +6 -0
  2. data/Gemfile.lock +63 -0
  3. data/History.md +5 -0
  4. data/Rakefile +62 -16
  5. data/VERSION +1 -1
  6. data/cauldron.gemspec +463 -0
  7. data/cauldron/lib/cauldron.rb +1 -1
  8. data/features/cauldron_generates_runtime_method.feature +7 -4
  9. data/features/cauldron_generates_single_paramter_methods.feature +25 -0
  10. data/features/cauldron_interactive_start_terminal.feature +17 -0
  11. data/features/cauldron_quit_terminal.feature +9 -0
  12. data/features/cauldron_start_terminal.feature +0 -1
  13. data/features/step_definitions/cauldron_steps.rb +10 -5
  14. data/features/step_definitions/terminal_steps.rb +27 -0
  15. data/features/support/env.rb +2 -0
  16. data/features/support/hooks.rb +15 -0
  17. data/lib/Chain.rb +3 -3
  18. data/lib/Mapping.rb +1 -0
  19. data/lib/PartialChain.rb +253 -0
  20. data/lib/Theory.rb +28 -4
  21. data/lib/UnifiedChain.rb +94 -125
  22. data/lib/cauldron.rb +3 -0
  23. data/lib/cauldron/demos.rb +4 -4
  24. data/lib/cauldron/env.rb +1 -0
  25. data/lib/cauldron/pot.rb +42 -38
  26. data/lib/cauldron/terminal.rb +19 -3
  27. data/lib/cauldron/util/home.rb +21 -0
  28. data/lib/cauldron/util/saver.rb +45 -0
  29. data/lib/core/Container.rb +1 -1
  30. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +28 -28
  31. data/lib/core/runtime_method/RuntimeMethod.rb +6 -23
  32. data/lib/core/statement/ActsAsStatement.rb +0 -96
  33. data/lib/core/statement/BlockStatement.rb +1 -1
  34. data/lib/core/statement/OpenStatement.rb +1 -1
  35. data/lib/core/statement/Statement.rb +39 -94
  36. data/lib/core/statement/TheoryStatement.rb +1 -1
  37. data/lib/core/syntax/BlockContainer.rb +0 -28
  38. data/lib/core/variable/MethodParameter.rb +1 -1
  39. data/lib/required.rb +2 -14
  40. data/lib/theories.rb +0 -1
  41. data/lib/theory/ActionImplementation.rb +1 -1
  42. data/lib/theory/TheoryAction.rb +2 -2
  43. data/lib/theory/TheoryConnector.rb +11 -14
  44. data/lib/theory/TheoryImplementation.rb +10 -9
  45. data/lib/util/MethodWriter.rb +10 -10
  46. data/sandbox.rb +23 -0
  47. data/spec/cauldron/pot_spec.rb +62 -10
  48. data/spec/cauldron/runtime_method_spec.rb +31 -17
  49. data/spec/cauldron/saver_spec.rb +45 -0
  50. data/spec/cauldron/terminal_spec.rb +10 -1
  51. data/spec/cauldron/theory_spec.rb +4 -4
  52. data/spec/cauldron/unified_chain_spec.rb +38 -0
  53. data/spec/spec_helper.rb +3 -1
  54. data/tasks/development_tasks.rake +4 -0
  55. data/tasks/theory_tasks.rake +16 -20
  56. data/test/fixtures/theories/0/desc +6 -6
  57. data/test/fixtures/theories/0/dump +0 -0
  58. data/test/fixtures/theories/1/desc +7 -7
  59. data/test/fixtures/theories/1/dump +0 -0
  60. data/test/fixtures/theories/10/desc +13 -13
  61. data/test/fixtures/theories/10/dump +0 -0
  62. data/test/fixtures/theories/11/desc +10 -10
  63. data/test/fixtures/theories/11/dump +0 -0
  64. data/test/fixtures/theories/12/desc +9 -9
  65. data/test/fixtures/theories/12/dump +0 -0
  66. data/test/fixtures/theories/13/desc +16 -16
  67. data/test/fixtures/theories/13/dump +0 -0
  68. data/test/fixtures/theories/14/desc +16 -16
  69. data/test/fixtures/theories/14/dump +0 -0
  70. data/test/fixtures/theories/15/desc +10 -10
  71. data/test/fixtures/theories/15/dump +0 -0
  72. data/test/fixtures/theories/16/desc +10 -10
  73. data/test/fixtures/theories/16/dump +0 -0
  74. data/test/fixtures/theories/17/desc +7 -7
  75. data/test/fixtures/theories/17/dump +0 -0
  76. data/test/fixtures/theories/18/desc +7 -7
  77. data/test/fixtures/theories/18/dump +0 -0
  78. data/test/fixtures/theories/19/desc +7 -7
  79. data/test/fixtures/theories/19/dump +0 -0
  80. data/test/fixtures/theories/2/desc +6 -6
  81. data/test/fixtures/theories/2/dump +0 -0
  82. data/test/fixtures/theories/20/desc +13 -13
  83. data/test/fixtures/theories/20/dump +0 -0
  84. data/test/fixtures/theories/3/desc +7 -7
  85. data/test/fixtures/theories/3/dump +0 -0
  86. data/test/fixtures/theories/4/desc +7 -7
  87. data/test/fixtures/theories/4/dump +0 -0
  88. data/test/fixtures/theories/5/desc +6 -6
  89. data/test/fixtures/theories/5/dump +0 -0
  90. data/test/fixtures/theories/6/desc +7 -7
  91. data/test/fixtures/theories/6/dump +0 -0
  92. data/test/fixtures/theories/7/desc +7 -7
  93. data/test/fixtures/theories/7/dump +0 -0
  94. data/test/fixtures/theories/8/desc +7 -7
  95. data/test/fixtures/theories/8/dump +0 -0
  96. data/test/fixtures/theories/9/desc +16 -16
  97. data/test/fixtures/theories/9/dump +0 -0
  98. data/test/fixtures/theory_implementations/0/dump +0 -0
  99. data/test/fixtures/theory_implementations/2/dump +0 -0
  100. data/test/ts_complete.rb +1 -10
  101. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +1 -0
  102. data/test/unit/core/runtime_method/tc_runtime_method.rb +16 -39
  103. data/test/unit/core/statement/tc_block_statement.rb +3 -3
  104. data/test/unit/core/statement/tc_open_statement.rb +4 -4
  105. data/test/unit/core/statement/tc_statement.rb +2 -147
  106. data/test/unit/core/statement/tc_theory_statement.rb +1 -1
  107. data/test/unit/theory/tc_theory_dependent.rb +3 -3
  108. data/test/unit/theory/tc_theory_result.rb +5 -5
  109. data/test/unit/util/tc_method_validation.rb +45 -45
  110. data/test/unit/util/tc_parser.rb +1 -1
  111. data/test/unit/util/tc_string_to_theory.rb +2 -2
  112. metadata +74 -48
  113. data/lib/ScopeDependencies.rb +0 -8
  114. data/lib/core/statement/StatementDependencies.rb +0 -271
  115. data/lib/core/structure/DeclareNewInstanceStructure.rb +0 -49
  116. data/lib/core/structure/DeclareRuntimeMethodStructure.rb +0 -34
  117. data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +0 -31
  118. data/lib/core/structure/DeclareVariableAsVariableStructure.rb +0 -52
  119. data/lib/core/structure/FixnumAdditionStructure.rb +0 -56
  120. data/lib/core/structure/InstanceCallContainerStructure.rb +0 -50
  121. data/lib/core/structure/InstanceCallStructure.rb +0 -53
  122. data/lib/core/structure/InstanceMethodCallStructure.rb +0 -21
  123. data/lib/core/structure/ReturnStructure.rb +0 -20
  124. data/lib/core/structure/StatementStructure.rb +0 -11
  125. data/test/unit/core/statement/tc_statement_dependencies.rb +0 -147
  126. data/test/unit/core/structure/tc_declare_new_instance_structure.rb +0 -41
  127. data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +0 -41
  128. data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +0 -66
  129. data/test/unit/core/structure/tc_instance_call_container_structure.rb +0 -41
  130. data/test/unit/core/structure/tc_return_structure.rb +0 -32
  131. data/test/unit/tc_instance_call_structure.rb +0 -35
  132. data/test/unit/tc_statement_structure_2.rb +0 -43
@@ -1,11 +1,11 @@
1
1
  if:
2
- if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])
3
- return true
4
- end
2
+ if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])
3
+ return true
4
+ end
5
5
 
6
6
  action:
7
- <runtime_method>.add_statement_at(Statement.new(Return.new, InstanceCallContainer.new(var1.params[var4], StringLength.new)),var1.statement_id)
7
+ <runtime_method>.add_statement_at(Statement.new(Return.new, InstanceCallContainer.new(var1.params[var4], StringLength.new)),var1.statement_id)
8
8
  result:
9
- if(var1.pass?(var2[var3]))
10
- return true
11
- end
9
+ if(var1.pass?(var2[var3]))
10
+ return true
11
+ end
@@ -1,11 +1,11 @@
1
1
  if:
2
- if(var1[var2][:params][var2] + var1[var2][:params][var3] == var1[var2][:output])
3
- return true
4
- end
2
+ if(var1[var2][:params][var2] + var1[var2][:params][var3] == var1[var2][:output])
3
+ return true
4
+ end
5
5
 
6
6
  action:
7
- <runtime_method>.add_statement_at(Statement.new(Unknown.new, Equal.new, var4.params[var2], Addition.new, var4.params[var3]),var4.statement_id)
7
+ <runtime_method>.add_statement_at(Statement.new(Unknown.new, Equal.new, var4.params[var2], Addition.new, var4.params[var3]),var4.statement_id)
8
8
  result:
9
- if(var4.all_pass?(var1))
10
- return true
11
- end
9
+ if(var4.all_pass?(var1))
10
+ return true
11
+ end
@@ -1,20 +1,20 @@
1
1
  if:
2
- if(var2[var3].kind_of?(CTestCase))
3
- return true
4
- end
5
- if(var6.kind_of?(Fixnum))
6
- return true
7
- end
8
- if((var2[var3][:params][var6] == var2[var4][:params][var6]) == false)
9
- return true
10
- end
2
+ if(var2[var3].kind_of?(CTestCase))
3
+ return true
4
+ end
5
+ if(var6.kind_of?(Fixnum))
6
+ return true
7
+ end
8
+ if((var2[var3][:params][var6] == var2[var4][:params][var6]) == false)
9
+ return true
10
+ end
11
11
 
12
12
  action:
13
- <runtime_method>.add_statement_at(Statement.new(If.new, Container.new(var2[var3][:params][var6], Equivalent.new, var2[var3][:output])),var1.statement_id)
13
+ <runtime_method>.add_statement_at(Statement.new(If.new, Container.new(var2[var3][:params][var6], Equivalent.new, var2[var3][:output])),var1.statement_id)
14
14
  result:
15
- if(var1.history(var2[var3][:params]).any?{ |x| x.statement_id == var1.last.statement_id} )
16
- return true
17
- end
18
- if((var1.history(var2[var4][:params]).any?{ |x| x.statement_id == var1.last.statement_id} ) == false)
19
- return true
20
- end
15
+ if(var1.history(var2[var3][:params]).any?{ |x| x.statement_id == var1.last.statement_id} )
16
+ return true
17
+ end
18
+ if((var1.history(var2[var4][:params]).any?{ |x| x.statement_id == var1.last.statement_id} ) == false)
19
+ return true
20
+ end
@@ -12,7 +12,7 @@ require 'test/unit/core/tc_instance_call_container'
12
12
  # require 'test/unit/core/syntax/tc_block_container'
13
13
  # require 'test/unit/core/syntax/tc_if_container'
14
14
  # require 'test/unit/core/declaration/tc_literal_declaration'
15
- #
15
+
16
16
  require 'test/unit/ruby_code/tc_string'
17
17
  require 'test/unit/ruby_code/tc_fixnum'
18
18
  require 'test/unit/ruby_code/tc_hash'
@@ -33,12 +33,6 @@ require 'test/unit/core/statement/tc_statement_group'
33
33
  require 'test/unit/core/statement/tc_array_access'
34
34
  require 'test/unit/core/statement/tc_theory_statement'
35
35
 
36
- require 'test/unit/core/structure/tc_return_structure'
37
- require 'test/unit/core/structure/tc_instance_call_container_structure'
38
- require 'test/unit/core/structure/tc_declare_new_instance_structure'
39
- require 'test/unit/core/structure/tc_declare_variable_as_literal_structure'
40
- require 'test/unit/core/structure/tc_declare_variable_as_variable_structure'
41
-
42
36
  require 'test/unit/core/tracking/tc_history'
43
37
  require 'test/unit/core/tracking/tc_step'
44
38
 
@@ -66,12 +60,9 @@ require 'test/unit/theory/tc_theory_implementation'
66
60
  # require 'test/unit/theory/tc_theory_chain_validator'
67
61
  require 'test/unit/theory/tc_theory_action_implementation'
68
62
 
69
- require 'test/unit/tc_instance_call_structure'
70
63
  require 'test/unit/tc_instance_call'
71
64
  require 'test/unit/tc_method_usage'
72
65
  require 'test/unit/tc_runtime_tracking_method'
73
- require 'test/unit/core/statement/tc_statement_dependencies'
74
- require 'test/unit/tc_statement_structure_2'
75
66
  require 'test/unit/tc_variable_declaration'
76
67
 
77
68
  require 'test/tc_describe'
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
2
 
3
+ require 'cauldron'
3
4
  require 'required'
4
5
  require 'test/unit'
5
6
 
@@ -1,6 +1,6 @@
1
1
  $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
2
 
3
- require 'required'
3
+ require 'cauldron'
4
4
  require 'test/unit'
5
5
 
6
6
  class TestRuntimeMethod < Test::Unit::TestCase
@@ -256,7 +256,9 @@ class TestRuntimeMethod < Test::Unit::TestCase
256
256
  tracking_method = RuntimeTrackingMethod.new(instance_tracking_variable)
257
257
 
258
258
  # Trackify it and check nothing is raised
259
- assert_nothing_raised(){string_runtime_method.trackify(ParametersContainer.new('Manny'.to_var),tracking_method)}
259
+ assert_nothing_raised(){
260
+ string_runtime_method.trackify(ParametersContainer.new('Manny'.to_var),tracking_method)
261
+ }
260
262
 
261
263
  # Check that the method is unchanged after trackify
262
264
  assert_equal(original_written,string_runtime_method.write)
@@ -318,8 +320,8 @@ class TestRuntimeMethod < Test::Unit::TestCase
318
320
  }
319
321
  realised_instance_1 = simple_method.realise2(['Grim','fandango','Threepwood'])
320
322
  assert_equal(
321
- "\n#\n#\t@param\t[StringVariable] 'Grim'\n#\t@param\t[StringVariable] 'fandango'\n" \
322
- "#\t@param\t[StringVariable] 'Threepwood'\n#\n#\n" \
323
+ "\n#\n# @param [StringVariable] 'Grim'\n# @param [StringVariable] 'fandango'\n" \
324
+ "# @param [StringVariable] 'Threepwood'\n#\n#\n" \
323
325
  "def method_0(var_#{simple_method.usage[0].variable_id}, var_#{simple_method.usage[1].variable_id}, var_#{simple_method.usage[2].variable_id})\n\nend\n",
324
326
  realised_instance_1.write
325
327
  )
@@ -342,9 +344,9 @@ class TestRuntimeMethod < Test::Unit::TestCase
342
344
  simple_method.push(Statement.new(var_c,Equal.new,InstanceCallContainer.new(var_a,StringLength.new)))
343
345
  realised_instance_2 = simple_method.realise2(['Grim','fandango','Threepwood'])
344
346
  assert_equal(
345
- "\n#\n#\t@param\t[StringVariable] 'Grim'\n#\t@param\t[StringVariable] 'fandango'\n#\t@param\t[StringVariable] 'Threepwood'\n#\n#\n"\
347
+ "\n#\n# @param [StringVariable] 'Grim'\n# @param [StringVariable] 'fandango'\n# @param [StringVariable] 'Threepwood'\n#\n#\n"\
346
348
  "def method_0(var_#{simple_method.usage[0].variable_id}, var_#{simple_method.usage[1].variable_id}, var_#{simple_method.usage[2].variable_id})"\
347
- "\n\tvar_64 = var_35.length\nend\n",
349
+ "\n var_64 = var_35.length\nend\n",
348
350
  realised_instance_2.write
349
351
  )
350
352
 
@@ -354,11 +356,11 @@ class TestRuntimeMethod < Test::Unit::TestCase
354
356
  simple_method_written_3 = simple_method.write
355
357
  realised_simple_method_3 = simple_method.realise2(['Grim','fandango','Threepwood'])
356
358
  assert_equal(
357
- "\n#\n#\t@param\t[StringVariable] 'Grim'\n"\
358
- "#\t@param\t[StringVariable] 'fandango'\n"\
359
- "#\t@param\t[StringVariable] 'Threepwood'\n"\
359
+ "\n#\n# @param [StringVariable] 'Grim'\n"\
360
+ "# @param [StringVariable] 'fandango'\n"\
361
+ "# @param [StringVariable] 'Threepwood'\n"\
360
362
  "#\n#\ndef method_0(var_#{simple_method.usage[0].variable_id}, var_#{simple_method.usage[1].variable_id}, var_#{simple_method.usage[2].variable_id})\n"\
361
- "\tvar_64 = var_#{simple_method.usage[0].variable_id}.length\n\tvar_76 = var_#{simple_method.usage[0].variable_id}.chop\nend\n",
363
+ " var_64 = var_#{simple_method.usage[0].variable_id}.length\n var_76 = var_#{simple_method.usage[0].variable_id}.chop\nend\n",
362
364
  realised_simple_method_3.write
363
365
  )
364
366
 
@@ -377,7 +379,7 @@ class TestRuntimeMethod < Test::Unit::TestCase
377
379
  simple_method_written_4 = simple_method.write
378
380
  realised_simple_method_4 = simple_method.realise2(['Grim','fandango','Threepwood'])
379
381
  assert_equal(
380
- "\n#\n#\t@param\t[StringVariable] 'Grim'\n#\t@param\t[StringVariable] 'fandango'\n#\t@param\t[StringVariable] 'Threepwood'\n#\n#\ndef method_0(var_35, var_36, var_37)\n\tvar_64 = var_35.length\n\tvar_76 = var_35.chop\n\tvar_89 = var_36.length\n\tvar_90 = var_89 + var_64\nend\n",
382
+ "\n#\n# @param [StringVariable] 'Grim'\n# @param [StringVariable] 'fandango'\n# @param [StringVariable] 'Threepwood'\n#\n#\ndef method_0(var_35, var_36, var_37)\n var_64 = var_35.length\n var_76 = var_35.chop\n var_89 = var_36.length\n var_90 = var_89 + var_64\nend\n",
381
383
  realised_simple_method_4.write
382
384
  )
383
385
 
@@ -400,7 +402,7 @@ class TestRuntimeMethod < Test::Unit::TestCase
400
402
 
401
403
  # a. Create the method that returns a statement variable
402
404
  return_statement_method = RuntimeMethod.new(MethodUsage.new(),Statement.new.to_var)
403
- return_statement_method.push(Statement.new(Return.new,Statement.new(Return.new,'sparky').to_declaration ))
405
+ return_statement_method.push(Parser.run('return Statement.new(Return.new,"sparky")'))
404
406
 
405
407
  # b. Create the method
406
408
  runtime_method_2 = RuntimeMethod.new(MethodUsage.new)
@@ -437,10 +439,10 @@ class TestRuntimeMethod < Test::Unit::TestCase
437
439
  assert_not_equal("#\n#\ndef method_"+method_example_b.method_id.to_s+"\n\nend\n",method_example_b.write)
438
440
 
439
441
  # Test that neested methods are writen properly
440
- assert_equal("\n#\n#\ndef method_6\n\tvar_28 = ''\n\tvar_29 = 'x'\n\t3.times do |var_30|\n\t\tvar_28 = var_28 + var_29\n\tend\n\nend\n",@build_xxx_method.write)
442
+ assert_equal("\n#\n#\ndef method_6\n var_28 = ''\n var_29 = 'x'\n 3.times do |var_30|\n var_28 = var_28 + var_29\n end\n\nend\n",@build_xxx_method.write)
441
443
 
442
444
  # Test how the method is written with tabs
443
- assert_equal("\n\t#\n\t#\n\tdef method_6\n\t\tvar_28 = ''\n\t\tvar_29 = 'x'\n\t\t3.times do |var_30|\n\t\t\tvar_28 = var_28 + var_29\n\t\tend\n\n\tend\n",@build_xxx_method.write(nil,1))
445
+ assert_equal("\n #\n #\n def method_6\n var_28 = ''\n var_29 = 'x'\n 3.times do |var_30|\n var_28 = var_28 + var_29\n end\n\n end\n",@build_xxx_method.write(nil,1))
444
446
 
445
447
  end
446
448
 
@@ -510,31 +512,6 @@ class TestRuntimeMethod < Test::Unit::TestCase
510
512
  assert_equal(9,@simple_method.to_var(8,9).uniq_id)
511
513
 
512
514
  end
513
-
514
- def test_to_declaration
515
-
516
- # Test the simplest possible runtime method - accepts nothing and returns nothing
517
- simple_runtime_method = RuntimeMethod.new(MethodUsage.new,nil.to_var)
518
- assert_nothing_raised() {simple_runtime_method.to_declaration}
519
-
520
- # Test a simple runtime method expected to return a literal
521
- literal_return_runtime_method = RuntimeMethod.new(MethodUsage.new,56)
522
- assert_nothing_raised() {literal_return_runtime_method.to_declaration}
523
-
524
- # Test a simple runtime method that accepts a parameter
525
- single_parameter_runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new()),nil)
526
- assert_nothing_raised() {single_parameter_runtime_method.to_declaration}
527
-
528
- # Test that a runtime method that contains one statement is duplicated correctly
529
- test_3_runtime_method = RuntimeMethod.new(MethodUsage.new)
530
- test_3_runtime_method.push Statement.new(Return.new,'Tony')
531
- assert_equal('Tony',MethodValidation.new.use_runtime_method(test_3_runtime_method))
532
-
533
- # Create a duplicate of the simple runtime method
534
- duplicate_test_3_runtime_method = test_3_runtime_method.to_declaration.evaluate
535
- assert_equal('Tony',MethodValidation.new.use_runtime_method(duplicate_test_3_runtime_method))
536
-
537
- end
538
515
 
539
516
  def test_abstract_variables_for_tracking_with_some_simple_statement
540
517
  #assert_equal(1,@simple_method.abstract_variables_for_tracking(Parser.run('var4 = "test"')).length)
@@ -35,13 +35,13 @@ class TestBlockStatement < Test::Unit::TestCase
35
35
 
36
36
  def test_write
37
37
  assert_equal("var_0.each do |var_"+@block_variable.variable_id.to_s+"|\nend\n",@each_game.write(0))
38
- assert_equal("\tvar_0.each do |var_1|\n\tend\n",@each_game.write(1))
38
+ assert_equal(" var_0.each do |var_1|\n end\n",@each_game.write(1))
39
39
  assert_equal(
40
- "var_0.each do |var_"+@populated_loop_block_var.variable_id.to_s+"|\n\tvar_"+@declared_unknown.variable_id.to_s+" = 6\nend\n",
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
41
  @populated_loop.write(0)
42
42
  )
43
43
  assert_equal(
44
- "\tvar_0.each do |var_"+@populated_loop_block_var.variable_id.to_s+"|\n\t\tvar_"+@declare_six.declared_variable_id.to_s+" = 6\n\tend\n",
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
45
  @populated_loop.write(1)
46
46
  )
47
47
  end
@@ -37,7 +37,7 @@ class TestOpenStatement < Test::Unit::TestCase
37
37
 
38
38
  # Test that internal statements are properly tabs
39
39
  @simple_open_if_statement << Statement.new(Return.new,True.new)
40
- assert_equal("if(#{@simple_if_statement_var.write} == 'Stobart')\n\treturn true\nend" ,@simple_open_if_statement.write)
40
+ assert_equal("if(#{@simple_if_statement_var.write} == 'Stobart')\n return true\nend" ,@simple_open_if_statement.write)
41
41
 
42
42
  end
43
43
 
@@ -71,9 +71,9 @@ class TestOpenStatement < Test::Unit::TestCase
71
71
 
72
72
  def test_write_structure_with_simple_examples
73
73
  assert_equal("if(a == b)\nend",Parser.run("if(var1 == var2)\nend").write_structure)
74
- assert_equal("if(a == b)\n\treturn c\nend",Parser.run("if(var1 == var2)\nreturn 8\nend").write_structure)
75
- assert_equal("if(a.chop == b)\n\treturn c\nend",Parser.run("if(var1.chop == var2)\nreturn 8\nend").write_structure)
76
- assert_equal("if(a.chop == b)\n\treturn a.chop\nend", Parser.run("if(var1.chop == var2)\nreturn var1.chop\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
77
  end
78
78
 
79
79
  end
@@ -1,6 +1,6 @@
1
1
  $LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
2
2
 
3
- require 'required'
3
+ require 'cauldron'
4
4
  require 'test/unit'
5
5
 
6
6
  class TestStatement < Test::Unit::TestCase
@@ -212,21 +212,6 @@ class TestStatement < Test::Unit::TestCase
212
212
  assert_not_equal(statement.object_id,copied_statement[i].object_id)
213
213
  end
214
214
 
215
- # Check that the statement_type is maintained for copied statements.
216
- statement_1 = Statement.new(@var_a,Equal.new,Literal.new('Daggerfall'))
217
- #statement_1.statement_type = StatementStructure::DECLARATION_STATEMENT
218
- assert_equal(statement_1.copy.statement_type,statement_1.statement_type)
219
-
220
- end
221
-
222
- # Tests it can identifiy the structure of the statement.
223
- #
224
- def test_statement_type
225
- assert_equal(StatementStructure::DECLARATION_STATEMENT,@statement_b.statement_type)
226
- assert_equal(StatementStructure::RETURN_STATEMENT,@return_statement_a.statement_type)
227
-
228
- # Test some poorly structured statements
229
- assert_raises(UnknownStatementType){Statement.new(RequirementsVariable.new,RequirementsVariable.new).statement_type}
230
215
  end
231
216
 
232
217
  def test_required_variable_ids
@@ -314,42 +299,6 @@ class TestStatement < Test::Unit::TestCase
314
299
  def test_write
315
300
 
316
301
  end
317
-
318
- def test_to_declaration
319
-
320
- # Check that statement returns a declaration statement
321
- assert_equal(true,@simple_statement.to_declaration.kind_of?(VariableDeclaration))
322
-
323
- # Check to_declaration command when excluding a variable
324
- assert_equal(
325
- "Statement.new(var_#{@var_c.variable_id}, Equal.new(), InstanceCallContainer.new(StringVariable.new('Arena'), Chop.new()))",
326
- @statement_b.to_declaration([@var_c.variable_id]).write
327
- )
328
-
329
- end
330
-
331
- def test_find_all_required_runtime_methods
332
-
333
- # Check that any empty array is returned if there are no runtime methods used
334
- assert_equal(0,@simple_statement.find_all_required_runtime_methods.length)
335
-
336
- # 1. Create a statement that calls a runtime method
337
- static_statement = Statement.new
338
- #static_statement.statement_type = StatementStructure::MISC_STATEMENT
339
- return_statement_method = RuntimeMethod.new(MethodUsage.new(),static_statement.to_var)
340
- return_statement = Statement.new(Return.new,'sparky')
341
- #return_statement.statement_type = StatementStructure::RETURN_STATEMENT
342
- return_declaration_statement = Statement.new(Return.new,return_statement.to_declaration )
343
- #return_declaration_statement.statement_type = StatementStructure::RETURN_STATEMENT
344
- return_statement_method.push(return_declaration_statement)
345
-
346
- # 1a. Create the statement that contains the method call
347
- statement_with_method_call = Statement.new(Unknown.new,Equal.new,DefCall.new(static_statement.to_var,return_statement_method))
348
- #statement_with_method_call.statement_type = StatementStructure::DECLARATION_STATEMENT
349
- assert_equal(1,statement_with_method_call.find_all_required_runtime_methods.length)
350
- assert(statement_with_method_call.find_all_required_runtime_methods.kind_of?(Array))
351
-
352
- end
353
302
 
354
303
  def test_realise2
355
304
 
@@ -399,12 +348,8 @@ class TestStatement < Test::Unit::TestCase
399
348
  called_runtime_method_3 = RuntimeMethod.new(MethodUsage.new,blank_statement.to_var)
400
349
 
401
350
  # b. Create the statement that is returned as a variable.
402
- returned_statement_variable = Statement.new(Return.new,'sparky')
403
351
  declared_return_statement_var = Unknown.new
404
- #declare_return_statement = Statement.new(declared_return_statement_var,Equal.new,returned_statement_variable.to_declaration)
405
- return_return_statement = Statement.new(Return.new,returned_statement_variable.to_declaration)
406
- #return_return_statement.statement_type = StatementStructure::RETURN_STATEMENT
407
- #declare_return_statement = StatementStructure::DECLARATION_STATEMENT
352
+ return_return_statement = Statement.new(Return.new,Parser.run("Statement.new(Return.new,'sparky')"))
408
353
  called_runtime_method_3.push(return_return_statement)
409
354
 
410
355
  # c. Create the method that includes a call to "called_runtime_method_3"
@@ -430,73 +375,6 @@ class TestStatement < Test::Unit::TestCase
430
375
 
431
376
  end
432
377
 
433
- def test_statement_type
434
-
435
- # Test that statement type is saved correctly - even after copying
436
- return_statement = Statement.new(Return.new,6.to_literal)
437
- #return_statement.statement_type = StatementStructure::RETURN_STATEMENT
438
- assert_equal(return_statement.statement_type,StatementStructure::RETURN_STATEMENT)
439
- assert_equal(return_statement.copy.statement_type,StatementStructure::RETURN_STATEMENT)
440
-
441
- # Test that return statements can be dynamically identified
442
- return_statement_without_statement_type = Statement.new(Return.new,8.to_literal)
443
- assert_nothing_raised(){return_statement_without_statement_type.statement_type}
444
- assert_equal(return_statement_without_statement_type.statement_type,StatementStructure::RETURN_STATEMENT)
445
-
446
- end
447
-
448
- def test_replace_variable_if
449
-
450
- # Create a simple statement will have it's variable replaced
451
- # unknown = 7
452
- statement_a_unknown = Unknown.new
453
- statement_a = Statement.new(statement_a_unknown,Equal.new,7.to_literal)
454
- assert(statement_a.first.kind_of?(Unknown))
455
- modified_statement_a = statement_a.replace_variable_if(FixnumVariable.new(7)) {|x| x.uniq_id == statement_a_unknown.uniq_id }
456
- assert(modified_statement_a.first.kind_of?(FixnumVariable))
457
-
458
- # Create a statement with an instance call container
459
- # unknown = 'test'.chop
460
- statement_b_unknown = Unknown.new
461
- statement_b = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new(statement_b_unknown,Chop.new))
462
- modified_statement_b = statement_b.replace_variable_if('test'.to_var) do |x|
463
- x.uniq_id == statement_b_unknown.uniq_id
464
- end
465
- assert(modified_statement_b.kind_of?(Statement))
466
- assert_equal(3,modified_statement_b.length)
467
- assert_not_equal(modified_statement_b[2].subject.variable_id,statement_b_unknown.variable_id)
468
-
469
- # Create a statement with parameters in the statement
470
- # ['goo'].push('jon')
471
- statement_c_unknown = Unknown.new
472
- statement_c = Statement.new(InstanceCallContainer.new(['goo'].to_var,Push.new,statement_c_unknown))
473
- modified_statement_c = statement_c.replace_variable_if('jon'.to_var) do |x|
474
- x.uniq_id == statement_c_unknown.uniq_id
475
- end
476
- assert(modified_statement_c.kind_of?(Statement))
477
- assert_not_equal(modified_statement_c[0][0].uniq_id,statement_c_unknown.uniq_id)
478
-
479
- # Create a statement with no matches
480
- # unknown = 5 + 6
481
- statement_d = Statement.new(Unknown.new,Equal.new,5.to_var,Addition.new,6.to_var)
482
- modified_statement_d = statement_d.replace_variable_if('jon'.to_var) do |x|
483
- x.uniq_id == 21312
484
- end
485
- assert_equal(statement_d.write,modified_statement_d.write)
486
-
487
- # Create an instance call statement with no matches
488
- # unknown = var_a.length
489
- statement_e = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new('richardson'.to_var,StringLength.new))
490
- modified_statement_e = statement_e.replace_variable_if('jon'.to_var) do |x|
491
- if x.uniq_id == 3242
492
- next true
493
- end
494
- false
495
- end
496
- assert_equal(statement_e.write,modified_statement_e.write)
497
-
498
- end
499
-
500
378
  def test_find_actual_variable
501
379
 
502
380
  # 1. Check that the actual variable is returned from a statement
@@ -535,29 +413,6 @@ class TestStatement < Test::Unit::TestCase
535
413
 
536
414
  end
537
415
 
538
- def test_exchange_variables
539
-
540
- # Create a statement that includes a method variable and is replaced by a different variable
541
- method_variable_1 = MethodParameter.new
542
- unknown_variable_1 = Unknown.new
543
- statement_1 = Statement.new(unknown_variable_1,Equal.new,InstanceCallContainer.new(method_variable_1,Chop.new))
544
- pip = 'pip'.to_var
545
- conversions = Hash.new()
546
- conversions[method_variable_1.variable_id.to_s.to_sym] = pip.copy
547
- assert(statement_1.exchange_variables(conversions).kind_of?(Statement))
548
- assert_nothing_raised(){statement_1.exchange_variables(conversions).to_literal_string}
549
- assert_equal(
550
- 'var_'+unknown_variable_1.variable_id.to_s+' = var_'+pip.variable_id.to_s+'.chop',
551
- statement_1.exchange_variables(conversions).write
552
- )
553
-
554
- # Create a statement that modifies an existing variable.
555
-
556
-
557
- # TODO Test with the same variable used twice in a statement e.g. var_a = var_b+var_b
558
-
559
- end
560
-
561
416
  def test_creates_variable?
562
417
 
563
418
  # Check that a declaration statement creates a variable