pork 2.0.0 → 2.1.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 +5 -5
- data/.gitlab-ci.yml +40 -0
- data/.gitmodules +1 -1
- data/CHANGES.md +17 -0
- data/Gemfile +0 -4
- data/README.md +48 -4
- data/Rakefile +5 -4
- data/lib/pork/api.rb +4 -0
- data/lib/pork/extra/show_source.rb +21 -2
- data/lib/pork/isolator.rb +52 -12
- data/lib/pork/more/should.rb +6 -4
- data/lib/pork/report.rb +14 -11
- data/lib/pork/runner.rb +1 -1
- data/lib/pork/suite.rb +16 -1
- data/lib/pork/version.rb +1 -1
- data/lib/pork.rb +1 -5
- data/pork.gemspec +17 -21
- data/task/README.md +8 -8
- data/task/gemgem.rb +32 -8
- data/test/test_around.rb +64 -0
- data/test/test_isolator.rb +29 -0
- data/test/test_nested.rb +1 -1
- data/test/test_suite.rb +10 -0
- metadata +14 -9
- data/.travis.yml +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6ef62f89f8c80fddee9ebd8e670cfa8de340a312531d022a3e49510dc7dd218f
|
4
|
+
data.tar.gz: 1f3af07cdc623ec24ba294fc41409f958a7fb8c89961388d98915bc648dfb142
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8c95acab07773aa0fd2f629c41c7a08d50b747c44649a3981021c5f64d0bc08f58a1b2de3ac78c317c3519c692dff2c6f473f32fcf37d806f367e65bb5fac28
|
7
|
+
data.tar.gz: 7b24bb5ec0792941b51ed0b2f69b90f17465fd68401db9835b42ac17b8719ed3c2936a683c6aa22f6165f9d9b01c94d5f5e90329c55c83868d051f4883004910
|
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
stages:
|
3
|
+
- test
|
4
|
+
|
5
|
+
.test:
|
6
|
+
stage: test
|
7
|
+
image: ruby:${RUBY_VERSION}-bullseye
|
8
|
+
variables:
|
9
|
+
GIT_DEPTH: "1"
|
10
|
+
GIT_SUBMODULE_STRATEGY: recursive
|
11
|
+
GIT_SUBMODULE_PATHS: task
|
12
|
+
RUBYOPT: --enable-frozen-string-literal
|
13
|
+
before_script:
|
14
|
+
- bundle install --retry=3
|
15
|
+
- unset CI # Coverage doesn't work well with frozen literal
|
16
|
+
script:
|
17
|
+
- ruby -vr bundler/setup -S rake test
|
18
|
+
|
19
|
+
ruby:3.0:
|
20
|
+
extends:
|
21
|
+
- .test
|
22
|
+
variables:
|
23
|
+
RUBY_VERSION: '3.0'
|
24
|
+
|
25
|
+
ruby:3.1:
|
26
|
+
extends:
|
27
|
+
- .test
|
28
|
+
variables:
|
29
|
+
RUBY_VERSION: '3.1'
|
30
|
+
|
31
|
+
ruby:3.2:
|
32
|
+
extends:
|
33
|
+
- .test
|
34
|
+
variables:
|
35
|
+
RUBY_VERSION: '3.2'
|
36
|
+
|
37
|
+
jruby:latest:
|
38
|
+
extends:
|
39
|
+
- .test
|
40
|
+
image: jruby:latest
|
data/.gitmodules
CHANGED
data/CHANGES.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Pork 2.1.0 -- 2022-12-28
|
4
|
+
|
5
|
+
### Bugs fixed
|
6
|
+
|
7
|
+
* `Pork.show_source` can work under frozen literal string mode now.
|
8
|
+
* Fix picking the right test for the file line number from `ENV['PORK_TEST']`
|
9
|
+
(I totally forgot the details for this from 2017, but I think it should
|
10
|
+
make it more accurate anyway)
|
11
|
+
* Ruby 3.2 compatibility fix. (Removed the use of `Random::DEFAULT`)
|
12
|
+
|
13
|
+
### Enhancement
|
14
|
+
|
15
|
+
* Introduced `Pork::API.around` which will pass the test object to the block,
|
16
|
+
and whenever the object is called with `call` it'll run the test. Note that
|
17
|
+
if `call` was never called, it'll act like `Pork::API.before` and the test
|
18
|
+
will still run unlike RSpec. To skip the test, call `skip` directly.
|
19
|
+
|
3
20
|
## Pork 2.0.0 -- 2016-09-10
|
4
21
|
|
5
22
|
### Incompatible changes
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Pork [](https://gitlab.com/godfat/pork/-/pipelines)
|
2
2
|
|
3
3
|
by Lin Jen-Shin ([godfat](http://godfat.org))
|
4
4
|
|
@@ -7,6 +7,7 @@ by Lin Jen-Shin ([godfat](http://godfat.org))
|
|
7
7
|
* [github](https://github.com/godfat/pork)
|
8
8
|
* [rubygems](https://rubygems.org/gems/pork)
|
9
9
|
* [rdoc](http://rdoc.info/github/godfat/pork)
|
10
|
+
* [issues](https://github.com/godfat/pork/issues) (feel free to ask for support)
|
10
11
|
|
11
12
|
## DESCRIPTION:
|
12
13
|
|
@@ -147,7 +148,7 @@ end
|
|
147
148
|
|
148
149
|
## REQUIREMENTS:
|
149
150
|
|
150
|
-
* Tested with MRI (official CRuby)
|
151
|
+
* Tested with MRI (official CRuby) and JRuby.
|
151
152
|
* (Optional) [method_source][] if you would like to print the source for the
|
152
153
|
failing tests.
|
153
154
|
* (Optional) [ruby-progressbar][] if you like porgressbar for showing
|
@@ -662,6 +663,49 @@ describe do
|
|
662
663
|
end
|
663
664
|
```
|
664
665
|
|
666
|
+
### Pork::API.around
|
667
|
+
|
668
|
+
Each `around` block would be called before each `would` block (test case),
|
669
|
+
and whenever it's called, it can take an argument representing the `would`
|
670
|
+
block (test case). Whenever `call` is called on the test case, it will run.
|
671
|
+
Essentially it's wrapping around the `would` block.
|
672
|
+
|
673
|
+
Note that each nested `describe` would also run parents' `around` block,
|
674
|
+
following the same order of `before` (in order) and `after` (reverse order).
|
675
|
+
|
676
|
+
``` ruby
|
677
|
+
require 'pork/auto'
|
678
|
+
|
679
|
+
describe do
|
680
|
+
around do |test|
|
681
|
+
@a = 0
|
682
|
+
|
683
|
+
test.call
|
684
|
+
|
685
|
+
@a.should.eq 2
|
686
|
+
end
|
687
|
+
|
688
|
+
describe do
|
689
|
+
around do |test|
|
690
|
+
@a.should.eq 0
|
691
|
+
@a += 1
|
692
|
+
|
693
|
+
test.call
|
694
|
+
|
695
|
+
@a.should.eq 1
|
696
|
+
@a += 1
|
697
|
+
end
|
698
|
+
|
699
|
+
would do
|
700
|
+
@a.should.eq 1
|
701
|
+
end
|
702
|
+
end
|
703
|
+
end
|
704
|
+
```
|
705
|
+
|
706
|
+
Note that if `test.call` was never called, it'll just act like a `before`
|
707
|
+
block. All the tests will still run unlike RSpec.
|
708
|
+
|
665
709
|
### Pork::API.copy and Pork::API.paste
|
666
710
|
|
667
711
|
It could be a bit confusing at first, but just think of `copy` as a way to
|
@@ -1068,9 +1112,9 @@ Have you seen Rainbows!?
|
|
1068
1112
|
|
1069
1113
|
## LICENSE:
|
1070
1114
|
|
1071
|
-
Apache License 2.0
|
1115
|
+
Apache License 2.0 (Apache-2.0)
|
1072
1116
|
|
1073
|
-
Copyright (c) 2014-
|
1117
|
+
Copyright (c) 2014-2022, Lin Jen-Shin (godfat)
|
1074
1118
|
|
1075
1119
|
Licensed under the Apache License, Version 2.0 (the "License");
|
1076
1120
|
you may not use this file except in compliance with the License.
|
data/Rakefile
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
|
2
2
|
begin
|
3
|
-
require "#{
|
3
|
+
require "#{__dir__}/task/gemgem"
|
4
4
|
rescue LoadError
|
5
|
-
sh 'git submodule update --init'
|
5
|
+
sh 'git submodule update --init --recursive'
|
6
6
|
exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
|
7
7
|
end
|
8
8
|
|
9
|
-
Gemgem.init(
|
9
|
+
Gemgem.init(__dir__) do |s|
|
10
10
|
require 'pork/version'
|
11
11
|
s.name = 'pork'
|
12
12
|
s.version = Pork::VERSION
|
13
|
+
s.files.delete('screenshot.png')
|
14
|
+
|
13
15
|
%w[method_source ruby-progressbar].
|
14
16
|
each(&s.method(:add_development_dependency))
|
15
|
-
s.files.delete('screenshot.png')
|
16
17
|
end
|
data/lib/pork/api.rb
CHANGED
@@ -3,12 +3,31 @@ require 'method_source'
|
|
3
3
|
|
4
4
|
module Pork
|
5
5
|
module ShowSource
|
6
|
+
module FrozenStringFix
|
7
|
+
def extract_first_expression(lines, consume=0, &block)
|
8
|
+
code = consume.zero? ? [] : lines.slice!(0..(consume - 1))
|
9
|
+
|
10
|
+
lines.each do |v|
|
11
|
+
code << v
|
12
|
+
|
13
|
+
result = block ? block.call(code.join) : code.join
|
14
|
+
|
15
|
+
if complete_expression?(result)
|
16
|
+
return result
|
17
|
+
end
|
18
|
+
end
|
19
|
+
raise SyntaxError, "unexpected $end"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
MethodSource.extend(FrozenStringFix)
|
24
|
+
|
6
25
|
def show_source test, err
|
7
26
|
source = test.source
|
8
27
|
sopath = "#{test.source_location.first}:"
|
9
28
|
lowers = test.source_location.last
|
10
29
|
uppers = lowers + source.size
|
11
|
-
lineno = reject_pork(test, err).find do |backtrace|
|
30
|
+
lineno = reject_pork(test, err.backtrace).find do |backtrace|
|
12
31
|
# find the line from the test source, exclude everything else
|
13
32
|
next unless backtrace.start_with?(sopath)
|
14
33
|
number = backtrace[/(?<=\.rb:)\d+/].to_i
|
@@ -28,7 +47,7 @@ module Pork
|
|
28
47
|
end
|
29
48
|
end.join
|
30
49
|
"\n#{result.chomp}"
|
31
|
-
rescue SyntaxError => e
|
50
|
+
rescue SyntaxError, MethodSource::SourceNotFoundError => e
|
32
51
|
"\nPork bug: Cannot parse the source. Please report: #{e}"
|
33
52
|
end
|
34
53
|
end
|
data/lib/pork/isolator.rb
CHANGED
@@ -68,38 +68,78 @@ module Pork
|
|
68
68
|
|
69
69
|
def build_all_tests result={}, path=[]
|
70
70
|
suite.tests.each_with_index.inject(result) do |
|
71
|
-
|
71
|
+
tests, ((type, imp, block, opts), index)|
|
72
72
|
current = path + [index]
|
73
73
|
|
74
|
+
case type
|
75
|
+
when :describe, :would
|
76
|
+
source_location = expand_source_location(block)
|
77
|
+
init_source_store_path(tests, source_location)
|
78
|
+
end
|
79
|
+
|
74
80
|
case type
|
75
81
|
when :describe
|
76
|
-
Isolator[imp].build_all_tests(
|
77
|
-
store_path(
|
82
|
+
Isolator[imp].build_all_tests(tests, current) do |nested|
|
83
|
+
store_path(tests, nested, source_location, opts[:groups])
|
78
84
|
end
|
79
85
|
when :would
|
80
86
|
yield(current) if block_given?
|
81
|
-
store_path(
|
87
|
+
store_path(tests, current, source_location, opts[:groups])
|
82
88
|
end
|
83
89
|
|
84
|
-
|
90
|
+
tests
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
88
|
-
def
|
94
|
+
def expand_source_location block
|
95
|
+
file, line = block.source_location
|
96
|
+
[File.expand_path(file), line]
|
97
|
+
end
|
98
|
+
|
99
|
+
def init_source_store_path tests, source_location
|
100
|
+
source, line = source_location
|
101
|
+
|
102
|
+
root = tests[:files] ||= {}
|
103
|
+
map = root[source] ||= {}
|
104
|
+
|
105
|
+
# Most of the time, line is always getting larger because we're
|
106
|
+
# scanning from top to bottom, and we really need to make sure
|
107
|
+
# that the map is sorted because whenever we're looking up which
|
108
|
+
# test we want from a particular line, we want to find the closest
|
109
|
+
# block rounding up. See Isolator#by_source
|
110
|
+
# However, it's not always appending from top to bottom, because
|
111
|
+
# we might be adding more tests from Suite#paste, and the original
|
112
|
+
# test could be defined in the same file, on previous lines!
|
113
|
+
# Because of this, we really need to make sure the map is balanced.
|
114
|
+
# If we ever have ordered map in Ruby, we don't have to do this...
|
115
|
+
# See the test for Isolator.all_tests (test/test_isolator.rb)
|
116
|
+
balanced_append(map, line, [])
|
117
|
+
end
|
118
|
+
|
119
|
+
def store_path tests, path, source_location, groups
|
89
120
|
store_for_groups(tests, path, groups) if groups
|
90
|
-
store_for_source(tests, path,
|
121
|
+
store_for_source(tests, path, source_location)
|
91
122
|
end
|
92
123
|
|
93
124
|
def store_for_groups tests, path, groups
|
94
|
-
|
125
|
+
map = tests[:groups] ||= {}
|
95
126
|
groups.each do |g|
|
96
|
-
(
|
127
|
+
(map[g.to_s] ||= []) << path
|
97
128
|
end
|
98
129
|
end
|
99
130
|
|
100
|
-
def store_for_source tests, path,
|
101
|
-
|
102
|
-
|
131
|
+
def store_for_source tests, path, source_location
|
132
|
+
source, line = source_location
|
133
|
+
|
134
|
+
tests[:files][source][line] << path
|
135
|
+
end
|
136
|
+
|
137
|
+
def balanced_append map, key, value
|
138
|
+
last_key = map.reverse_each.first.first unless map.empty?
|
139
|
+
|
140
|
+
map[key] ||= []
|
141
|
+
|
142
|
+
map.replace(Hash[map.sort]) if last_key && key < last_key
|
103
143
|
end
|
104
144
|
end
|
105
145
|
end
|
data/lib/pork/more/should.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
|
2
2
|
module Kernel
|
3
3
|
def should *args, &block
|
4
|
-
stat = Thread.current.group.list.find
|
4
|
+
stat = Thread.current.group.list.find do |t|
|
5
|
+
t.thread_variable_get(:pork_stat)
|
6
|
+
end.thread_variable_get(:pork_stat)
|
5
7
|
Pork::Expect.new(stat, self, *args, &block)
|
6
8
|
end
|
7
9
|
end
|
@@ -11,12 +13,12 @@ module Pork
|
|
11
13
|
def execute stat=Stat.new, *args
|
12
14
|
thread = Thread.current
|
13
15
|
original_group, group = thread.group, ThreadGroup.new
|
14
|
-
original_stat = thread
|
16
|
+
original_stat = thread.thread_variable_get(:pork_stat)
|
15
17
|
group.add(thread)
|
16
|
-
thread
|
18
|
+
thread.thread_variable_set(:pork_stat, stat)
|
17
19
|
super(stat, *args)
|
18
20
|
ensure
|
19
|
-
thread
|
21
|
+
thread.thread_variable_set(:pork_stat, original_stat)
|
20
22
|
original_group.add(thread)
|
21
23
|
end
|
22
24
|
end
|
data/lib/pork/report.rb
CHANGED
@@ -86,10 +86,16 @@ module Pork
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def backtrace test, err
|
89
|
-
if $VERBOSE
|
89
|
+
bt = if $VERBOSE
|
90
90
|
err.backtrace
|
91
91
|
else
|
92
|
-
strip(reject_pork(test, err))
|
92
|
+
strip(reject_pork(test, err.backtrace))
|
93
|
+
end
|
94
|
+
|
95
|
+
if bt.empty?
|
96
|
+
["#{test.source_location.join(':')}:in `block in would'"]
|
97
|
+
else
|
98
|
+
bt
|
93
99
|
end
|
94
100
|
end
|
95
101
|
|
@@ -113,13 +119,8 @@ module Pork
|
|
113
119
|
"#{err.class}: #{err.message}"
|
114
120
|
end
|
115
121
|
|
116
|
-
def reject_pork test,
|
117
|
-
bt
|
118
|
-
if bt.empty?
|
119
|
-
["#{test.source_location.join(':')}:in `block in would'"]
|
120
|
-
else
|
121
|
-
bt
|
122
|
-
end
|
122
|
+
def reject_pork test, bt
|
123
|
+
bt.reject{ |l| l =~ %r{/lib/pork(/\w+)*\.rb:\d+} }
|
123
124
|
end
|
124
125
|
|
125
126
|
def strip bt
|
@@ -127,11 +128,13 @@ module Pork
|
|
127
128
|
end
|
128
129
|
|
129
130
|
def strip_home bt
|
130
|
-
|
131
|
+
home = ENV['HOME']
|
132
|
+
bt.map{ |path| path.sub(home, '~') }
|
131
133
|
end
|
132
134
|
|
133
135
|
def strip_cwd bt
|
134
|
-
|
136
|
+
cwd = Dir.pwd
|
137
|
+
bt.map{ |path| path.sub("#{cwd}/", '') }
|
135
138
|
end
|
136
139
|
|
137
140
|
def pork_test source_location
|
data/lib/pork/runner.rb
CHANGED
data/lib/pork/suite.rb
CHANGED
@@ -1,15 +1,30 @@
|
|
1
1
|
|
2
|
+
require 'fiber'
|
3
|
+
|
2
4
|
require 'pork/runner'
|
3
5
|
require 'pork/context'
|
4
6
|
|
5
7
|
module Pork
|
6
|
-
class Suite < Struct.new(:pork_stat, :pork_description)
|
8
|
+
class Suite < Struct.new(:pork_stat, :pork_description, :pork_fibers)
|
7
9
|
module Imp
|
8
10
|
attr_reader :desc, :tests
|
9
11
|
|
10
12
|
def before █ @tests << [:before, block]; end
|
11
13
|
def after █ @tests << [:after , block]; end
|
12
14
|
|
15
|
+
def around &block
|
16
|
+
before do
|
17
|
+
fiber = Fiber.new{ instance_exec(Fiber.method(:yield), &block) }
|
18
|
+
pork_fibers << fiber
|
19
|
+
fiber.resume
|
20
|
+
end
|
21
|
+
|
22
|
+
after do
|
23
|
+
fiber = pork_fibers.pop
|
24
|
+
fiber.resume if fiber.alive?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
13
28
|
def copy desc=:default, &suite
|
14
29
|
@stash[desc] = suite
|
15
30
|
end
|
data/lib/pork/version.rb
CHANGED
data/lib/pork.rb
CHANGED
data/pork.gemspec
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: pork 2.
|
2
|
+
# stub: pork 2.1.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "pork".freeze
|
6
|
-
s.version = "2.
|
6
|
+
s.version = "2.1.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2022-12-28"
|
12
12
|
s.description = "Pork -- Simple and clean and modular testing library.\n\nInspired by [Bacon][].\n\n[Bacon]: https://github.com/chneukirchen/bacon".freeze
|
13
13
|
s.email = ["godfat (XD) godfat.org".freeze]
|
14
14
|
s.files = [
|
15
15
|
".gitignore".freeze,
|
16
|
+
".gitlab-ci.yml".freeze,
|
16
17
|
".gitmodules".freeze,
|
17
|
-
".travis.yml".freeze,
|
18
18
|
"CHANGES.md".freeze,
|
19
19
|
"Gemfile".freeze,
|
20
20
|
"LICENSE".freeze,
|
@@ -52,42 +52,38 @@ Gem::Specification.new do |s|
|
|
52
52
|
"pork.gemspec".freeze,
|
53
53
|
"task/README.md".freeze,
|
54
54
|
"task/gemgem.rb".freeze,
|
55
|
+
"test/test_around.rb".freeze,
|
55
56
|
"test/test_bacon.rb".freeze,
|
56
57
|
"test/test_expect.rb".freeze,
|
57
58
|
"test/test_inspect.rb".freeze,
|
59
|
+
"test/test_isolator.rb".freeze,
|
58
60
|
"test/test_meta.rb".freeze,
|
59
61
|
"test/test_nested.rb".freeze,
|
60
62
|
"test/test_pork_test.rb".freeze,
|
61
63
|
"test/test_readme.rb".freeze,
|
62
64
|
"test/test_should.rb".freeze,
|
63
|
-
"test/test_stat.rb".freeze
|
65
|
+
"test/test_stat.rb".freeze,
|
66
|
+
"test/test_suite.rb".freeze]
|
64
67
|
s.homepage = "https://github.com/godfat/pork".freeze
|
65
|
-
s.licenses = ["Apache
|
66
|
-
s.rubygems_version = "
|
68
|
+
s.licenses = ["Apache-2.0".freeze]
|
69
|
+
s.rubygems_version = "3.4.1".freeze
|
67
70
|
s.summary = "Pork -- Simple and clean and modular testing library.".freeze
|
68
71
|
s.test_files = [
|
72
|
+
"test/test_around.rb".freeze,
|
69
73
|
"test/test_bacon.rb".freeze,
|
70
74
|
"test/test_expect.rb".freeze,
|
71
75
|
"test/test_inspect.rb".freeze,
|
76
|
+
"test/test_isolator.rb".freeze,
|
72
77
|
"test/test_meta.rb".freeze,
|
73
78
|
"test/test_nested.rb".freeze,
|
74
79
|
"test/test_pork_test.rb".freeze,
|
75
80
|
"test/test_readme.rb".freeze,
|
76
81
|
"test/test_should.rb".freeze,
|
77
|
-
"test/test_stat.rb".freeze
|
82
|
+
"test/test_stat.rb".freeze,
|
83
|
+
"test/test_suite.rb".freeze]
|
78
84
|
|
79
|
-
|
80
|
-
s.specification_version = 4
|
85
|
+
s.specification_version = 4
|
81
86
|
|
82
|
-
|
83
|
-
|
84
|
-
s.add_development_dependency(%q<ruby-progressbar>.freeze, [">= 0"])
|
85
|
-
else
|
86
|
-
s.add_dependency(%q<method_source>.freeze, [">= 0"])
|
87
|
-
s.add_dependency(%q<ruby-progressbar>.freeze, [">= 0"])
|
88
|
-
end
|
89
|
-
else
|
90
|
-
s.add_dependency(%q<method_source>.freeze, [">= 0"])
|
91
|
-
s.add_dependency(%q<ruby-progressbar>.freeze, [">= 0"])
|
92
|
-
end
|
87
|
+
s.add_development_dependency(%q<method_source>.freeze, [">= 0"])
|
88
|
+
s.add_development_dependency(%q<ruby-progressbar>.freeze, [">= 0"])
|
93
89
|
end
|
data/task/README.md
CHANGED
@@ -4,16 +4,16 @@
|
|
4
4
|
|
5
5
|
Provided tasks:
|
6
6
|
|
7
|
-
rake clean #
|
7
|
+
rake clean # Trash ignored files
|
8
8
|
rake gem:build # Build gem
|
9
9
|
rake gem:install # Install gem
|
10
10
|
rake gem:release # Release gem
|
11
11
|
rake gem:spec # Generate gemspec
|
12
|
-
rake test # Run tests
|
12
|
+
rake test # Run tests
|
13
13
|
|
14
14
|
## REQUIREMENTS:
|
15
15
|
|
16
|
-
* Tested with MRI (official CRuby)
|
16
|
+
* Tested with MRI (official CRuby) and JRuby.
|
17
17
|
|
18
18
|
## INSTALLATION:
|
19
19
|
|
@@ -23,13 +23,13 @@ And in Rakefile:
|
|
23
23
|
|
24
24
|
``` ruby
|
25
25
|
begin
|
26
|
-
require "#{
|
26
|
+
require "#{__dir__}/task/gemgem"
|
27
27
|
rescue LoadError
|
28
|
-
sh 'git submodule update --init'
|
28
|
+
sh 'git submodule update --init --recursive'
|
29
29
|
exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
|
30
30
|
end
|
31
31
|
|
32
|
-
Gemgem.init(
|
32
|
+
Gemgem.init(__dir__, :submodules => %w[your-dep]) do |s|
|
33
33
|
s.name = 'your-gem'
|
34
34
|
s.version = '0.1.0'
|
35
35
|
end
|
@@ -37,9 +37,9 @@ end
|
|
37
37
|
|
38
38
|
## LICENSE:
|
39
39
|
|
40
|
-
Apache License 2.0
|
40
|
+
Apache License 2.0 (Apache-2.0)
|
41
41
|
|
42
|
-
Copyright (c) 2011-
|
42
|
+
Copyright (c) 2011-2021, Lin Jen-Shin (godfat)
|
43
43
|
|
44
44
|
Licensed under the Apache License, Version 2.0 (the "License");
|
45
45
|
you may not use this file except in compliance with the License.
|
data/task/gemgem.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module Gemgem
|
3
3
|
class << self
|
4
|
-
attr_accessor :dir, :spec, :spec_create
|
4
|
+
attr_accessor :dir, :spec, :submodules, :spec_create
|
5
5
|
end
|
6
6
|
|
7
7
|
module_function
|
@@ -11,12 +11,14 @@ module Gemgem
|
|
11
11
|
def pkg_dir ; "#{dir}/pkg" ; end
|
12
12
|
def escaped_dir; @escaped_dir ||= Regexp.escape(dir); end
|
13
13
|
|
14
|
-
def init dir, &block
|
14
|
+
def init dir, options={}, &block
|
15
15
|
self.dir = dir
|
16
|
-
$LOAD_PATH.unshift("#{dir}/lib")
|
17
16
|
ENV['RUBYLIB'] = "#{dir}/lib:#{ENV['RUBYLIB']}"
|
18
17
|
ENV['PATH'] = "#{dir}/bin:#{ENV['PATH']}"
|
18
|
+
self.submodules = options[:submodules] || []
|
19
19
|
self.spec_create = block
|
20
|
+
|
21
|
+
$LOAD_PATH.unshift("#{dir}/lib", *submodules_libs)
|
20
22
|
end
|
21
23
|
|
22
24
|
def create
|
@@ -26,7 +28,7 @@ module Gemgem
|
|
26
28
|
|
27
29
|
s.description = description.join
|
28
30
|
s.summary = description.first
|
29
|
-
s.license =
|
31
|
+
s.license = license
|
30
32
|
|
31
33
|
s.date = Time.now.strftime('%Y-%m-%d')
|
32
34
|
s.files = gem_files
|
@@ -40,6 +42,7 @@ module Gemgem
|
|
40
42
|
|
41
43
|
def gem_install
|
42
44
|
require 'rubygems/commands/install_command'
|
45
|
+
require 'rubygems/package'
|
43
46
|
# read ~/.gemrc
|
44
47
|
Gem.use_paths(Gem.configuration[:gemhome], Gem.configuration[:gempath])
|
45
48
|
Gem::Command.extra_args = Gem.configuration[:gem]
|
@@ -49,7 +52,8 @@ module Gemgem
|
|
49
52
|
cmd.handle_options([])
|
50
53
|
|
51
54
|
# install
|
52
|
-
|
55
|
+
gem_package = Gem::Package.new(gem_path)
|
56
|
+
install = Gem::Installer.new(gem_package, cmd.options)
|
53
57
|
install.install
|
54
58
|
puts "\e[35mGem installed: \e[33m#{strip_path(install.gem_dir)}\e[0m"
|
55
59
|
end
|
@@ -115,6 +119,7 @@ module Gemgem
|
|
115
119
|
SimpleCov.start do
|
116
120
|
add_filter('test/')
|
117
121
|
add_filter('test.rb')
|
122
|
+
submodules_libs.each(&method(:add_filter))
|
118
123
|
end
|
119
124
|
end
|
120
125
|
|
@@ -159,11 +164,15 @@ module Gemgem
|
|
159
164
|
end
|
160
165
|
|
161
166
|
def strip_home_path path
|
162
|
-
path.sub(ENV['HOME']
|
167
|
+
path.sub(/\A#{Regexp.escape(ENV['HOME'])}\//, '~/')
|
163
168
|
end
|
164
169
|
|
165
170
|
def strip_cwd_path path
|
166
|
-
path.sub(Dir.pwd
|
171
|
+
path.sub(/\A#{Regexp.escape(Dir.pwd)}\//, '')
|
172
|
+
end
|
173
|
+
|
174
|
+
def submodules_libs
|
175
|
+
submodules.map{ |path| "#{dir}/#{path}/lib" }
|
167
176
|
end
|
168
177
|
|
169
178
|
def git *args
|
@@ -201,6 +210,11 @@ module Gemgem
|
|
201
210
|
@description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines.to_a
|
202
211
|
end
|
203
212
|
|
213
|
+
def license
|
214
|
+
readme['LICENSE'].sub(/.+\n\n/, '').lines.first.
|
215
|
+
split(/[()]/).map(&:strip).reject(&:empty?).last
|
216
|
+
end
|
217
|
+
|
204
218
|
def all_files
|
205
219
|
@all_files ||= fold_files(glob).sort
|
206
220
|
end
|
@@ -221,7 +235,8 @@ module Gemgem
|
|
221
235
|
|
222
236
|
def gem_files
|
223
237
|
@gem_files ||= all_files.reject{ |f|
|
224
|
-
f =~
|
238
|
+
f =~ submodules_pattern ||
|
239
|
+
(f =~ ignored_pattern && !git_files.include?(f))
|
225
240
|
}
|
226
241
|
end
|
227
242
|
|
@@ -253,6 +268,15 @@ module Gemgem
|
|
253
268
|
end
|
254
269
|
end
|
255
270
|
|
271
|
+
def submodules_pattern
|
272
|
+
@submodules_pattern ||= if submodules.empty?
|
273
|
+
/^$/
|
274
|
+
else
|
275
|
+
Regexp.new(submodules.map{ |path|
|
276
|
+
"^#{Regexp.escape(path)}/" }.join('|'))
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
256
280
|
def expand_patterns pathes
|
257
281
|
# http://git-scm.com/docs/gitignore
|
258
282
|
pathes.flat_map{ |path|
|
data/test/test_around.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
require 'pork/test'
|
3
|
+
|
4
|
+
describe 'using fibers to simulate around' do
|
5
|
+
def a
|
6
|
+
@a ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def around_me i
|
10
|
+
a << "around before #{i}"
|
11
|
+
yield
|
12
|
+
a << "around after #{i}"
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
a << :before
|
17
|
+
end
|
18
|
+
|
19
|
+
after do
|
20
|
+
expect(a).eq [:before, "around before 0", :nocall, "around before 1",
|
21
|
+
:would, :after, "around after 1", "around after 0"]
|
22
|
+
end
|
23
|
+
|
24
|
+
around do |test|
|
25
|
+
expect(a).eq [:before]
|
26
|
+
|
27
|
+
around_me(0) do
|
28
|
+
test.call
|
29
|
+
|
30
|
+
expect(a).eq [:before, "around before 0", :nocall, "around before 1",
|
31
|
+
:would, :after, "around after 1"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
around do
|
36
|
+
expect(a).eq [:before, "around before 0"]
|
37
|
+
|
38
|
+
a << :nocall
|
39
|
+
end
|
40
|
+
|
41
|
+
around do |test|
|
42
|
+
expect(a).eq [:before, "around before 0", :nocall]
|
43
|
+
|
44
|
+
around_me(1) do
|
45
|
+
test.call
|
46
|
+
|
47
|
+
expect(a).eq [:before, "around before 0", :nocall, "around before 1",
|
48
|
+
:would, :after]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
after do
|
53
|
+
expect(a).eq [:before, "around before 0", :nocall, "around before 1",
|
54
|
+
:would]
|
55
|
+
|
56
|
+
a << :after
|
57
|
+
end
|
58
|
+
|
59
|
+
would 'wrap around around' do
|
60
|
+
expect(a).eq [:before, "around before 0", :nocall, "around before 1"]
|
61
|
+
|
62
|
+
a << :would
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
require 'pork/test'
|
3
|
+
|
4
|
+
describe Pork::Isolator do
|
5
|
+
before do
|
6
|
+
@suite = Class.new(Pork::Suite){init}
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.all_tests' do
|
10
|
+
would 'have the correct source order' do
|
11
|
+
@suite.copy :append do
|
12
|
+
would{}
|
13
|
+
end
|
14
|
+
|
15
|
+
@suite.describe do
|
16
|
+
describe do
|
17
|
+
would{}
|
18
|
+
end
|
19
|
+
|
20
|
+
paste :append
|
21
|
+
end
|
22
|
+
|
23
|
+
Pork::Isolator[@suite].
|
24
|
+
all_tests[:files].values.map(&:keys).each do |lines|
|
25
|
+
expect(lines).eq lines.sort
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/test/test_nested.rb
CHANGED
data/test/test_suite.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|
@@ -51,8 +51,8 @@ extensions: []
|
|
51
51
|
extra_rdoc_files: []
|
52
52
|
files:
|
53
53
|
- ".gitignore"
|
54
|
+
- ".gitlab-ci.yml"
|
54
55
|
- ".gitmodules"
|
55
|
-
- ".travis.yml"
|
56
56
|
- CHANGES.md
|
57
57
|
- Gemfile
|
58
58
|
- LICENSE
|
@@ -90,20 +90,23 @@ files:
|
|
90
90
|
- pork.gemspec
|
91
91
|
- task/README.md
|
92
92
|
- task/gemgem.rb
|
93
|
+
- test/test_around.rb
|
93
94
|
- test/test_bacon.rb
|
94
95
|
- test/test_expect.rb
|
95
96
|
- test/test_inspect.rb
|
97
|
+
- test/test_isolator.rb
|
96
98
|
- test/test_meta.rb
|
97
99
|
- test/test_nested.rb
|
98
100
|
- test/test_pork_test.rb
|
99
101
|
- test/test_readme.rb
|
100
102
|
- test/test_should.rb
|
101
103
|
- test/test_stat.rb
|
104
|
+
- test/test_suite.rb
|
102
105
|
homepage: https://github.com/godfat/pork
|
103
106
|
licenses:
|
104
|
-
- Apache
|
107
|
+
- Apache-2.0
|
105
108
|
metadata: {}
|
106
|
-
post_install_message:
|
109
|
+
post_install_message:
|
107
110
|
rdoc_options: []
|
108
111
|
require_paths:
|
109
112
|
- lib
|
@@ -118,18 +121,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
121
|
- !ruby/object:Gem::Version
|
119
122
|
version: '0'
|
120
123
|
requirements: []
|
121
|
-
|
122
|
-
|
123
|
-
signing_key:
|
124
|
+
rubygems_version: 3.4.1
|
125
|
+
signing_key:
|
124
126
|
specification_version: 4
|
125
127
|
summary: Pork -- Simple and clean and modular testing library.
|
126
128
|
test_files:
|
129
|
+
- test/test_around.rb
|
127
130
|
- test/test_bacon.rb
|
128
131
|
- test/test_expect.rb
|
129
132
|
- test/test_inspect.rb
|
133
|
+
- test/test_isolator.rb
|
130
134
|
- test/test_meta.rb
|
131
135
|
- test/test_nested.rb
|
132
136
|
- test/test_pork_test.rb
|
133
137
|
- test/test_readme.rb
|
134
138
|
- test/test_should.rb
|
135
139
|
- test/test_stat.rb
|
140
|
+
- test/test_suite.rb
|
data/.travis.yml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
sudo: false
|
2
|
-
language: ruby
|
3
|
-
rvm:
|
4
|
-
- 2.2.5
|
5
|
-
- 2.3.1
|
6
|
-
- rbx
|
7
|
-
- jruby-9
|
8
|
-
|
9
|
-
before_install:
|
10
|
-
- rvm get head
|
11
|
-
- rvm reload
|
12
|
-
- rvm use --install $TRAVIS_RUBY_VERSION --binary --latest
|
13
|
-
install: 'gem install bundler; bundle install --retry=3'
|
14
|
-
script: 'ruby -r bundler/setup -S rake test'
|