From 27786496852887ca3b396a567e69d972fa916c4a Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 11:57:32 -0700 Subject: [PATCH 01/10] use correct version of test_template.erb --- test/fixtures/xruby/lib/generator/test_template.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/fixtures/xruby/lib/generator/test_template.erb b/test/fixtures/xruby/lib/generator/test_template.erb index 0e90df5d8b..1beb65b1f1 100644 --- a/test/fixtures/xruby/lib/generator/test_template.erb +++ b/test/fixtures/xruby/lib/generator/test_template.erb @@ -1,9 +1,9 @@ #!/usr/bin/env ruby require 'minitest/autorun' -require_relative 'acronym' +require_relative '<%= exercise_name %>' -# Common test data version: <%= abbreviated_commit_hash %> -class AcronymTest < Minitest::Test +# Common test data version: <%= canonical_data_version %> <%= abbreviated_commit_hash %> +class <%= exercise_name_camel %>Test < Minitest::Test <% test_cases.each_with_index do |test_case, idx| %> def <%= test_case.name %> <%= test_case.skipped(idx) %> From ac3b5580173e03c7c07d8b5c7f193d8bf4e20588 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 11:59:39 -0700 Subject: [PATCH 02/10] add camel_case method to underscore --- lib/generator/underscore.rb | 4 ++++ test/generator/underscore_test.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/generator/underscore.rb b/lib/generator/underscore.rb index 46d5a94559..dbffba8e20 100644 --- a/lib/generator/underscore.rb +++ b/lib/generator/underscore.rb @@ -4,6 +4,10 @@ module Underscore def underscore downcase.gsub(/[- ]/, '_').gsub(/[^\w?]/, '') end + + def camel_case + underscore.split('_').map(&:capitalize).join + end end end end diff --git a/test/generator/underscore_test.rb b/test/generator/underscore_test.rb index f5a753ea6e..b5862d6643 100644 --- a/test/generator/underscore_test.rb +++ b/test/generator/underscore_test.rb @@ -19,5 +19,9 @@ def test_question_mark 'unreadable_but_correctly_sized_inputs_return_?' ) end + + def test_camel_case + assert_equal 'ASlug', 'a-slug'.camel_case + end end end From 39e5daeae5dfae5289f867d527b43d67a02979a0 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 12:36:07 -0700 Subject: [PATCH 03/10] refactor GeneratorCases#available #available shouldn't depend on the existence of a '_case.rb' file, because that might go away or get changed. We can just look for the presence of a .meta/generator directory. --- lib/generator/files/generator_cases.rb | 13 +++++-------- test/generator/files/generate_cases_test.rb | 8 ++++---- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/generator/files/generator_cases.rb b/lib/generator/files/generator_cases.rb index b60d737a2a..960bb62e1c 100644 --- a/lib/generator/files/generator_cases.rb +++ b/lib/generator/files/generator_cases.rb @@ -3,7 +3,9 @@ module Files module GeneratorCases class << self def available(track_path) - cases_filepaths(track_path).map { |filepath| slugify(filepath) }.sort + filepaths(track_path).map do |filepath| + %r{#{track_path}/exercises/([-a-z]+)/}.match(filepath)[1] + end.sort end def class_name(exercise_name_or_slug) @@ -18,13 +20,8 @@ def source_filepath(track_path, slug) private - def cases_filepaths(track_path) - generator_glob = File.join(meta_generator_path(track_path, '*'), '*_case.rb') - Dir.glob(generator_glob, File::FNM_DOTMATCH) - end - - def slugify(filepath) - File.basename(filepath, '_case.rb').tr('_', '-') + def filepaths(track_path) + Dir.glob(meta_generator_path(track_path, '*')) end def filename(exercise_name_or_slug) diff --git a/test/generator/files/generate_cases_test.rb b/test/generator/files/generate_cases_test.rb index ae5882673c..f70f469aa0 100644 --- a/test/generator/files/generate_cases_test.rb +++ b/test/generator/files/generate_cases_test.rb @@ -5,17 +5,17 @@ module Files class GeneratorCasesTest < Minitest::Test def test_available track_path = '/track' - fake_filenames = %w(/track/zzz/alpha_case.rb /track/aaa/hy_phen_ated_case.rb) - Dir.stub :glob, fake_filenames do + fake_filepaths = %w(/track/exercises/alpha/zzz /track/exercises/hy-phen-ated/yyy) + Dir.stub :glob, fake_filepaths do assert_equal %w(alpha hy-phen-ated), GeneratorCases.available(track_path) end end def test_available_calls_glob_with_the_right_arguments track_path = '/track' - expected_glob = "#{track_path}/exercises/*/.meta/generator/*_case.rb" + expected_glob = "#{track_path}/exercises/*/.meta/generator" mock_glob_call = Minitest::Mock.new - mock_glob_call.expect :call, [], [expected_glob, File::FNM_DOTMATCH] + mock_glob_call.expect :call, [], [expected_glob] Dir.stub :glob, mock_glob_call do GeneratorCases.available(track_path) end From 3d33f3cbfe17a440c15ee0df6e74493e166802ed Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 12:48:30 -0700 Subject: [PATCH 04/10] don't test core ruby functionality --- test/generator/implementation_test.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/generator/implementation_test.rb b/test/generator/implementation_test.rb index 828db9615d..02bafb7910 100644 --- a/test/generator/implementation_test.rb +++ b/test/generator/implementation_test.rb @@ -12,11 +12,6 @@ def test_version assert_equal 1, subject.version end - def test_slug - subject = Implementation.new(paths: FixturePaths, slug: 'alpha') - assert_equal 'alpha', subject.slug - end - def test_update_tests_version mock_file = Minitest::Mock.new.expect :write, '2'.length, [2] subject = Implementation.new(paths: FixturePaths, slug: 'alpha') From 96c47ea845a98314763f59bbbd8f1fb20f67c32a Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:11:05 -0700 Subject: [PATCH 05/10] introduce Exercise model --- lib/generator/command_line.rb | 10 +++++--- lib/generator/exercise.rb | 19 ++++++++++++++ lib/generator/files/generator_cases.rb | 4 --- lib/generator/files/metadata_files.rb | 2 +- lib/generator/files/track_files.rb | 6 ++--- lib/generator/implementation.rb | 12 +++------ lib/generator/template_values.rb | 14 ++++------- test/generator/exercise_test.rb | 20 +++++++++++++++ test/generator/files/generate_cases_test.rb | 4 --- test/generator/files/metadata_files_test.rb | 4 +-- test/generator/files/track_files_test.rb | 9 +++---- test/generator/implementation_test.rb | 17 ++++++------- test/generator/template_values_test.rb | 28 +++------------------ 13 files changed, 76 insertions(+), 73 deletions(-) create mode 100644 lib/generator/exercise.rb create mode 100644 test/generator/exercise_test.rb diff --git a/lib/generator/command_line.rb b/lib/generator/command_line.rb index aff48ba98b..91bd9cac7d 100644 --- a/lib/generator/command_line.rb +++ b/lib/generator/command_line.rb @@ -16,7 +16,7 @@ def parse(args) attr_reader :paths def generators - implementations.map { |slug| generator(implementation(slug)) } + implementations.map { |slug| generator(implementation(exercise(slug))) } end def implementations @@ -35,9 +35,13 @@ def freeze? @options[:freeze] || @options[:all] end - def implementation(slug) + def exercise(slug) + Exercise.new(slug: slug) + end + + def implementation(exercise) LoggingImplementation.new( - implementation: Implementation.new(paths: paths, slug: slug), + implementation: Implementation.new(paths: paths, exercise: exercise), logger: logger ) end diff --git a/lib/generator/exercise.rb b/lib/generator/exercise.rb new file mode 100644 index 0000000000..e858a12d1e --- /dev/null +++ b/lib/generator/exercise.rb @@ -0,0 +1,19 @@ +module Generator + class Exercise + using Generator::Underscore + + attr_reader :slug + + def initialize(slug:) + @slug = slug + end + + def name + @name ||= slug.underscore + end + + def case_class + slug.camel_case + 'Case' + end + end +end diff --git a/lib/generator/files/generator_cases.rb b/lib/generator/files/generator_cases.rb index 960bb62e1c..50b09ff360 100644 --- a/lib/generator/files/generator_cases.rb +++ b/lib/generator/files/generator_cases.rb @@ -8,10 +8,6 @@ def available(track_path) end.sort end - def class_name(exercise_name_or_slug) - filename(exercise_name_or_slug).split('_').map(&:capitalize).join - end - def source_filepath(track_path, slug) path = meta_generator_path(track_path, slug) filename = filename(slug) + '.rb' diff --git a/lib/generator/files/metadata_files.rb b/lib/generator/files/metadata_files.rb index 995b27a415..75e9db7f84 100644 --- a/lib/generator/files/metadata_files.rb +++ b/lib/generator/files/metadata_files.rb @@ -10,7 +10,7 @@ def canonical_data private def exercise_metadata_path - File.join(paths.metadata, 'exercises', slug) + File.join(paths.metadata, 'exercises', exercise.slug) end end diff --git a/lib/generator/files/track_files.rb b/lib/generator/files/track_files.rb index e7871b8cc4..9642ecceb2 100644 --- a/lib/generator/files/track_files.rb +++ b/lib/generator/files/track_files.rb @@ -22,7 +22,7 @@ def tests_template private def exercise_path - File.join(paths.track, 'exercises', slug) + File.join(paths.track, 'exercises', exercise.slug) end def meta_path @@ -34,7 +34,7 @@ def solutions_path end def minitest_tests_filename - "#{exercise_name}_test.rb" + "#{exercise.name}_test.rb" end def version_filename @@ -42,7 +42,7 @@ def version_filename end def example_filename - "#{exercise_name}.rb" + "#{exercise.name}.rb" end def tests_template_absolute_filename diff --git a/lib/generator/implementation.rb b/lib/generator/implementation.rb index e94e62c80f..6dd070030b 100644 --- a/lib/generator/implementation.rb +++ b/lib/generator/implementation.rb @@ -6,12 +6,12 @@ class Implementation include Files::MetadataFiles include TemplateValuesFactory - def initialize(paths:, slug:) + def initialize(paths:, exercise:) @paths = paths - @slug = slug + @exercise = exercise end - attr_reader :paths, :slug + attr_reader :paths, :exercise def version tests_version.to_i @@ -31,10 +31,6 @@ def create_tests_file values: template_values ) end - - def exercise_name - @exercise_name ||= slug.tr('-', '_') - end end # This exists to give us a clue as to what we are delegating to. @@ -60,7 +56,7 @@ def update_example_solution def create_tests_file @implementation.create_tests_file - @logger.info "Generated #{slug} tests version #{version}" + @logger.info "Generated #{exercise.slug} tests version #{version}" end end end diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 74b298219a..b56e1bca9d 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -26,30 +26,26 @@ def template_values abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, canonical_data_version: canonical_data.version, version: version, - exercise_name: slug_underscore, + exercise_name: exercise.name, test_cases: extract ) end private - def slug_underscore - slug ? slug.tr('-_', '_') : '' - end - def extract load cases_load_name extractor.cases(canonical_data.to_s) end def extractor - CaseValues::Extractor.new( - case_class: Object.const_get(Files::GeneratorCases.class_name(slug)) - ) + CaseValues::Extractor.new( + case_class: Object.const_get(exercise.case_class) + ) end def cases_load_name - Files::GeneratorCases.source_filepath(paths.track, slug) + Files::GeneratorCases.source_filepath(paths.track, exercise.slug) end end end diff --git a/test/generator/exercise_test.rb b/test/generator/exercise_test.rb new file mode 100644 index 0000000000..37ad555991 --- /dev/null +++ b/test/generator/exercise_test.rb @@ -0,0 +1,20 @@ +require_relative '../test_helper' + +module Generator + class ExerciseTest < Minitest::Test + def test_slug + exercise = Exercise.new(slug: 'alpha') + assert_equal 'alpha', exercise.slug + end + + def test_name + exercise = Exercise.new(slug: 'alpha-beta') + assert_equal 'alpha_beta', exercise.name + end + + def test_case_class + exercise = Exercise.new(slug: 'alpha-beta') + assert_equal 'AlphaBetaCase', exercise.case_class + end + end +end diff --git a/test/generator/files/generate_cases_test.rb b/test/generator/files/generate_cases_test.rb index f70f469aa0..c41920f5d7 100644 --- a/test/generator/files/generate_cases_test.rb +++ b/test/generator/files/generate_cases_test.rb @@ -22,10 +22,6 @@ def test_available_calls_glob_with_the_right_arguments mock_glob_call.verify end - def test_class_name - assert_equal 'TwoParterCase', GeneratorCases.class_name('two-parter') - end - def test_source_filepath track_path = '/track' slug = 'slug' diff --git a/test/generator/files/metadata_files_test.rb b/test/generator/files/metadata_files_test.rb index 82e3682f8c..3c3e205fa8 100644 --- a/test/generator/files/metadata_files_test.rb +++ b/test/generator/files/metadata_files_test.rb @@ -10,9 +10,9 @@ class MetadataFilesTest < Minitest::Test class TestMetadataFiles def initialize @paths = FixturePaths - @slug = 'alpha' + @exercise = Exercise.new(slug: 'alpha') end - attr_reader :paths, :slug + attr_reader :paths, :exercise include MetadataFiles end diff --git a/test/generator/files/track_files_test.rb b/test/generator/files/track_files_test.rb index 53c97e1de7..6854b77cec 100644 --- a/test/generator/files/track_files_test.rb +++ b/test/generator/files/track_files_test.rb @@ -11,10 +11,9 @@ class TrackFilesTest < Minitest::Test class TestTrackFiles def initialize @paths = FixturePaths - @slug = 'alpha-beta' - @exercise_name = 'alpha_beta' + @exercise = Exercise.new(slug: 'alpha-beta') end - attr_accessor :paths, :slug, :exercise_name + attr_reader :paths, :exercise include TrackFiles end @@ -44,9 +43,9 @@ def test_tests_template class TestTrackFilesUseDefault def initialize @paths = FixturePaths - @slug = 'notemplate' + @exercise = Exercise.new(slug: 'notemplate') end - attr_reader :paths, :slug + attr_reader :paths, :exercise include TrackFiles end diff --git a/test/generator/implementation_test.rb b/test/generator/implementation_test.rb index 02bafb7910..8f61284e32 100644 --- a/test/generator/implementation_test.rb +++ b/test/generator/implementation_test.rb @@ -8,13 +8,14 @@ class ImplementationTest < Minitest::Test ) def test_version - subject = Implementation.new(paths: FixturePaths, slug: 'alpha') + exercise = Minitest::Mock.new.expect :slug, 'alpha' + subject = Implementation.new(paths: FixturePaths, exercise: exercise) assert_equal 1, subject.version end def test_update_tests_version mock_file = Minitest::Mock.new.expect :write, '2'.length, [2] - subject = Implementation.new(paths: FixturePaths, slug: 'alpha') + subject = Implementation.new(paths: FixturePaths, exercise: Exercise.new(slug: 'alpha')) # Verify iniital condition from fixture file assert_equal 1, subject.tests_version.to_i File.stub(:open, true, mock_file) do @@ -26,7 +27,7 @@ def test_update_tests_version def test_update_example_solution expected_content = "# This is the example\n\nclass BookKeeping\n VERSION = 1\nend\n" mock_file = Minitest::Mock.new.expect :write, expected_content.length, [expected_content] - subject = Implementation.new(paths: FixturePaths, slug: 'alpha') + subject = Implementation.new(paths: FixturePaths, exercise: Exercise.new(slug: 'alpha')) File.stub(:open, true, mock_file) do assert_equal expected_content, subject.update_example_solution end @@ -79,7 +80,7 @@ def test_bookkeeping end TESTS_FILE mock_file = Minitest::Mock.new.expect :write, expected_content.length, [expected_content] - subject = Implementation.new(paths: FixturePaths, slug: 'alpha') + subject = Implementation.new(paths: FixturePaths, exercise: Exercise.new(slug: 'alpha')) GitCommand.stub(:abbreviated_commit_hash, '123456789') do File.stub(:open, true, mock_file) do assert_equal expected_content, subject.create_tests_file @@ -89,18 +90,14 @@ def test_bookkeeping # Don't pollute the namespace Object.send(:remove_const, :AlphaCase) end - - def test_exercise_name - subject = Implementation.new(paths: FixturePaths, slug: 'alpha-beta') - assert_equal 'alpha_beta', subject.exercise_name - end end class LoggingImplementationTest < Minitest::Test def test_create_tests_file + exercise = Exercise.new(slug: 'alpha') mock_implementation = Minitest::Mock.new mock_implementation.expect :create_tests_file, nil - mock_implementation.expect :slug, 'alpha' + mock_implementation.expect :exercise, exercise mock_implementation.expect :version, 2 mock_logger = Minitest::Mock.new mock_logger.expect :info, nil, ['Generated alpha tests version 2'] diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index ee179cc28b..1366ed17b4 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -46,8 +46,8 @@ def test_get_binding class TemplateValuesFactoryTest < Minitest::Test class TestTemplateValuesFactory - def slug - 'alpha' + def exercise + Exercise.new(slug: 'alpha') end def version @@ -71,30 +71,10 @@ def paths include TemplateValuesFactory end - class ClassBasedTestTemplateValuesFactory + class ClassBasedTestTemplateValuesFactory < TestTemplateValuesFactory def slug - 'beta' - end - - def version - 2 + Exercise.new(slug: 'beta') end - - def canonical_data - mock_canonical_data = Minitest::Mock.new - mock_canonical_data.expect :abbreviated_commit_hash, nil - mock_canonical_data.expect :version, '1.2.3' - mock_canonical_data.expect :to_s, '{"cases":[]}' - mock_canonical_data - end - - def paths - mock_paths = Minitest::Mock.new - mock_paths.expect :track, 'test/fixtures/xruby' - mock_paths - end - - include TemplateValuesFactory end def test_template_values_from_class From 8f870a6129444a6c956b6942502d019a98185f1a Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:11:37 -0700 Subject: [PATCH 06/10] remove redundant test leftover from the proc days --- test/generator/template_values_test.rb | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index 1366ed17b4..d2b289d9a4 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -71,17 +71,6 @@ def paths include TemplateValuesFactory end - class ClassBasedTestTemplateValuesFactory < TestTemplateValuesFactory - def slug - Exercise.new(slug: 'beta') - end - end - - def test_template_values_from_class - subject = ClassBasedTestTemplateValuesFactory.new - assert_instance_of TemplateValues, subject.template_values - end - def test_template_values_loads_problem_case_classes subject = TestTemplateValuesFactory.new assert_instance_of TemplateValues, subject.template_values From e2b41c27609d2e221a499cf6e8110416f9d76d3e Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:22:49 -0700 Subject: [PATCH 07/10] don't test core ruby functionality --- test/generator/template_values_test.rb | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index d2b289d9a4..34ce025f30 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -8,36 +8,12 @@ def setup } end - def test_abbreviated_commit_hash - expected_abbreviated_commit_hash = '1234567' - subject = TemplateValues.new(@arguments.merge(abbreviated_commit_hash: expected_abbreviated_commit_hash)) - assert_equal expected_abbreviated_commit_hash, subject.abbreviated_commit_hash - end - - def test_version - expected_version = '1234567' - subject = TemplateValues.new(@arguments.merge(version: expected_version)) - assert_equal expected_version, subject.version - end - - def test_exercise_name - expected_exercise_name = 'alpha_beta' - subject = TemplateValues.new(@arguments.merge(exercise_name: expected_exercise_name)) - assert_equal expected_exercise_name, subject.exercise_name - end - def test_exercise_name_camel expected_exercise_name_camel = 'AlphaBeta' subject = TemplateValues.new(@arguments.merge(exercise_name: 'alpha_beta')) assert_equal expected_exercise_name_camel, subject.exercise_name_camel end - def test_test_cases - expected_test_cases = 'should be TemplateValues class' - subject = TemplateValues.new(@arguments.merge(test_cases: expected_test_cases)) - assert_equal expected_test_cases, subject.test_cases - end - def test_get_binding subject = TemplateValues.new(@arguments) assert_instance_of Binding, subject.get_binding From 892acf27f3d9676fc41ac39c39f408d29e0480ba Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:30:19 -0700 Subject: [PATCH 08/10] pass exercise to TemplateValues --- lib/generator/template_values.rb | 16 +++++++++++----- test/generator/template_values_test.rb | 10 ++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index b56e1bca9d..1970e79109 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -1,12 +1,14 @@ module Generator # Contains methods accessible to the ERB template class TemplateValues - attr_reader :abbreviated_commit_hash, :version, :exercise_name, :test_cases, :canonical_data_version + using Underscore - def initialize(abbreviated_commit_hash:, version:, exercise_name:, test_cases:, canonical_data_version: nil) + attr_reader :abbreviated_commit_hash, :version, :exercise, :test_cases, :canonical_data_version + + def initialize(abbreviated_commit_hash:, version:, exercise:, test_cases:, canonical_data_version: nil) @abbreviated_commit_hash = abbreviated_commit_hash @version = version - @exercise_name = exercise_name + @exercise = exercise @test_cases = test_cases @canonical_data_version = canonical_data_version end @@ -15,8 +17,12 @@ def get_binding binding end + def exercise_name + exercise.name + end + def exercise_name_camel - exercise_name.split('_').map(&:capitalize).join + exercise.name.camel_case end end @@ -26,7 +32,7 @@ def template_values abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, canonical_data_version: canonical_data.version, version: version, - exercise_name: exercise.name, + exercise: exercise, test_cases: extract ) end diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index 34ce025f30..9d6191f32e 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -4,13 +4,19 @@ module Generator class TestTemplateValuesTest < Minitest::Test def setup @arguments = { - abbreviated_commit_hash: nil, version: nil, exercise_name: nil, test_cases: nil + abbreviated_commit_hash: nil, version: nil, exercise: nil, test_cases: nil } end + def test_exercise_name + expected_exercise_name = 'alpha_beta' + subject = TemplateValues.new(@arguments.merge(exercise: Exercise.new(slug: 'alpha-beta'))) + assert_equal expected_exercise_name, subject.exercise_name + end + def test_exercise_name_camel expected_exercise_name_camel = 'AlphaBeta' - subject = TemplateValues.new(@arguments.merge(exercise_name: 'alpha_beta')) + subject = TemplateValues.new(@arguments.merge(exercise: Exercise.new(slug: 'alpha_beta'))) assert_equal expected_exercise_name_camel, subject.exercise_name_camel end From d0e420526745270a6b7f5aa51a8454bd7ea7a037 Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:43:48 -0700 Subject: [PATCH 09/10] pass canonical_data to TemplateValues --- lib/generator/template_values.rb | 22 ++++++++++++++-------- test/generator/template_values_test.rb | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/generator/template_values.rb b/lib/generator/template_values.rb index 1970e79109..4397da24b0 100644 --- a/lib/generator/template_values.rb +++ b/lib/generator/template_values.rb @@ -3,20 +3,27 @@ module Generator class TemplateValues using Underscore - attr_reader :abbreviated_commit_hash, :version, :exercise, :test_cases, :canonical_data_version + attr_reader :exercise, :version, :canonical_data, :test_cases - def initialize(abbreviated_commit_hash:, version:, exercise:, test_cases:, canonical_data_version: nil) - @abbreviated_commit_hash = abbreviated_commit_hash - @version = version + def initialize(exercise:, version:, canonical_data:, test_cases:) @exercise = exercise + @version = version + @canonical_data = canonical_data @test_cases = test_cases - @canonical_data_version = canonical_data_version end def get_binding binding end + def abbreviated_commit_hash + canonical_data.abbreviated_commit_hash + end + + def canonical_data_version + canonical_data.version + end + def exercise_name exercise.name end @@ -29,10 +36,9 @@ def exercise_name_camel module TemplateValuesFactory def template_values TemplateValues.new( - abbreviated_commit_hash: canonical_data.abbreviated_commit_hash, - canonical_data_version: canonical_data.version, - version: version, exercise: exercise, + version: version, + canonical_data: canonical_data, test_cases: extract ) end diff --git a/test/generator/template_values_test.rb b/test/generator/template_values_test.rb index 9d6191f32e..b98d7a5992 100644 --- a/test/generator/template_values_test.rb +++ b/test/generator/template_values_test.rb @@ -4,10 +4,24 @@ module Generator class TestTemplateValuesTest < Minitest::Test def setup @arguments = { - abbreviated_commit_hash: nil, version: nil, exercise: nil, test_cases: nil + exercise: nil, version: nil, canonical_data: nil, test_cases: nil } end + def test_abbreviated_commit_hash + expected_abbreviated_commit_hash = '1234567' + mock_canonical_data = Minitest::Mock.new.expect :abbreviated_commit_hash, expected_abbreviated_commit_hash + subject = TemplateValues.new(@arguments.merge(canonical_data: mock_canonical_data)) + assert_equal expected_abbreviated_commit_hash, subject.abbreviated_commit_hash + end + + def test_canonical_data_version + expected_canonical_data_version = '0.1.0' + mock_canonical_data = Minitest::Mock.new.expect :version, expected_canonical_data_version + subject = TemplateValues.new(@arguments.merge(canonical_data: mock_canonical_data)) + assert_equal expected_canonical_data_version, subject.canonical_data_version + end + def test_exercise_name expected_exercise_name = 'alpha_beta' subject = TemplateValues.new(@arguments.merge(exercise: Exercise.new(slug: 'alpha-beta'))) From 9dfc1f850f472531de03caa5d9c58927ece81e1a Mon Sep 17 00:00:00 2001 From: Hilary Holz Date: Sun, 14 May 2017 13:58:25 -0700 Subject: [PATCH 10/10] rename create_tests_file to build_tests Two reasons. Main reason: Implementation shouldn't be thinking in terms of files. Secondary reason, old name was misleading, as it regenerates the file when it exists :( --- lib/generator.rb | 4 ++-- lib/generator/implementation.rb | 6 +++--- test/generator/implementation_test.rb | 10 +++++----- test/generator_test.rb | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/generator.rb b/lib/generator.rb index ada326d026..d14497448f 100644 --- a/lib/generator.rb +++ b/lib/generator.rb @@ -15,7 +15,7 @@ def initialize(track:, metadata:) # Doesn't update the version information. class GenerateTests < ImplementationDelegator def call - create_tests_file + build_tests end end @@ -24,7 +24,7 @@ class UpdateVersionAndGenerateTests < ImplementationDelegator def call update_tests_version update_example_solution - create_tests_file + build_tests end end end diff --git a/lib/generator/implementation.rb b/lib/generator/implementation.rb index 6dd070030b..b939d3703f 100644 --- a/lib/generator/implementation.rb +++ b/lib/generator/implementation.rb @@ -25,7 +25,7 @@ def update_example_solution example_solution.update_version(version) end - def create_tests_file + def build_tests minitest_tests.generate( template: tests_template.to_s, values: template_values @@ -54,8 +54,8 @@ def update_example_solution @logger.debug "Updated version in example solution to #{version}" end - def create_tests_file - @implementation.create_tests_file + def build_tests + @implementation.build_tests @logger.info "Generated #{exercise.slug} tests version #{version}" end end diff --git a/test/generator/implementation_test.rb b/test/generator/implementation_test.rb index 8f61284e32..c8a907ca9f 100644 --- a/test/generator/implementation_test.rb +++ b/test/generator/implementation_test.rb @@ -34,7 +34,7 @@ def test_update_example_solution mock_file.verify end - def test_create_tests_file + def test_build_tests # Q: Is the pain here caused by: # a) Implementation `including` everything rather than using composition? # b) Trying to verify the expected content. @@ -83,7 +83,7 @@ def test_bookkeeping subject = Implementation.new(paths: FixturePaths, exercise: Exercise.new(slug: 'alpha')) GitCommand.stub(:abbreviated_commit_hash, '123456789') do File.stub(:open, true, mock_file) do - assert_equal expected_content, subject.create_tests_file + assert_equal expected_content, subject.build_tests end end mock_file.verify @@ -93,17 +93,17 @@ def test_bookkeeping end class LoggingImplementationTest < Minitest::Test - def test_create_tests_file + def test_build_tests exercise = Exercise.new(slug: 'alpha') mock_implementation = Minitest::Mock.new - mock_implementation.expect :create_tests_file, nil + mock_implementation.expect :build_tests, nil mock_implementation.expect :exercise, exercise mock_implementation.expect :version, 2 mock_logger = Minitest::Mock.new mock_logger.expect :info, nil, ['Generated alpha tests version 2'] subject = LoggingImplementation.new(implementation: mock_implementation, logger: mock_logger) - subject.create_tests_file + subject.build_tests mock_implementation.verify end diff --git a/test/generator_test.rb b/test/generator_test.rb index 2959a4cb87..b376960afa 100644 --- a/test/generator_test.rb +++ b/test/generator_test.rb @@ -6,7 +6,7 @@ def test_call mock_exercise = Minitest::Mock.new mock_exercise.expect :update_tests_version, nil mock_exercise.expect :update_example_solution, nil - mock_exercise.expect :create_tests_file, nil + mock_exercise.expect :build_tests, nil subject = UpdateVersionAndGenerateTests.new(mock_exercise) subject.call @@ -18,7 +18,7 @@ def test_call class UpdateVersionAndGenerateTestsFrozenVersionTest < Minitest::Test def test_call mock_exercise = Minitest::Mock.new - mock_exercise.expect :create_tests_file, nil + mock_exercise.expect :build_tests, nil subject = GenerateTests.new(mock_exercise) subject.call