trackler 2.1.0.7 → 2.1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceOfSquaresCalculatorTest.java +9 -9
  4. data/tracks/java/exercises/gigasecond/src/test/java/GigasecondTest.java +4 -4
  5. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +10 -10
  6. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +12 -12
  7. data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +4 -4
  8. data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +11 -11
  9. data/tracks/java/exercises/space-age/src/test/java/SpaceAgeTest.java +8 -8
  10. data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +1 -1
  11. data/tracks/perl6/.travis.yml +1 -1
  12. data/tracks/perl6/exercises/bob/example.yaml +19 -0
  13. data/tracks/perl6/exercises/clock/clock.t +17 -10
  14. data/tracks/perl6/exercises/clock/example.yaml +7 -5
  15. data/tracks/perl6/exercises/grade-school/example.yaml +23 -0
  16. data/tracks/perl6/exercises/leap/example.yaml +6 -0
  17. data/tracks/perl6/exercises/phone-number/Example.pm +2 -2
  18. data/tracks/perl6/exercises/phone-number/PhoneNumber.pm6 +1 -1
  19. data/tracks/perl6/exercises/phone-number/example.yaml +12 -0
  20. data/tracks/perl6/exercises/phone-number/phone-number.t +100 -85
  21. data/tracks/perl6/exercises/space-age/Example.pm +13 -15
  22. data/tracks/ruby/README.md +22 -10
  23. data/tracks/ruby/{HINTS.md → exercises/accumulate/HINTS.md} +0 -0
  24. data/tracks/ruby/exercises/accumulate/accumulate_test.rb +0 -1
  25. data/tracks/ruby/exercises/acronym/.meta/generator/acronym_cases.rb +1 -1
  26. data/tracks/ruby/exercises/acronym/acronym_test.rb +1 -2
  27. data/tracks/ruby/exercises/all-your-base/.meta/generator/all_your_base_cases.rb +1 -1
  28. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -2
  29. data/tracks/ruby/exercises/allergies/allergies_test.rb +0 -1
  30. data/tracks/ruby/exercises/alphametics/.meta/generator/alphametics_cases.rb +1 -1
  31. data/tracks/ruby/exercises/alphametics/.meta/generator/test_template.erb +1 -2
  32. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +1 -2
  33. data/tracks/ruby/exercises/anagram/.meta/generator/anagram_cases.rb +1 -1
  34. data/tracks/ruby/exercises/anagram/anagram_test.rb +1 -2
  35. data/tracks/ruby/exercises/atbash-cipher/atbash_cipher_test.rb +0 -1
  36. data/tracks/ruby/exercises/beer-song/.meta/generator/beer_song_cases.rb +1 -1
  37. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -2
  38. data/tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb +0 -1
  39. data/tracks/ruby/exercises/binary-search/binary_search_test.rb +0 -1
  40. data/tracks/ruby/exercises/binary/.meta/generator/binary_cases.rb +1 -1
  41. data/tracks/ruby/exercises/binary/binary_test.rb +1 -2
  42. data/tracks/ruby/exercises/bob/bob_test.rb +0 -1
  43. data/tracks/ruby/exercises/bowling/.meta/generator/bowling_cases.rb +1 -1
  44. data/tracks/ruby/exercises/bowling/.meta/generator/test_template.erb +1 -2
  45. data/tracks/ruby/exercises/bowling/bowling_test.rb +1 -2
  46. data/tracks/ruby/exercises/bracket-push/.meta/generator/bracket_push_cases.rb +1 -1
  47. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +1 -2
  48. data/tracks/ruby/exercises/circular-buffer/circular_buffer_test.rb +0 -1
  49. data/tracks/ruby/exercises/clock/.meta/generator/clock_cases.rb +1 -1
  50. data/tracks/ruby/exercises/clock/clock_test.rb +1 -2
  51. data/tracks/ruby/exercises/connect/.meta/generator/connect_cases.rb +1 -1
  52. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +1 -2
  53. data/tracks/ruby/exercises/connect/connect_test.rb +1 -2
  54. data/tracks/ruby/exercises/crypto-square/crypto_square_test.rb +0 -1
  55. data/tracks/ruby/exercises/custom-set/.meta/generator/custom_set_cases.rb +1 -1
  56. data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
  57. data/tracks/ruby/exercises/diamond/diamond_test.rb +0 -1
  58. data/tracks/ruby/exercises/difference-of-squares/.meta/generator/difference_of_squares_cases.rb +1 -1
  59. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +1 -2
  60. data/tracks/ruby/exercises/dominoes/.meta/generator/dominoes_cases.rb +1 -1
  61. data/tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb +1 -2
  62. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -2
  63. data/tracks/ruby/exercises/etl/.meta/generator/etl_cases.rb +1 -1
  64. data/tracks/ruby/exercises/etl/etl_test.rb +1 -2
  65. data/tracks/ruby/exercises/flatten-array/flatten_array_test.rb +0 -1
  66. data/tracks/ruby/exercises/food-chain/food_chain_test.rb +0 -1
  67. data/tracks/ruby/exercises/gigasecond/.meta/generator/gigasecond_cases.rb +1 -1
  68. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +1 -2
  69. data/tracks/ruby/exercises/grade-school/grade_school_test.rb +0 -1
  70. data/tracks/ruby/exercises/grains/.meta/generator/grains_cases.rb +1 -1
  71. data/tracks/ruby/exercises/grains/grains_test.rb +1 -2
  72. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_cases.rb +1 -1
  73. data/tracks/ruby/exercises/hamming/hamming_test.rb +1 -2
  74. data/tracks/ruby/exercises/hello-world/.meta/generator/hello_world_cases.rb +1 -1
  75. data/tracks/ruby/exercises/hello-world/.meta/generator/test_template.erb +1 -1
  76. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  77. data/tracks/ruby/exercises/hexadecimal/hexadecimal_test.rb +0 -1
  78. data/tracks/ruby/exercises/house/house_test.rb +0 -1
  79. data/tracks/ruby/exercises/isogram/.meta/generator/isogram_cases.rb +1 -1
  80. data/tracks/ruby/exercises/isogram/isogram_test.rb +1 -2
  81. data/tracks/ruby/exercises/kindergarten-garden/kindergarten_garden_test.rb +0 -1
  82. data/tracks/ruby/exercises/largest-series-product/.meta/generator/largest_series_product_cases.rb +1 -1
  83. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +1 -2
  84. data/tracks/ruby/exercises/leap/.meta/generator/leap_cases.rb +1 -1
  85. data/tracks/ruby/exercises/leap/.meta/generator/test_template.erb +1 -2
  86. data/tracks/ruby/exercises/leap/leap_test.rb +1 -2
  87. data/tracks/ruby/exercises/linked-list/linked_list_test.rb +0 -1
  88. data/tracks/ruby/exercises/list-ops/list_ops_test.rb +0 -1
  89. data/tracks/ruby/exercises/luhn/.meta/generator/luhn_cases.rb +1 -1
  90. data/tracks/ruby/exercises/luhn/luhn_test.rb +1 -2
  91. data/tracks/ruby/exercises/matrix/matrix_test.rb +0 -1
  92. data/tracks/ruby/exercises/meetup/meetup_test.rb +0 -1
  93. data/tracks/ruby/exercises/minesweeper/minesweeper_test.rb +0 -1
  94. data/tracks/ruby/exercises/nth-prime/.meta/generator/nth_prime_cases.rb +1 -1
  95. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +1 -2
  96. data/tracks/ruby/exercises/nucleotide-count/nucleotide_count_test.rb +0 -1
  97. data/tracks/ruby/exercises/ocr-numbers/.meta/generator/ocr_numbers_cases.rb +1 -1
  98. data/tracks/ruby/exercises/ocr-numbers/ocr_numbers_test.rb +1 -2
  99. data/tracks/ruby/exercises/octal/octal_test.rb +0 -1
  100. data/tracks/ruby/exercises/palindrome-products/palindrome_products_test.rb +0 -1
  101. data/tracks/ruby/exercises/pangram/.meta/generator/pangram_cases.rb +1 -1
  102. data/tracks/ruby/exercises/pangram/pangram_test.rb +1 -2
  103. data/tracks/ruby/exercises/pascals-triangle/pascals_triangle_test.rb +0 -1
  104. data/tracks/ruby/exercises/perfect-numbers/perfect_numbers_test.rb +0 -1
  105. data/tracks/ruby/exercises/phone-number/.meta/.version +1 -0
  106. data/tracks/ruby/exercises/phone-number/.meta/generator/phone_number_cases.rb +7 -0
  107. data/tracks/ruby/exercises/phone-number/example.rb +21 -37
  108. data/tracks/ruby/exercises/phone-number/phone_number_test.rb +47 -43
  109. data/tracks/ruby/exercises/pig-latin/.meta/generator/pig_latin_cases.rb +1 -1
  110. data/tracks/ruby/exercises/pig-latin/pig_latin_test.rb +1 -2
  111. data/tracks/ruby/exercises/point-mutations/point_mutations_test.rb +0 -1
  112. data/tracks/ruby/exercises/poker/poker_test.rb +0 -1
  113. data/tracks/ruby/exercises/prime-factors/prime_factors_test.rb +0 -1
  114. data/tracks/ruby/exercises/protein-translation/protein_translation_test.rb +0 -1
  115. data/tracks/ruby/exercises/proverb/proverb_test.rb +0 -1
  116. data/tracks/ruby/exercises/pythagorean-triplet/pythagorean_triplet_test.rb +0 -1
  117. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_cases.rb +1 -1
  118. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +1 -2
  119. data/tracks/ruby/exercises/rail-fence-cipher/rail_fence_cipher_test.rb +0 -1
  120. data/tracks/ruby/exercises/raindrops/.meta/generator/raindrops_cases.rb +1 -1
  121. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +1 -2
  122. data/tracks/ruby/exercises/rna-transcription/.meta/generator/rna_transcription_cases.rb +1 -1
  123. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +1 -2
  124. data/tracks/ruby/exercises/robot-name/robot_name_test.rb +0 -1
  125. data/tracks/ruby/exercises/robot-simulator/robot_simulator_test.rb +0 -1
  126. data/tracks/ruby/exercises/roman-numerals/.meta/generator/roman_numerals_cases.rb +1 -1
  127. data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +1 -2
  128. data/tracks/ruby/exercises/run-length-encoding/.meta/generator/run_length_encoding_cases.rb +5 -1
  129. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +14 -15
  130. data/tracks/ruby/exercises/saddle-points/saddle_points_test.rb +0 -1
  131. data/tracks/ruby/exercises/say/.meta/generator/say_cases.rb +1 -1
  132. data/tracks/ruby/exercises/say/say_test.rb +1 -2
  133. data/tracks/ruby/exercises/scale-generator/scale_generator_test.rb +0 -1
  134. data/tracks/ruby/exercises/scrabble-score/scrabble_score_test.rb +0 -1
  135. data/tracks/ruby/exercises/secret-handshake/secret_handshake_test.rb +0 -1
  136. data/tracks/ruby/exercises/series/series_test.rb +0 -1
  137. data/tracks/ruby/exercises/sieve/.meta/generator/sieve_cases.rb +1 -1
  138. data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -2
  139. data/tracks/ruby/exercises/simple-cipher/simple_cipher_test.rb +0 -1
  140. data/tracks/ruby/exercises/space-age/space_age_test.rb +0 -1
  141. data/tracks/ruby/exercises/strain/strain_test.rb +0 -1
  142. data/tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb +0 -1
  143. data/tracks/ruby/exercises/tournament/.meta/.version +1 -1
  144. data/tracks/ruby/exercises/tournament/.meta/generator/tournament_cases.rb +1 -1
  145. data/tracks/ruby/exercises/tournament/example.rb +4 -2
  146. data/tracks/ruby/exercises/tournament/tournament_test.rb +20 -3
  147. data/tracks/ruby/exercises/transpose/.meta/generator/transpose_cases.rb +1 -1
  148. data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
  149. data/tracks/ruby/exercises/triangle/.meta/generator/triangle_cases.rb +1 -1
  150. data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -2
  151. data/tracks/ruby/exercises/trinary/trinary_test.rb +0 -1
  152. data/tracks/ruby/exercises/twelve-days/twelve_days_test.rb +0 -1
  153. data/tracks/ruby/exercises/two-bucket/.meta/.version +1 -1
  154. data/tracks/ruby/exercises/two-bucket/.meta/generator/two_bucket_cases.rb +1 -1
  155. data/tracks/ruby/exercises/two-bucket/example.rb +1 -1
  156. data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +18 -3
  157. data/tracks/ruby/exercises/word-count/.meta/generator/word_count_cases.rb +1 -1
  158. data/tracks/ruby/exercises/word-count/word_count_test.rb +1 -2
  159. data/tracks/ruby/exercises/wordy/.meta/generator/wordy_cases.rb +1 -1
  160. data/tracks/ruby/exercises/wordy/wordy_test.rb +1 -2
  161. data/tracks/ruby/lib/generator/{exercise_cases.rb → exercise_case.rb} +0 -0
  162. data/tracks/ruby/lib/generator/exercise_case/assertion.rb +2 -1
  163. data/tracks/ruby/lib/generator/files/track_files.rb +15 -10
  164. data/tracks/ruby/lib/generator/template_values.rb +4 -2
  165. data/tracks/ruby/lib/generator/test_template.erb +1 -2
  166. data/tracks/ruby/lib/tasks/exercise.rb +9 -1
  167. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/test_template.erb +0 -1
  168. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/{example.rb → .meta/solutions/alpha.rb} +0 -0
  169. data/tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/beta_cases.rb +1 -1
  170. data/tracks/ruby/test/fixtures/xruby/exercises/beta/example.tt +0 -1
  171. data/tracks/ruby/test/fixtures/xruby/lib/generator/test_template.erb +0 -1
  172. data/tracks/ruby/test/generator/exercise_case/assertion_test.rb +6 -0
  173. data/tracks/ruby/test/generator/{exercise_cases_test.rb → exercise_case_test.rb} +0 -0
  174. data/tracks/ruby/test/generator/files/track_files_test.rb +14 -18
  175. data/tracks/ruby/test/generator/template_values_test.rb +2 -0
  176. data/tracks/ruby/test/tasks/exercise_test.rb +6 -0
  177. data/tracks/ruby/test/tasks/exercise_tests_runner_legacy_test.rb +64 -0
  178. data/tracks/ruby/test/tasks/exercise_tests_runner_test.rb +2 -2
  179. metadata +13 -6
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class TransposeCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'transpose'
5
4
 
6
- # Common test data version: 6dba022
5
+ # Common test data version: 1.0.0 6dba022
7
6
  class TransposeTest < Minitest::Test
8
7
  def test_empty_string
9
8
  # skip
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class TriangleCase < Generator::ExerciseCase
4
4
  def name
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'triangle'
5
4
 
6
- # Common test data version: fa90b35
5
+ # Common test data version: 1.0.0 fa90b35
7
6
  class TriangleTest < Minitest::Test
8
7
  def test_triangle_is_equilateral_if_all_sides_are_equal
9
8
  # skip
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'trinary'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'twelve_days'
5
4
 
@@ -1 +1 @@
1
- 2
1
+ 3
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class TwoBucketCase < Generator::ExerciseCase
4
4
  def name
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION = 2
2
+ VERSION = 3
3
3
  end
4
4
 
5
5
  class TwoBucket
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'two_bucket'
5
4
 
6
- # Common test data version: 7aa0b42
5
+ # Common test data version: 1.1.0 531486a
7
6
  class TwoBucketTest < Minitest::Test
8
7
  def test_bucket_one_size_3_bucket_two_size_5_goal_1_start_with_bucket_one
9
8
  # skip
@@ -37,6 +36,22 @@ class TwoBucketTest < Minitest::Test
37
36
  assert_equal 7, two_bucket.other_bucket
38
37
  end
39
38
 
39
+ def test_bucket_one_size_1_bucket_two_size_3_goal_3_start_with_bucket_two
40
+ skip
41
+ two_bucket = TwoBucket.new(1, 3, 3, 'two')
42
+ assert_equal 1, two_bucket.moves
43
+ assert_equal 'two', two_bucket.goal_bucket
44
+ assert_equal 0, two_bucket.other_bucket
45
+ end
46
+
47
+ def test_bucket_one_size_2_bucket_two_size_3_goal_3_start_with_bucket_one
48
+ skip
49
+ two_bucket = TwoBucket.new(2, 3, 3, 'one')
50
+ assert_equal 4, two_bucket.moves
51
+ assert_equal 'two', two_bucket.goal_bucket
52
+ assert_equal 1, two_bucket.other_bucket
53
+ end
54
+
40
55
  # Problems in exercism evolve over time, as we find better ways to ask
41
56
  # questions.
42
57
  # The version number refers to the version of the problem you solved,
@@ -56,6 +71,6 @@ class TwoBucketTest < Minitest::Test
56
71
 
57
72
  def test_bookkeeping
58
73
  skip
59
- assert_equal 2, BookKeeping::VERSION
74
+ assert_equal 3, BookKeeping::VERSION
60
75
  end
61
76
  end
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class WordCountCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'word_count'
5
4
 
6
- # Common test data version: cd26d49
5
+ # Common test data version: 1.0.0 cd26d49
7
6
  class WordCountTest < Minitest::Test
8
7
  def test_count_one_word
9
8
  # skip
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class WordyCase < Generator::ExerciseCase
4
4
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'wordy'
5
4
 
6
- # Common test data version: 5b8ad58
5
+ # Common test data version: 1.0.0 5b8ad58
7
6
  class WordyTest < Minitest::Test
8
7
  def test_addition
9
8
  # skip
@@ -10,7 +10,8 @@ module Generator
10
10
  # e.g.,
11
11
  # assert_equal { "PigLatin.translate(#{input.inspect})" }
12
12
  def assert_equal
13
- "assert_equal #{expected.inspect}, #{yield}"
13
+ assertion = expected.nil? ? 'assert_nil' : "assert_equal #{expected.inspect},"
14
+ "#{assertion} #{yield}"
14
15
  end
15
16
 
16
17
  # e.g.,
@@ -10,7 +10,7 @@ module Generator
10
10
  end
11
11
 
12
12
  def example_solution
13
- ExampleSolutionFile.new(filename: File.join(exercise_path, 'example.rb'))
13
+ ExampleSolutionFile.new(filename: File.join(exercise_path, example_file))
14
14
  end
15
15
 
16
16
  def minitest_tests
@@ -32,11 +32,8 @@ module Generator
32
32
  end
33
33
 
34
34
  def tests_template_absolute_filename
35
- case
36
- when File.exist?(track_tests_template_filename) then track_tests_template_filename
37
- when File.exist?(legacy_tests_template_filename) then legacy_tests_template_filename
38
- else default_tests_template_filename
39
- end
35
+ File.exist?(track_tests_template_filename) ? track_tests_template_filename :
36
+ default_tests_template_filename
40
37
  end
41
38
 
42
39
  def track_tests_template_filename
@@ -47,14 +44,22 @@ module Generator
47
44
  File.join(paths.track, 'lib', 'generator', tests_template_filename)
48
45
  end
49
46
 
50
- def legacy_tests_template_filename
51
- File.join(exercise_path, 'example.tt')
52
- end
53
-
54
47
  def tests_template_filename
55
48
  'test_template.erb'
56
49
  end
57
50
 
51
+ def example_file
52
+ File.exist?(File.join(exercise_path, example_filename)) ? example_filename : legacy_example_filename
53
+ end
54
+
55
+ def example_filename
56
+ File.join('.meta', 'solutions', "#{exercise_name}.rb")
57
+ end
58
+
59
+ def legacy_example_filename
60
+ 'example.rb'
61
+ end
62
+
58
63
  def minitest_tests_filename
59
64
  "#{exercise_name.gsub(/[ -]/, '_')}_test.rb"
60
65
  end
@@ -1,13 +1,14 @@
1
1
  module Generator
2
2
  # Contains methods accessible to the ERB template
3
3
  class TemplateValues
4
- attr_reader :abbreviated_commit_hash, :version, :exercise_name, :test_cases
4
+ attr_reader :abbreviated_commit_hash, :version, :exercise_name, :test_cases, :canonical_data_version
5
5
 
6
- def initialize(abbreviated_commit_hash:, version:, exercise_name:, test_cases:)
6
+ def initialize(abbreviated_commit_hash:, version:, exercise_name:, test_cases:, canonical_data_version: nil)
7
7
  @abbreviated_commit_hash = abbreviated_commit_hash
8
8
  @version = version
9
9
  @exercise_name = exercise_name ? exercise_name.tr('-_', '_') : ''
10
10
  @test_cases = test_cases
11
+ @canonical_data_version = canonical_data_version
11
12
  end
12
13
 
13
14
  def get_binding
@@ -23,6 +24,7 @@ module Generator
23
24
  def template_values
24
25
  TemplateValues.new(
25
26
  abbreviated_commit_hash: canonical_data.abbreviated_commit_hash,
27
+ canonical_data_version: canonical_data.version,
26
28
  version: version,
27
29
  exercise_name: exercise_name,
28
30
  test_cases: extract
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative '<%= exercise_name %>'
5
4
 
6
- # Common test data version: <%= abbreviated_commit_hash %>
5
+ # Common test data version: <%= canonical_data_version %> <%= abbreviated_commit_hash %>
7
6
  class <%= exercise_name_camel %>Test < Minitest::Test
8
7
  <% test_cases.each do |test_case| %>
9
8
  def <%= test_case.name %>
@@ -23,7 +23,7 @@ class Exercise
23
23
  end
24
24
 
25
25
  def example_file
26
- 'example.rb'
26
+ File.exist?(example_filename) ? example_filename : legacy_example_filename
27
27
  end
28
28
 
29
29
  def testable_example_file
@@ -36,6 +36,14 @@ class Exercise
36
36
 
37
37
  private
38
38
 
39
+ def example_filename
40
+ File.join('.meta', 'solutions', "#{name}.rb")
41
+ end
42
+
43
+ def legacy_example_filename
44
+ 'example.rb'
45
+ end
46
+
39
47
  def base_file_name
40
48
  @_base_file_name ||= name.tr('-', '_')
41
49
  end
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative '<%= exercise_name %>'
5
4
 
@@ -1,4 +1,4 @@
1
- require 'generator/exercise_cases'
1
+ require 'generator/exercise_case'
2
2
 
3
3
  class BetaCase < Generator::ExerciseCase
4
4
  def workload
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative '<%= exercise_name %>'
5
4
 
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- gem 'minitest', '>= 5.0.0'
3
2
  require 'minitest/autorun'
4
3
  require_relative 'acronym'
5
4
 
@@ -21,6 +21,12 @@ module Generator
21
21
  assert_equal "assert_equal 2, 4", test_case.assert_equal { 1 + 3 }
22
22
  end
23
23
 
24
+ def test_assert_equal_when_nil
25
+ test_case = OpenStruct.new(expected: nil)
26
+ test_case.extend(Assertion)
27
+ assert_equal "assert_nil 4", test_case.assert_equal { 1 + 3 }
28
+ end
29
+
24
30
  def test_raises_error
25
31
  test_case = OpenStruct.new(expected: -1)
26
32
  test_case.extend(Assertion)
@@ -13,7 +13,7 @@ module Generator
13
13
  @paths = FixturePaths
14
14
  @exercise_name = 'alpha'
15
15
  end
16
- attr_reader :paths, :exercise_name
16
+ attr_accessor :paths, :exercise_name
17
17
  include TrackFiles
18
18
  end
19
19
 
@@ -24,7 +24,15 @@ module Generator
24
24
 
25
25
  def test_example_solution
26
26
  subject = TestTrackFiles.new
27
- assert_instance_of ExampleSolutionFile, subject.example_solution
27
+ expected_filename = FixturePaths.track + '/exercises/alpha/.meta/solutions/alpha.rb'
28
+ assert_equal expected_filename, subject.example_solution.filename
29
+ end
30
+
31
+ def test_legacy_example_solution
32
+ subject = TestTrackFiles.new
33
+ subject.exercise_name = 'beta'
34
+ expected_filename = FixturePaths.track + '/exercises/beta/example.rb'
35
+ assert_equal expected_filename, subject.example_solution.filename
28
36
  end
29
37
 
30
38
  def test_minitest_tests
@@ -38,6 +46,7 @@ module Generator
38
46
  assert_equal expected_filename, subject.tests_template.filename
39
47
  end
40
48
 
49
+
41
50
  class TestTrackFilesUseDefault
42
51
  def initialize
43
52
  @paths = FixturePaths
@@ -52,21 +61,6 @@ module Generator
52
61
  expected_filename = FixturePaths.track + '/lib/generator/test_template.erb'
53
62
  assert_equal expected_filename, subject.tests_template.filename
54
63
  end
55
-
56
- class TestTrackFilesUseLegacy
57
- def initialize
58
- @paths = FixturePaths
59
- @exercise_name = 'beta'
60
- end
61
- attr_reader :paths, :exercise_name
62
- include TrackFiles
63
- end
64
-
65
- def test_legacy_tests_template
66
- subject = TestTrackFilesUseLegacy.new
67
- expected_filename = FixturePaths.track + '/exercises/beta/example.tt'
68
- assert_equal expected_filename, subject.tests_template.filename
69
- end
70
64
  end
71
65
 
72
66
  class TestsVersionFileTest < Minitest::Test
@@ -90,7 +84,9 @@ module Generator
90
84
  end
91
85
 
92
86
  def test_update_version
93
- subject = TestExampleSolutionFile.new(filename: 'test/fixtures/xruby/exercises/alpha/example.rb')
87
+ subject = TestExampleSolutionFile.new(
88
+ filename: 'test/fixtures/xruby/exercises/alpha/.meta/solutions/alpha.rb'
89
+ )
94
90
  assert_match(/VERSION = 2/, subject.update_version(2))
95
91
  end
96
92
  end
@@ -57,6 +57,7 @@ module Generator
57
57
  def canonical_data
58
58
  mock_canonical_data = Minitest::Mock.new
59
59
  mock_canonical_data.expect :abbreviated_commit_hash, nil
60
+ mock_canonical_data.expect :version, '1.2.3'
60
61
  mock_canonical_data.expect :to_s, '{"cases":[]}'
61
62
  mock_canonical_data
62
63
  end
@@ -82,6 +83,7 @@ module Generator
82
83
  def canonical_data
83
84
  mock_canonical_data = Minitest::Mock.new
84
85
  mock_canonical_data.expect :abbreviated_commit_hash, nil
86
+ mock_canonical_data.expect :version, '1.2.3'
85
87
  mock_canonical_data.expect :to_s, '{"cases":[]}'
86
88
  mock_canonical_data
87
89
  end
@@ -31,6 +31,12 @@ class ExerciseTest < Minitest::Test
31
31
  end
32
32
 
33
33
  def test_example_file
34
+ File.stub(:exist?, true) do
35
+ assert_equal '.meta/solutions/name.rb', Exercise.new('name').example_file
36
+ end
37
+ end
38
+
39
+ def test_legacy_example_file
34
40
  assert_equal 'example.rb', Exercise.new('').example_file
35
41
  end
36
42
 
@@ -0,0 +1,64 @@
1
+ require_relative '../test_helper'
2
+
3
+ class FakeLegacyExercise
4
+ def name
5
+ 'test'
6
+ end
7
+
8
+ alias :to_s :name
9
+
10
+ def directory
11
+ 'test/.'
12
+ end
13
+
14
+ def example_file
15
+ 'example.rb'
16
+ end
17
+
18
+ def testable_example_file
19
+ 'test.rb'
20
+ end
21
+
22
+ def test_file
23
+ 'test_test.rb'
24
+ end
25
+ end
26
+
27
+ class ExerciseTestsRunnerLegacyTest < Minitest::Test
28
+ def test_run
29
+ Dir.stub :mktmpdir, nil, 'dir' do
30
+ cp_mock = Minitest::Mock.new.expect(:call, nil, ['test/.', 'dir'])
31
+
32
+ mv_mock = Minitest::Mock.new.expect(
33
+ :call,
34
+ nil,
35
+ ['dir/example.rb', 'dir/test.rb'],
36
+ )
37
+
38
+ ruby_mock = Minitest::Mock.new.expect(
39
+ :call,
40
+ nil,
41
+ ['-I lib -r disable_skip.rb dir/test_test.rb -p'],
42
+ )
43
+
44
+ FileUtils.stub :cp_r, cp_mock do
45
+ FileUtils.stub :mv, mv_mock do
46
+ runner = ExerciseTestsRunner.new(
47
+ exercise: FakeLegacyExercise.new,
48
+ test_options: '-p',
49
+ )
50
+
51
+ runner.stub :ruby, ruby_mock do
52
+ assert_output "\n\n#{'-'*64}\nrunning tests for: test\n" do
53
+ runner.run
54
+ end
55
+ end
56
+
57
+ cp_mock.verify
58
+ mv_mock.verify
59
+ ruby_mock.verify
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end