xmp2assert 11 → 12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45061563c460b60b3b9b9a9c9cdc08fdd00da562
4
- data.tar.gz: 0af4015708d764defe90793c4d3be3fb9e5384d0
3
+ metadata.gz: b2f9ee081b57585fdaa4fc1c04b600b67ed9fcd5
4
+ data.tar.gz: b32bbf297c76a0934b71281fb5e90f94608eb894
5
5
  SHA512:
6
- metadata.gz: 9c7e59307031b64e753d3252fb94dd733c820077aaf794320eec65e288bd1166bb52ef9d556d44fb039c150b080a26854e80f3a95df24e6c230ea2b0c3c4f820
7
- data.tar.gz: b519801bad8bd7f1193fe5957e9547e9c3d5ee1555d7a5bdd5644578fa8f6ce0f88fd02236c63b5571ef82dfd81afbad9071c947a294292c36dfcca5c91ffada
6
+ metadata.gz: b1cb6e90a0cd31ed34c49e85cf2c3c8cd0bd1c0311ba1b9d689f7ee0de19aa7a40feba7bb124025879f51fa53d64404f2037e96cafb80325197bda38e2325821
7
+ data.tar.gz: 4a47c5aedb2283c6a0acaf7832d3c8bbf525afeb613080ec24cbbbf4796f1dd87051526ce66c211d182218930ffef7e0cc4d579255631c9a55532e073af996f2
data/.rubocop.yml CHANGED
@@ -35,6 +35,10 @@ Lint/AmbiguousBlockAssociation:
35
35
  Lint/EmptyWhen:
36
36
  Enabled: false
37
37
 
38
+ Lint/HandleExceptions:
39
+ # I KNOW WHAT I DO. Please stop annoying me.
40
+ Enabled: false
41
+
38
42
  Metrics/ParameterLists:
39
43
  Enabled: false
40
44
 
@@ -36,8 +36,6 @@ require_relative 'spawn'
36
36
  # Helper module that implements assertions.
37
37
  module XMP2Assert::Assertions
38
38
  include Test::Unit::Assertions
39
- include XMP2Assert::XMP2Rexp
40
- include XMP2Assert::Renderer
41
39
 
42
40
  # Run a ruby script and assert for its comment. This is the main API.
43
41
  #
@@ -52,7 +50,7 @@ module XMP2Assert::Assertions
52
50
  def assert_xmp script, message = nil, stdin_data: '', **opts
53
51
  qscript = XMP2Assert::Quasifile.new script
54
52
  qf, qo, qe, qx = XMP2Assert::Converter.convert qscript
55
- render qf, qx do |f|
53
+ XMP2Assert::Renderer.render qf, qx do |f|
56
54
  XMP2Assert::Spawn.new f, **opts do |_, i, o, e, r, t|
57
55
  i.write stdin_data
58
56
  i.close
@@ -73,13 +71,14 @@ module XMP2Assert::Assertions
73
71
  end
74
72
  assert_xmp_raw qo, out.value, message unless qo.empty?
75
73
  assert_xmp_raw qe, err.value, message unless qe.empty?
74
+ stderr_pass_through qe, err
76
75
  end
77
76
  end
78
77
  end
79
78
 
80
79
  # :TODO: tbw
81
80
  def assert_xmp_raw xmp, actual, message = nil
82
- expected = xmp2rexp xmp
81
+ expected = XMP2Assert::XMP2Rexp.xmp2rexp xmp
83
82
 
84
83
  raise unless expected.match actual
85
84
  rescue
@@ -96,4 +95,13 @@ module XMP2Assert::Assertions
96
95
  else
97
96
  return self # or...?
98
97
  end
98
+
99
+ private
100
+
101
+ def stderr_pass_through qe, err
102
+ return unless $-w
103
+ return unless qe.empty?
104
+ return if err.value.empty?
105
+ STDERR.puts err.value
106
+ end
99
107
  end
@@ -30,12 +30,12 @@ require_relative 'namespace'
30
30
  require_relative 'quasifile'
31
31
 
32
32
  # Compiles a {XMP2Assert::Quasifile} into a separate ruby script.
33
- module XMP2Assert::Renderer
33
+ class XMP2Assert::Renderer
34
34
 
35
35
  # I learned this handy "super-private" maneuver from @a_matsuda
36
36
  # cf: https://github.com/rails/rails/pull/27363/files
37
37
  using Module.new {
38
- refine XMP2Assert::Renderer do
38
+ refine XMP2Assert::Renderer.singleton_class do
39
39
  private
40
40
 
41
41
  myself = Pathname.new __FILE__
@@ -59,7 +59,7 @@ module XMP2Assert::Renderer
59
59
  # @param exception [String] :TBD:
60
60
  # @return [File] rendered file, if no block is given.
61
61
  # @yieldparam [File] rendered file, if block is given.
62
- def render qfile, exception = nil
62
+ def self.render qfile, exception = nil
63
63
  s = erb qfile, exception
64
64
  if defined? yield
65
65
  Tempfile.create '' do |f|
@@ -50,11 +50,16 @@ class XMP2Assert::Spawn
50
50
  begin
51
51
  pid = Process.spawn(*argv, opts)
52
52
  theirs.each(&:close)
53
- stdin, stdout, stdrrr, rx, tx = * ours
53
+ stdin, stdout, stdrrr, rx, tx = *ours
54
54
  yield pid, stdin, stdout, stdrrr, rx, tx
55
55
  ensure
56
- ours.each(&:close)
57
- Process.waitpid pid if pid
56
+ begin
57
+ ours.each(&:close)
58
+ rescue IOError
59
+ # OK, nothing can be done by us for closed streams.
60
+ ensure
61
+ Process.waitpid pid if pid
62
+ end
58
63
  end
59
64
  end
60
65
 
@@ -32,38 +32,19 @@ saved_binding = TOPLEVEL_BINDING.dup
32
32
  rx = IO.for_fd ARGV.shift.to_i, 'rb'
33
33
  tx = IO.for_fd ARGV.shift.to_i, 'wb'
34
34
 
35
- using Module.new {
36
- refine Kernel do
35
+ private
37
36
 
38
- private
39
-
40
- Kernel.class_variable_set('@@rx', rx)
41
- Kernel.class_variable_set('@@tx', tx)
42
-
43
- def assert_xmp_send *argv
44
- rx = Kernel.class_variable_get('@@rx')
45
- tx = Kernel.class_variable_get('@@tx')
46
- str = Marshal.dump argv
47
- tx.puts str.length
48
- tx.write str
49
- tx.flush
50
- if rx.gets then
51
- return true
52
- else
53
- Process.exit false
54
- end
55
- end
37
+ define_method :xmp2assert_assert do |xmp, expr, bt = caller(3)|
38
+ bt.reject! {|i| i.start_with? __FILE__ }
39
+ str = Marshal.dump [xmp, expr.inspect, bt]
40
+ tx.puts str.length
41
+ tx.write str
42
+ tx.flush
43
+ if rx.gets then
44
+ return true
45
+ else
46
+ Process.exit false
56
47
  end
57
- }
58
-
59
- # Simulates test-unit.
60
- # @param xmp [String] expected pattern of inspect.
61
- # @param expr [Object] object to check.
62
- # @param message [String] extra failure message.
63
- # @note assertion is done in parent process, not in it.
64
- def xmp2assert_assert xmp, expr, c = caller(3)
65
- c.reject! {|i| i.start_with? __FILE__ }
66
- return assert_xmp_send xmp, expr.inspect, c
67
48
  end
68
49
 
69
50
  # Here we go.
@@ -24,4 +24,4 @@
24
24
  # SOFTWARE.
25
25
  ;
26
26
 
27
- XMP2Assert::VERSION = 11
27
+ XMP2Assert::VERSION = 12
@@ -38,13 +38,11 @@ require_relative 'namespace'
38
38
  # To reroute the problem, here we convert a XMP comment into a regular
39
39
  # expression. The idea behind this is the diff process hook implemented in
40
40
  # https://github.com/ruby/chkbuild
41
- module XMP2Assert::XMP2Rexp
42
- module_function
43
-
41
+ class XMP2Assert::XMP2Rexp
44
42
  # Generates a regular expression that roughly matches the input.
45
43
  # @param xmp [String] example.
46
44
  # @return [Regexp] converted regular expression.
47
- def xmp2rexp xmp
45
+ def self.xmp2rexp xmp
48
46
  # :NOTE: we are editing regular expressions using regular expressions. In
49
47
  # order to hack this method you must be a seasoned regular expression
50
48
  # craftsperson who can count backslashes at ease.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmp2assert
3
3
  version: !ruby/object:Gem::Version
4
- version: '11'
4
+ version: '12'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Urabe, Shyouhei
@@ -247,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
247
  version: '0'
248
248
  requirements: []
249
249
  rubyforge_project:
250
- rubygems_version: 2.6.12
250
+ rubygems_version: 2.5.2
251
251
  signing_key:
252
252
  specification_version: 4
253
253
  summary: auto-generate assertions from `# =>` comments