varar-minitest 0.7.0 → 0.8.0

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/varar/minitest.rb +39 -14
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86febd4dfd67b8c07b54bfa9520354306f3c2286cff31c16e5cf2584e2278bac
4
- data.tar.gz: 44544826879aec62fe942aa544725ea1524df11dfe7a49d60c86c3f287a655d8
3
+ metadata.gz: 3efbcbfd36df2c90f60ffa46998eee770edaaa0f8f4c3bd9d3e7945d0f1fe2cc
4
+ data.tar.gz: dea249b92407d04efd214b791ff168c9c1f59e47ba7e432b1b58b3b13be82f3d
5
5
  SHA512:
6
- metadata.gz: c87fda6a6126f22d6c806b7023aa3131c7104aad42336fdc04f865aef5d19911d8a45f9afa8b81639f2cb00cb6e250ea3f688c9f093de7d0552900ebdae350fb
7
- data.tar.gz: ff74a446beea0e1c70ad6ff6e003afa30c3808d6e9bc0e4954409ab5fba3454e8e6f447dcc9d8cf7c7b9110524f6b74d9d1ff1dee2df17ccad18b48790e880ba
6
+ metadata.gz: 2dbc0ea03c80f67829c11466ec6fc415eb73d219c91150546af6551e41be4884c053136e8cd87a9e9ef3e0ebd2d05b4156db8d544f0ff31e54149c605e748b77
7
+ data.tar.gz: 64f55291af751ba14c63336741fbff527d3e1c0e0275b6bc1d704e81afdc0036a5a1cadc7bdeacd614847def226f7445c90f01e404407eb169ee365c278495d9
@@ -4,36 +4,50 @@ require 'minitest'
4
4
  require 'varar/runner'
5
5
 
6
6
  module Varar
7
- # Minitest adapter. One call turns every spec matched by varar.config.json into
8
- # a generated Minitest::Test subclass — one class per spec file, one test
9
- # method per example. Mirrors var-unittest.
7
+ # Minitest adapter. One call turns every oath matched by varar.config.json into
8
+ # a generated Minitest::Test subclass — one class per oath file, one test
9
+ # method per example. Mirrors varar-unittest.
10
10
  #
11
- # # test/var_test.rb
11
+ # # test/varar_test.rb
12
12
  # require "varar/minitest"
13
13
  # Varar::Minitest.generate_tests
14
14
  module Minitest
15
- VERSION = '0.7.0'
15
+ VERSION = '0.8.0'
16
16
 
17
17
  module_function
18
18
 
19
19
  def generate_tests(namespace = Object, root: nil)
20
20
  root ||= File.dirname(caller_locations(1, 1).first.path)
21
21
  root = File.expand_path(root)
22
- cfg = Config.read_var_config(root)
22
+ cfg = Config.read_config(root)
23
23
  loaded = Runner.load_steps(cfg.steps, root)
24
24
  store = Runner.create_file_baseline_store(root)
25
25
  update = %w[1 true].include?(ENV.fetch('VARAR_UPDATE', nil))
26
26
 
27
- Runner.find_specs(cfg.docs_include, cfg.docs_exclude, root).each do |spec_path|
28
- klass = build_test_case(spec_path, root, loaded, store, update)
29
- namespace.const_set("Var_#{identifier(Runner.rel_posix(spec_path, root))}", klass)
27
+ oaths = Runner.find_oaths(cfg.docs_include, cfg.docs_exclude, root)
28
+ # Run results for the language server (ADR 0014). Minitest.after_run, not
29
+ # at_exit: at_exit handlers run last-registered-first, so ours would fire
30
+ # before Minitest's own — i.e. before a single test had run.
31
+ results = Runner::Results.new
32
+ ::Minitest.after_run { results.flush_all(root) }
33
+
34
+ # Drop baselines for oaths the config no longer discovers. Reconciliation is
35
+ # per-oath and never sees a path that has gone, so the lock would otherwise
36
+ # accumulate dead entries forever (#70). Once per run, keyed off the config
37
+ # globs — which here IS the full set, since generate_tests always discovers
38
+ # everything.
39
+ Core::Drifts.prune_baselines(store, oaths.map { |p| Runner.rel_posix(p, root) }, update: update)
40
+
41
+ oaths.each do |oath_path|
42
+ klass = build_test_case(oath_path, root, loaded, store, update, results)
43
+ namespace.const_set("Var_#{identifier(Runner.rel_posix(oath_path, root))}", klass)
30
44
  end
31
45
  end
32
46
 
33
- def build_test_case(spec_path, root, loaded, store, update)
34
- rel = Runner.rel_posix(spec_path, root)
35
- source = File.read(spec_path, encoding: 'UTF-8')
36
- plan = Runner.plan_spec(File.basename(spec_path), source, loaded.registry)
47
+ def build_test_case(oath_path, root, loaded, store, update, results)
48
+ rel = Runner.rel_posix(oath_path, root)
49
+ source = File.read(oath_path, encoding: 'UTF-8')
50
+ plan = Runner.plan_oath(File.basename(oath_path), source, loaded.registry)
37
51
  pairs = Runner.examples_with_runs(plan, loaded.create_context, Runner::RecordingReporter.new)
38
52
 
39
53
  klass = Class.new(::Minitest::Test)
@@ -44,16 +58,27 @@ module Varar
44
58
  idx = seen[stem]
45
59
  seen[stem] += 1
46
60
  method_name = idx.zero? ? "test_#{stem}" : "test_#{stem}_#{idx}"
61
+ lines = example.steps.map { |step| step.match_span.start_line }.uniq
47
62
  klass.define_method(method_name) do
48
63
  run.call
49
64
  rescue StandardError => e
65
+ # Recorded here, where the error object is still in hand: to_failure
66
+ # reads the anchor the executor attached to it.
67
+ results.record(rel, source, Core::ExampleResult.new(
68
+ name: example.name, status: 'failed', lines: lines,
69
+ failure: Core::Failures.to_failure(e, rel, lines.first || 0)
70
+ ))
50
71
  raise ::Minitest::Assertion, Runner.render_failure(e, source, rel) if Minitest.var_diff_error?(e)
51
72
 
52
73
  raise
74
+ else
75
+ results.record(rel, source, Core::ExampleResult.new(
76
+ name: example.name, status: 'passed', lines: lines, failure: nil
77
+ ))
53
78
  end
54
79
  end
55
80
 
56
- Core::Drifts.reconcile_drift(store, rel, source, plan.var_doc, plan, update: update).each do |drift|
81
+ Core::Drifts.reconcile_drift(store, rel, source, plan.doc, plan, update: update).each do |drift|
57
82
  message = Core::Diagnostics.drift_detected(drift.name, drift.span).message
58
83
  klass.define_method("test_var_drift_#{drift.line}") { raise ::Minitest::Assertion, message }
59
84
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: varar-minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - '='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.7.0
32
+ version: 0.8.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.7.0
39
+ version: 0.8.0
40
40
  description: 'Minitest adapter: one selectable test per Markdown example, with a drift
41
41
  gate.'
42
42
  email:
@@ -67,5 +67,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  requirements: []
68
68
  rubygems_version: 4.0.16
69
69
  specification_version: 4
70
- summary: Markdown-native BDD — run Markdown specs as Minitest tests
70
+ summary: Markdown-native BDD — run Markdown oaths as Minitest tests
71
71
  test_files: []