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.
- checksums.yaml +4 -4
- data/lib/varar/minitest.rb +39 -14
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3efbcbfd36df2c90f60ffa46998eee770edaaa0f8f4c3bd9d3e7945d0f1fe2cc
|
|
4
|
+
data.tar.gz: dea249b92407d04efd214b791ff168c9c1f59e47ba7e432b1b58b3b13be82f3d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2dbc0ea03c80f67829c11466ec6fc415eb73d219c91150546af6551e41be4884c053136e8cd87a9e9ef3e0ebd2d05b4156db8d544f0ff31e54149c605e748b77
|
|
7
|
+
data.tar.gz: 64f55291af751ba14c63336741fbff527d3e1c0e0275b6bc1d704e81afdc0036a5a1cadc7bdeacd614847def226f7445c90f01e404407eb169ee365c278495d9
|
data/lib/varar/minitest.rb
CHANGED
|
@@ -4,36 +4,50 @@ require 'minitest'
|
|
|
4
4
|
require 'varar/runner'
|
|
5
5
|
|
|
6
6
|
module Varar
|
|
7
|
-
# Minitest adapter. One call turns every
|
|
8
|
-
# a generated Minitest::Test subclass — one class per
|
|
9
|
-
# method per example. Mirrors
|
|
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/
|
|
11
|
+
# # test/varar_test.rb
|
|
12
12
|
# require "varar/minitest"
|
|
13
13
|
# Varar::Minitest.generate_tests
|
|
14
14
|
module Minitest
|
|
15
|
-
VERSION = '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.
|
|
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.
|
|
28
|
-
|
|
29
|
-
|
|
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(
|
|
34
|
-
rel = Runner.rel_posix(
|
|
35
|
-
source = File.read(
|
|
36
|
-
plan = Runner.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
70
|
+
summary: Markdown-native BDD — run Markdown oaths as Minitest tests
|
|
71
71
|
test_files: []
|