trackler 2.0.6.1 → 2.0.6.2

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