trackler 2.0.6.1 → 2.0.6.2

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/go/exercises/word-count/cases_test.go +23 -4
  4. data/tracks/go/exercises/word-count/example.go +6 -2
  5. data/tracks/go/exercises/word-count/word_count.go +1 -1
  6. data/tracks/go/exercises/word-count/word_count_test.go +1 -1
  7. data/tracks/pony/.travis.yml +16 -4
  8. data/tracks/pony/bin/install-deps +12 -0
  9. data/tracks/pony/bin/test-exercises +22 -0
  10. data/tracks/ruby/Gemfile +1 -0
  11. data/tracks/ruby/Rakefile +1 -1
  12. data/tracks/ruby/bin/generate +4 -29
  13. data/tracks/ruby/exercises/all-your-base/.meta/.version +1 -0
  14. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +50 -60
  15. data/tracks/ruby/exercises/all-your-base/example.rb +13 -8
  16. data/tracks/ruby/exercises/all-your-base/example.tt +17 -0
  17. data/tracks/ruby/lib/all_your_base_cases.rb +109 -0
  18. data/tracks/ruby/lib/generator.rb +21 -100
  19. data/tracks/ruby/lib/generator/command_line.rb +119 -0
  20. data/tracks/ruby/lib/generator/files.rb +58 -0
  21. data/tracks/ruby/lib/generator/files/metadata_files.rb +22 -0
  22. data/tracks/ruby/lib/generator/files/track_files.rb +83 -0
  23. data/tracks/ruby/lib/generator/git_command.rb +8 -0
  24. data/tracks/ruby/lib/generator/repository.rb +62 -0
  25. data/tracks/ruby/lib/generator/template_values.rb +47 -0
  26. data/tracks/ruby/lib/helper.rb +5 -2
  27. data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +8 -9
  28. data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/.meta/.version +0 -0
  29. data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/example.rb +0 -0
  30. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/example.tt +20 -0
  31. data/tracks/ruby/test/fixtures/xruby/lib/alpha_cases.rb +20 -0
  32. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +0 -0
  33. data/tracks/ruby/test/generator/command_line_test.rb +83 -0
  34. data/tracks/ruby/test/generator/files/metadata_files_test.rb +25 -0
  35. data/tracks/ruby/test/generator/files/track_files_test.rb +117 -0
  36. data/tracks/ruby/test/generator/files_test.rb +63 -0
  37. data/tracks/ruby/test/generator/git_command_test.rb +9 -0
  38. data/tracks/ruby/test/generator/repository_test.rb +98 -0
  39. data/tracks/ruby/test/generator/template_values_test.rb +59 -0
  40. data/tracks/ruby/test/generator_test.rb +19 -63
  41. data/tracks/ruby/test/test_helper.rb +8 -5
  42. metadata +26 -6
  43. data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +0 -1
  44. data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +0 -1
@@ -0,0 +1,63 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Generator
4
+ module Files
5
+ class ReadableTest < Minitest::Test
6
+ def test_abbreviated_commit_hash
7
+ mock_git_command = Minitest::Mock.new.expect :call, nil, ['path/.git', 'subdir/file']
8
+ subject = Readable.new(filename: 'path/subdir/file', repository_root: 'path')
9
+ GitCommand.stub(:abbreviated_commit_hash, mock_git_command) do
10
+ subject.abbreviated_commit_hash
11
+ end
12
+ mock_git_command.verify
13
+ end
14
+ end
15
+
16
+ class WritableTest < Minitest::Test
17
+ class TestWritableDoesntCallWrite < Writable
18
+ private
19
+
20
+ def write(_content)
21
+ fail StandardError, 'write should not be called'
22
+ end
23
+ end
24
+
25
+ def test_save_if_unchanged
26
+ content = ''
27
+ subject = TestWritableDoesntCallWrite.new(filename: '/dev/null')
28
+ assert_equal(content, subject.save(content))
29
+ end
30
+
31
+ def test_save_if_changed
32
+ mock_writer = Minitest::Mock.new
33
+ content = 'new content'
34
+ mock_writer.expect :write, content.size, [content]
35
+ subject = Writable.new(filename: '/dev/null')
36
+ File.stub :open, nil, mock_writer do
37
+ assert_equal(content, subject.save(content))
38
+ end
39
+ mock_writer.verify
40
+ end
41
+ end
42
+
43
+ class ExerciseTest < Minitest::Test
44
+ class TestNotImplementedTrackFiles
45
+ include Exercise
46
+ end
47
+
48
+ def test_paths_not_implemented
49
+ subject = TestNotImplementedTrackFiles.new
50
+ assert_raises NotImplementedError do
51
+ subject.paths
52
+ end
53
+ end
54
+
55
+ def test_exercise_name_not_implemented
56
+ subject = TestNotImplementedTrackFiles.new
57
+ assert_raises NotImplementedError do
58
+ subject.exercise_name
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Generator
4
+ class GitCommandTest < Minitest::Test
5
+ def test_abbreviated_commit_hash
6
+ assert_match(/^[0-9a-f]{7,}$/, GitCommand.abbreviated_commit_hash('./.git', 'test/generator_test.rb'))
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,98 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Generator
4
+ class RepositoryTest < Minitest::Test
5
+ FixturePaths = Paths.new(
6
+ metadata: 'test/fixtures/metadata',
7
+ track: 'test/fixtures/xruby'
8
+ )
9
+
10
+ def test_version
11
+ subject = Repository.new(paths: FixturePaths, exercise_name: 'alpha')
12
+ assert_equal 1, subject.version
13
+ end
14
+
15
+ def test_exercise_name
16
+ subject = Repository.new(paths: FixturePaths, exercise_name: 'alpha')
17
+ assert_equal 'alpha', subject.exercise_name
18
+ end
19
+
20
+ def test_update_tests_version
21
+ mock_tests_version = Minitest::Mock.new.expect :increment, 2
22
+ subject = Repository.new(paths: FixturePaths, exercise_name: 'alpha')
23
+ subject.define_singleton_method(:tests_version) { mock_tests_version }
24
+ assert_equal 2, subject.update_tests_version
25
+ mock_tests_version.verify
26
+ end
27
+
28
+ def test_update_example_solution
29
+ mock_example_solution = Minitest::Mock.new.expect :update_version, nil, [1]
30
+ subject = Repository.new(paths: FixturePaths, exercise_name: 'alpha')
31
+ subject.define_singleton_method(:example_solution) { mock_example_solution }
32
+ subject.update_example_solution
33
+ mock_example_solution.verify
34
+ end
35
+
36
+ def test_create_tests_file
37
+ mock_tests_template = Minitest::Mock.new.expect :to_s, 'template'
38
+ mock_template_values = Minitest::Mock.new
39
+ mock_minitest_tests = Minitest::Mock.new.expect :generate, nil, [{ template: 'template', values: mock_template_values }]
40
+ subject = Repository.new(paths: FixturePaths, exercise_name: 'alpha')
41
+ subject.define_singleton_method(:minitest_tests) { mock_minitest_tests }
42
+ subject.define_singleton_method(:tests_template) { mock_tests_template }
43
+ subject.define_singleton_method(:template_values) { mock_template_values }
44
+ subject.create_tests_file
45
+ mock_minitest_tests.verify
46
+ end
47
+ end
48
+
49
+ class LoggingRepositoryTest < Minitest::Test
50
+ FixturePaths = Paths.new(
51
+ metadata: 'test/fixtures/metadata',
52
+ track: 'test/fixtures/xruby'
53
+ )
54
+
55
+ def test_update_tests_version
56
+ fake_version = 2
57
+
58
+ mock_logger = Minitest::Mock.new
59
+ mock_logger.expect :info, nil, ["Incremented tests version to #{fake_version}"]
60
+
61
+ mock_tests_version = Minitest::Mock.new.expect :increment, fake_version
62
+ subject = LoggingRepository.new(paths: FixturePaths, exercise_name: 'alpha', logger: mock_logger)
63
+ subject.define_singleton_method(:tests_version) { mock_tests_version }
64
+ subject.define_singleton_method(:version) { fake_version }
65
+ subject.update_tests_version
66
+ mock_logger.verify
67
+ end
68
+
69
+ def test_update_example_solution
70
+ fake_version = 2
71
+ mock_logger = Minitest::Mock.new
72
+ mock_logger.expect :info, nil, ["Updated version in example solution to #{fake_version}"]
73
+
74
+ mock_example_solution = Minitest::Mock.new.expect :update_version, nil, [2]
75
+ subject = LoggingRepository.new(paths: FixturePaths, exercise_name: 'alpha', logger: mock_logger)
76
+ subject.define_singleton_method(:example_solution) { mock_example_solution }
77
+ subject.define_singleton_method(:version) { fake_version }
78
+
79
+ subject.update_example_solution
80
+ mock_logger.verify
81
+ end
82
+
83
+ # Too much to set up here :(
84
+ def test_create_tests_file
85
+ mock_logger = Minitest::Mock.new.expect :info, nil, ['Generated tests for alpha']
86
+
87
+ mock_tests_template = Minitest::Mock.new.expect :to_s, 'template'
88
+ mock_template_values = Minitest::Mock.new
89
+ mock_minitest_tests = Minitest::Mock.new.expect :generate, nil, [{ template: 'template', values: mock_template_values }]
90
+ subject = LoggingRepository.new(paths: FixturePaths, exercise_name: 'alpha', logger: mock_logger)
91
+ subject.define_singleton_method(:minitest_tests) { mock_minitest_tests }
92
+ subject.define_singleton_method(:tests_template) { mock_tests_template }
93
+ subject.define_singleton_method(:template_values) { mock_template_values }
94
+ subject.create_tests_file
95
+ mock_logger.verify
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,59 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Generator
4
+ class TestCasesValuesTest < Minitest::Test
5
+ def test_sha1
6
+ expected_sha1 = '1234567'
7
+ subject = TemplateValues.new(sha1: expected_sha1, version: nil, test_cases: nil)
8
+ assert_equal expected_sha1, subject.sha1
9
+ end
10
+
11
+ def test_version
12
+ expected_version = '1234567'
13
+ subject = TemplateValues.new(version: expected_version, sha1: nil, test_cases: nil)
14
+ assert_equal expected_version, subject.version
15
+ end
16
+
17
+ def test_test_cases
18
+ expected_test_cases = 'should be TemplateValues class'
19
+ subject = TemplateValues.new(test_cases: expected_test_cases, sha1: nil, version: nil)
20
+ assert_equal expected_test_cases, subject.test_cases
21
+ end
22
+
23
+ def test_get_binding
24
+ subject = TemplateValues.new(sha1: nil,version: nil, test_cases: nil)
25
+ assert_instance_of Binding, subject.get_binding
26
+ end
27
+ end
28
+
29
+ class TemplateValuesFactoryTest < Minitest::Test
30
+ class TestTemplateValuesFactory
31
+ def exercise_name
32
+ 'alpha'
33
+ end
34
+
35
+ def version
36
+ 2
37
+ end
38
+
39
+ def canonical_data
40
+ mock_canonical_data = Minitest::Mock.new
41
+ mock_canonical_data.expect :abbreviated_commit_hash, nil
42
+ mock_canonical_data.expect :to_s, '{"cases":[]}'
43
+ mock_canonical_data
44
+ end
45
+
46
+ include TemplateValuesFactory
47
+ end
48
+
49
+ def test_template_values
50
+ $LOAD_PATH.unshift 'test/fixtures/xruby/lib'
51
+ subject = TestTemplateValuesFactory.new
52
+ assert_instance_of TemplateValues, subject.template_values
53
+ end
54
+
55
+ def teardown
56
+ $LOAD_PATH.delete 'test/fixtures/xruby/lib'
57
+ end
58
+ end
59
+ end
@@ -1,74 +1,30 @@
1
1
  require_relative 'test_helper'
2
2
 
3
- class GeneratorTest < Minitest::Test
4
- def test_default_metadata_path
5
- subject = Generator.new('aname', nil)
6
- # This is relative to the xruby root
7
- assert_equal '../x-common/exercises/aname', subject.metadata_dir
8
- end
9
-
10
- def test_initalize_with_fixture_path
11
- fixture_path = 'xruby/test/fixtures'
12
- subject = Generator.new('aname', nil, fixture_path)
13
- assert_equal 'xruby/test/fixtures/exercises/aname', subject.metadata_dir
14
- end
15
-
16
- def test_exercise_dir
17
- subject = Generator.new('aname', nil)
18
- # This is relative to the xruby root
19
- assert_equal './exercises/aname', subject.exercise_dir
20
- end
21
-
22
- def test_sha1
23
- expected = '1234567'
24
- GitCommand.stub :short_sha, expected do
25
- subject = Generator.new(nil, nil)
26
- assert_equal expected, subject.sha1
3
+ module Generator
4
+ class UpdateVersionAndGenerateTestsTest < Minitest::Test
5
+ def test_call
6
+ mock_repository = Minitest::Mock.new
7
+ mock_repository.expect :update_tests_version, nil
8
+ mock_repository.expect :update_example_solution, nil
9
+ mock_repository.expect :create_tests_file, nil
10
+
11
+ subject = UpdateVersionAndGenerateTests.new(mock_repository)
12
+ subject.call
13
+
14
+ mock_repository.verify
27
15
  end
28
16
  end
29
17
 
30
- def test_version
31
- metadata_repository_path = 'test/fixtures'
32
- exercises_path = 'test/fixtures'
33
- subject = Generator.new('alpha', nil, metadata_repository_path, exercises_path)
34
- expected = 1
35
- assert_equal expected, subject.version
36
- end
37
-
38
- def test_test_cases
39
- metadata_repository_path = 'test/fixtures/metadata'
40
- exercises_path = 'test/fixtures'
41
- canonical_data = File.read('test/fixtures/metadata/exercises/alpha/canonical-data.json')
42
- test_cases = Minitest::Mock.new
43
- test_cases.expect :call, true, [canonical_data]
44
- subject = Generator.new('alpha', test_cases, metadata_repository_path, exercises_path)
45
- subject.test_cases
46
- test_cases.verify
47
- end
18
+ class UpdateVersionAndGenerateTestsFrozenVersionTest < Minitest::Test
19
+ def test_call
20
+ mock_repository = Minitest::Mock.new
21
+ mock_repository.expect :create_tests_file, nil
48
22
 
49
- def test_generate
50
- metadata_repository_path = 'test/fixtures'
51
- exercises_path = 'test/fixtures'
52
- subject = Generator.new('alpha', nil, metadata_repository_path, exercises_path)
53
- assert subject.generate
54
- # TODO: test side effects
55
- end
23
+ subject = GenerateTests.new(mock_repository)
24
+ subject.call
56
25
 
57
- def test_generate_with_missing_metadata_repository
58
- metadata_repository_path = 'test/fixtures/nonexistant'
59
- exercises_path = 'test/fixtures'
60
- subject = Generator.new('alpha', nil, metadata_repository_path, exercises_path)
61
- assert_output '', /'x-common' repository not found/ do
62
- assert_raises Errno::ENOENT do
63
- subject.generate
64
- end
26
+ mock_repository.verify
65
27
  end
66
- # TODO: test lack of side effects
67
28
  end
68
- end
69
29
 
70
- class GitCommandTest < Minitest::Test
71
- def test_short_sha
72
- assert_match(/^[0-9a-f]{7,}$/, GitCommand.short_sha('.'))
73
- end
74
30
  end
@@ -1,19 +1,22 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
2
 
3
+ require 'require_all'
4
+
3
5
  unless ENV['CI']
4
6
  require 'simplecov'
5
-
6
7
  SimpleCov.start do
7
8
  add_filter '/test/'
8
- add_group 'Utilities' do |file|
9
- !(file.filename =~ /_cases\.rb$/)
9
+ add_group 'Generator' do |file|
10
+ file.filename =~ /generator/
10
11
  end
11
12
  add_group 'Cases', '_cases.rb'
13
+ add_group 'Other' do |file|
14
+ !(file.filename =~ /_cases\.rb$/) && file.filename !~ /generator/
15
+ end
12
16
  end
13
17
  end
14
18
 
15
19
  require 'minitest/autorun'
16
- require 'minitest/pride'
17
20
 
18
21
  # So we can be sure we have coverage on the whole lib directory:
19
- Dir.glob('lib/*.rb').each { |file| require file.gsub(%r{(^lib\/|\.rb$)}, '') }
22
+ require_all 'lib'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6.1
4
+ version: 2.0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-03 00:00:00.000000000 Z
11
+ date: 2017-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -5477,6 +5477,8 @@ files:
5477
5477
  - tracks/pony/README.md
5478
5478
  - tracks/pony/SETUP.md
5479
5479
  - tracks/pony/bin/fetch-configlet
5480
+ - tracks/pony/bin/install-deps
5481
+ - tracks/pony/bin/test-exercises
5480
5482
  - tracks/pony/config.json
5481
5483
  - tracks/pony/docs/ABOUT.md
5482
5484
  - tracks/pony/docs/INSTALLATION.md
@@ -5932,8 +5934,10 @@ files:
5932
5934
  - tracks/ruby/exercises/acronym/acronym_test.rb
5933
5935
  - tracks/ruby/exercises/acronym/example.rb
5934
5936
  - tracks/ruby/exercises/acronym/example.tt
5937
+ - tracks/ruby/exercises/all-your-base/.meta/.version
5935
5938
  - tracks/ruby/exercises/all-your-base/all_your_base_test.rb
5936
5939
  - tracks/ruby/exercises/all-your-base/example.rb
5940
+ - tracks/ruby/exercises/all-your-base/example.tt
5937
5941
  - tracks/ruby/exercises/allergies/allergies_test.rb
5938
5942
  - tracks/ruby/exercises/allergies/example.rb
5939
5943
  - tracks/ruby/exercises/alphametics/.meta/.version
@@ -6168,6 +6172,7 @@ files:
6168
6172
  - tracks/ruby/exercises/wordy/wordy_test.rb
6169
6173
  - tracks/ruby/img/icon.png
6170
6174
  - tracks/ruby/lib/acronym_cases.rb
6175
+ - tracks/ruby/lib/all_your_base_cases.rb
6171
6176
  - tracks/ruby/lib/alphametics_cases.rb
6172
6177
  - tracks/ruby/lib/anagram_cases.rb
6173
6178
  - tracks/ruby/lib/binary_cases.rb
@@ -6181,6 +6186,13 @@ files:
6181
6186
  - tracks/ruby/lib/disable_skip.rb
6182
6187
  - tracks/ruby/lib/dominoes_cases.rb
6183
6188
  - tracks/ruby/lib/generator.rb
6189
+ - tracks/ruby/lib/generator/command_line.rb
6190
+ - tracks/ruby/lib/generator/files.rb
6191
+ - tracks/ruby/lib/generator/files/metadata_files.rb
6192
+ - tracks/ruby/lib/generator/files/track_files.rb
6193
+ - tracks/ruby/lib/generator/git_command.rb
6194
+ - tracks/ruby/lib/generator/repository.rb
6195
+ - tracks/ruby/lib/generator/template_values.rb
6184
6196
  - tracks/ruby/lib/gigasecond_cases.rb
6185
6197
  - tracks/ruby/lib/grains_cases.rb
6186
6198
  - tracks/ruby/lib/hamming_cases.rb
@@ -6203,11 +6215,19 @@ files:
6203
6215
  - tracks/ruby/lib/two_bucket_cases.rb
6204
6216
  - tracks/ruby/lib/word_count_cases.rb
6205
6217
  - tracks/ruby/lib/wordy_cases.rb
6206
- - tracks/ruby/test/fixtures/exercises/alpha/.meta/.version
6207
- - tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb
6208
- - tracks/ruby/test/fixtures/exercises/alpha/example.rb
6209
- - tracks/ruby/test/fixtures/exercises/alpha/example.tt
6210
6218
  - tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json
6219
+ - tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/.version
6220
+ - tracks/ruby/test/fixtures/xruby/exercises/alpha/example.rb
6221
+ - tracks/ruby/test/fixtures/xruby/exercises/alpha/example.tt
6222
+ - tracks/ruby/test/fixtures/xruby/lib/alpha_cases.rb
6223
+ - tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb
6224
+ - tracks/ruby/test/generator/command_line_test.rb
6225
+ - tracks/ruby/test/generator/files/metadata_files_test.rb
6226
+ - tracks/ruby/test/generator/files/track_files_test.rb
6227
+ - tracks/ruby/test/generator/files_test.rb
6228
+ - tracks/ruby/test/generator/git_command_test.rb
6229
+ - tracks/ruby/test/generator/repository_test.rb
6230
+ - tracks/ruby/test/generator/template_values_test.rb
6211
6231
  - tracks/ruby/test/generator_test.rb
6212
6232
  - tracks/ruby/test/grains_cases_test.rb
6213
6233
  - tracks/ruby/test/test_helper.rb
@@ -1 +0,0 @@
1
- This is an example
@@ -1 +0,0 @@
1
- This is an example