oselvar-var-minitest 0.3.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.
- checksums.yaml +7 -0
- data/lib/oselvar/var/minitest.rb +81 -0
- metadata +74 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 483abcb713540c6e06ddb44fa204f76e4bb9c045c3852c2682ccaaa22888d4ac
|
|
4
|
+
data.tar.gz: fed806038d77a49855edf2f9b9253542d40fba505496012b59f312a09a6fe074
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8704386cf14dddc281a7c1fa8528f75c340189414cce480ffa36240971ad54266b1e0f0d51448ae858b7dbdf23dc3f9284f086fb5b3e8056c1597014e631b809
|
|
7
|
+
data.tar.gz: cb0dd65bad769b889ea6471fd6bea47ec0e56da9c05bbeec571def66963c2871980d0269a724cee869e74be4019526b7b084e3f01119bbe383129645a3e9b674
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'minitest'
|
|
4
|
+
require 'oselvar/var/runner'
|
|
5
|
+
|
|
6
|
+
module Oselvar
|
|
7
|
+
module Var
|
|
8
|
+
# Minitest adapter. One call turns every spec matched by var.config.json into
|
|
9
|
+
# a generated Minitest::Test subclass — one class per spec file, one test
|
|
10
|
+
# method per example. Mirrors var-unittest.
|
|
11
|
+
#
|
|
12
|
+
# # test/var_test.rb
|
|
13
|
+
# require "oselvar/var/minitest"
|
|
14
|
+
# Oselvar::Var::Minitest.generate_tests
|
|
15
|
+
module Minitest
|
|
16
|
+
VERSION = '0.3.2'
|
|
17
|
+
|
|
18
|
+
module_function
|
|
19
|
+
|
|
20
|
+
def generate_tests(namespace = Object, root: nil)
|
|
21
|
+
root ||= File.dirname(caller_locations(1, 1).first.path)
|
|
22
|
+
root = File.expand_path(root)
|
|
23
|
+
cfg = Config.read_var_config(root)
|
|
24
|
+
loaded = Runner.load_steps(cfg.steps, root)
|
|
25
|
+
store = Runner.create_file_baseline_store(root)
|
|
26
|
+
update = %w[1 true].include?(ENV.fetch('VAR_UPDATE', nil))
|
|
27
|
+
|
|
28
|
+
Runner.find_specs(cfg.docs_include, cfg.docs_exclude, root).each do |spec_path|
|
|
29
|
+
klass = build_test_case(spec_path, root, loaded, store, update)
|
|
30
|
+
namespace.const_set("Var_#{identifier(Runner.rel_posix(spec_path, root))}", klass)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def build_test_case(spec_path, root, loaded, store, update)
|
|
35
|
+
rel = Runner.rel_posix(spec_path, root)
|
|
36
|
+
source = File.read(spec_path, encoding: 'UTF-8')
|
|
37
|
+
plan = Runner.plan_spec(File.basename(spec_path), source, loaded.registry)
|
|
38
|
+
pairs = Runner.examples_with_runs(plan, loaded.create_context, Runner::RecordingReporter.new)
|
|
39
|
+
|
|
40
|
+
klass = Class.new(::Minitest::Test)
|
|
41
|
+
seen = Hash.new(0)
|
|
42
|
+
pairs.each do |example, run|
|
|
43
|
+
base = example.scope_stack.last || example.name
|
|
44
|
+
stem = identifier(base)
|
|
45
|
+
idx = seen[stem]
|
|
46
|
+
seen[stem] += 1
|
|
47
|
+
method_name = idx.zero? ? "test_#{stem}" : "test_#{stem}_#{idx}"
|
|
48
|
+
klass.define_method(method_name) do
|
|
49
|
+
run.call
|
|
50
|
+
rescue StandardError => e
|
|
51
|
+
raise ::Minitest::Assertion, Runner.render_failure(e, source, rel) if Minitest.var_diff_error?(e)
|
|
52
|
+
|
|
53
|
+
raise
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Core::Drifts.reconcile_drift(store, rel, source, plan.var_doc, plan, update: update).each do |drift|
|
|
58
|
+
message = Core::Diagnostics.drift_detected(drift.name, drift.span).message
|
|
59
|
+
klass.define_method("test_var_drift_#{drift.line}") { raise ::Minitest::Assertion, message }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
klass
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# A markdown/return mismatch is a test failure (Minitest::Assertion); any
|
|
66
|
+
# other exception propagates as an error.
|
|
67
|
+
def var_diff_error?(error)
|
|
68
|
+
error.is_a?(Core::CellMismatchError) || error.is_a?(Core::DocStringMismatchError) ||
|
|
69
|
+
error.is_a?(Core::ReturnShapeError) || error.is_a?(Core::UnexpectedPassError)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Project arbitrary text onto a valid identifier fragment.
|
|
73
|
+
def identifier(text)
|
|
74
|
+
ident = text.gsub(/\W+/, '_').gsub(/\A_+|_+\z/, '')
|
|
75
|
+
ident = 'example' if ident.empty?
|
|
76
|
+
ident = "_#{ident}" if ident.match?(/\A\d/)
|
|
77
|
+
ident
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: oselvar-var-minitest
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Aslak Hellesøy
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-07-07 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: minitest
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '5.20'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '5.20'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: oselvar-var-runner
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.3.2
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.3.2
|
|
41
|
+
description: 'Minitest adapter: one selectable test per Markdown example, with a drift
|
|
42
|
+
gate.'
|
|
43
|
+
email:
|
|
44
|
+
- aslak@oselvar.com
|
|
45
|
+
executables: []
|
|
46
|
+
extensions: []
|
|
47
|
+
extra_rdoc_files: []
|
|
48
|
+
files:
|
|
49
|
+
- lib/oselvar/var/minitest.rb
|
|
50
|
+
homepage: https://var.oselvar.com
|
|
51
|
+
licenses:
|
|
52
|
+
- MIT
|
|
53
|
+
metadata:
|
|
54
|
+
rubygems_mfa_required: 'true'
|
|
55
|
+
post_install_message:
|
|
56
|
+
rdoc_options: []
|
|
57
|
+
require_paths:
|
|
58
|
+
- lib
|
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - ">="
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: '3.2'
|
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
requirements: []
|
|
70
|
+
rubygems_version: 3.4.10
|
|
71
|
+
signing_key:
|
|
72
|
+
specification_version: 4
|
|
73
|
+
summary: Markdown-native BDD — run Markdown specs as Minitest tests
|
|
74
|
+
test_files: []
|