pork 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c261975cc7cf0b2bcacb506cc04b3e1c088ea9b5
4
- data.tar.gz: 0aeb04d6e629d99461713681d2b611863c97f582
3
+ metadata.gz: 095bec1d9b0e5589ead858fce38929b381210569
4
+ data.tar.gz: a311efe4b88dd95d9d3121092ebd716227d6e207
5
5
  SHA512:
6
- metadata.gz: 72a8a67eb1423fd9faa19a4d7eec5ec336ee9ce2b9fd261ba2329c8bf28de762ffbf6b5013d547c07a27880654ac9819402816bd435881f9512280dfcedca966
7
- data.tar.gz: 32b9c1379c816168dcde3f84148793516ed85f477cebb50ea95bdbe2807c8a38f94490bb980e3d69b73750dc665e52350332446bcd977c4819bfdf4d8ed21b09
6
+ metadata.gz: d580f3bb350761f874bfa061d554cb0d7c2f8a4fd74ac6fe90465c9c06100f89fba3186d452751f8a28bd72ebc4a7727ec0862b0523727cdf463f701531378d1
7
+ data.tar.gz: af26e6604565d1b9041b30f0a993cae03c58ac4bcf515f376eb0bdaa187c3d5b3da0b6e683b49a82daae58d8a64fe36b5edb646cf366e618744a0715af17f402
data/CHANGES.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGES
2
2
 
3
+ ## Pork 1.2.3 -- 2015-04-16
4
+
5
+ ### Enhancement
6
+
7
+ * Now `would` could take a second argument with `:group => [:name]`,
8
+ and you could also specifying the groups to run in `PORK_TEST`.
9
+ Checkout README for more information. Input from @mz026
10
+
11
+ * `PORK_TEST` could also accept a file path without a line number now.
12
+
3
13
  ## Pork 1.2.2 -- 2015-03-19
4
14
 
5
15
  ### Enhancement
data/README.md CHANGED
@@ -361,16 +361,6 @@ run `rake test` to run all the tests.
361
361
  [Fish shell]: http://fishshell.com/
362
362
  [gemgem]: https://github.com/godfat/gemgem
363
363
 
364
- ## Mutant integration
365
-
366
- Pork also ships with [mutant][] integration. Here's an example to run it:
367
-
368
- mutant -Ilib -rjellyfish --use pork Jellyfish
369
-
370
- for [jellyfish][].
371
-
372
- [jellyfish]: https://github.com/godfat/jellyfish
373
-
374
364
  ## The API
375
365
 
376
366
  ### Kernel#should
@@ -764,23 +754,80 @@ describe do
764
754
  end
765
755
  ```
766
756
 
767
- ### Pork.autorun
757
+ ## The Options
768
758
 
769
- Calling this would register an `at_exit` hook to run tests at exit.
770
- This also accepts an argument to turn on and off autorun. Calling this
771
- multiple times is ok. (It's not thread safe though, don't call this twice
772
- from different threads at the same time. If you really want to do this,
773
- let's add a mutex for this)
759
+ ### `env PORK_TEST=`
760
+
761
+ As the code base grows, at some point running the whole test suites could be
762
+ very slow and frustrating while doing agile development. In this case, we
763
+ might want to run only a subset of the whole test suites. Granted that we
764
+ could already divide the tests into files, and only load one file and run
765
+ tests inside the file. But if the tests are just slow, we might still want to
766
+ run only a specific test case. This is where `env PORK_TEST=` shines.
767
+
768
+ Suppose you run the tests via:
769
+
770
+ ``` shell
771
+ ruby -Ilib test/test_pork.rb
772
+ ```
773
+
774
+ Then you could do:
775
+
776
+ ``` shell
777
+ env PORK_TEST=test/test_pork.rb:123 ruby -Ilib test/test_pork.rb
778
+ ```
779
+
780
+ So that it would only run the test case around test_pork.rb line 123.
781
+ If you run the tests via:
782
+
783
+ ``` shell
784
+ rake test
785
+ ```
786
+
787
+ Then you could do:
788
+
789
+ ``` shell
790
+ env PORK_TEST=test/test_pork.rb:123 rake test
791
+ ```
792
+
793
+ It's the same thing just that `rake test` might load more tests which would
794
+ never run. Note that if you omit the line number, then the whole file would
795
+ run.
796
+
797
+ #### `env PORK_TEST=` with `:groups`
798
+
799
+ `PORK_TEST` could also take a list of groups. Groups are defined in the tests,
800
+ as the second argument to `would`. Take this as an example:
774
801
 
775
- It would also exit with 0 if no error occurs or N for N errors and failures.
776
802
 
777
803
  ``` ruby
778
- Pork.autorun # enable
779
- Pork.autorun(false) # disable
780
- Pork.autorun(true) # enable
804
+ would 'pass', :groups => [:core, :more] do
805
+ ok
806
+ end
807
+
808
+ would 'also pass', :groups => [:more] do
809
+ ok
810
+ end
781
811
  ```
782
812
 
783
- `require 'pork/auto'` would call `Pork.autorun`
813
+ Then if specifying `PORK_TEST=more`, then both tests would run. If specifying
814
+ `PORK_TEST=core`, then only the first would run. We could also specifying
815
+ multiple groups, separated with commas (,), like `PORK_TEST=core,more`,
816
+ then of course both tests would run.
817
+
818
+ This would be very useful when you want to run a specific test case without
819
+ typing the whole file path and finding the line number. Just edit your test
820
+ source by adding some temporary group like `:groups => [:test]` and then
821
+ run the test command prefixed by `env PORK_TEST=test` then you're done.
822
+ You could just remove the group after debugging. This must be much easier to
823
+ do then commenting out a bunch of random codes in the tests.
824
+
825
+ Summary by examples:
826
+
827
+ * `env PORK_TEST='test/test_pork.rb:123' rake test`
828
+ * `env PORK_TEST='test/test_pork.rb' rake test`
829
+ * `env PORK_TEST='group0' rake test`
830
+ * `env PORK_TEST='group0,group1' rake test`
784
831
 
785
832
  ### Pork.execute_mode
786
833
 
@@ -866,6 +913,24 @@ Pork.inspect_failure_mode :newline
866
913
 
867
914
  Then it would always use the mode we specified.
868
915
 
916
+ ### Pork.autorun
917
+
918
+ Calling this would register an `at_exit` hook to run tests at exit.
919
+ This also accepts an argument to turn on and off autorun. Calling this
920
+ multiple times is ok. (It's not thread safe though, don't call this twice
921
+ from different threads at the same time. If you really want to do this,
922
+ let's add a mutex for this)
923
+
924
+ It would also exit with 0 if no error occurs or N for N errors and failures.
925
+
926
+ ``` ruby
927
+ Pork.autorun # enable
928
+ Pork.autorun(false) # disable
929
+ Pork.autorun(true) # enable
930
+ ```
931
+
932
+ `require 'pork/auto'` would call `Pork.autorun`
933
+
869
934
  ### Pork.Rainbows!
870
935
 
871
936
  Have you seen Rainbows!?
@@ -24,8 +24,8 @@ module Pork
24
24
  @tests << [:describe, executor]
25
25
  end
26
26
 
27
- def would desc=:default, &test
28
- @tests << [:would, desc, test]
27
+ def would desc=:default, opts={}, &test
28
+ @tests << [:would, desc, test, opts]
29
29
  end
30
30
 
31
31
  def execute mode, *args
@@ -8,15 +8,32 @@ module Pork
8
8
  end
9
9
 
10
10
  def all_paths
11
- all_tests.values.flat_map(&:values).flatten(1)
11
+ (all_tests[:files] || {}).values.flat_map(&:values).flatten(1)
12
12
  end
13
13
 
14
- def [] source_location
15
- file_str, line_str = source_location.split(':')
14
+ def [] index
15
+ by_groups(index) || by_source(index)
16
+ end
17
+
18
+ def by_groups groups
19
+ return unless tests = all_tests[:groups]
20
+ paths = groups.split(',').flat_map do |g|
21
+ tests[g.strip] || []
22
+ end.uniq
23
+ paths unless paths.empty?
24
+ end
25
+
26
+ def by_source source
27
+ return unless tests = all_tests[:files]
28
+ file_str, line_str = source.split(':')
16
29
  file, line = File.expand_path(file_str), line_str.to_i
17
- return unless tests = all_tests[file]
18
- _, paths = tests.reverse_each.find{ |(l, _)| l <= line }
19
- paths
30
+ return unless cases = tests[file]
31
+ if line.zero?
32
+ cases.values.flatten(1)
33
+ else
34
+ _, paths = cases.reverse_each.find{ |(l, _)| l <= line }
35
+ paths
36
+ end
20
37
  end
21
38
 
22
39
  def shuffled stat=Stat.new, paths=all_paths
@@ -48,18 +65,33 @@ module Pork
48
65
  end
49
66
 
50
67
  def build_all_tests result={}, path=[]
51
- @tests.each_with_index.inject(result) do |r, ((type, arg, test), index)|
68
+ @tests.each_with_index.inject(result) do |r,
69
+ ((type, imp, test, opts),
70
+ index)|
52
71
  current = path + [index]
53
72
  case type
54
73
  when :describe
55
- arg.build_all_tests(r, current)
74
+ imp.build_all_tests(r, current)
56
75
  when :would
57
- file, line = test.source_location
58
- ((r[File.expand_path(file)] ||= {})[line] ||= []) << current
76
+ groups = opts[:groups]
77
+ store_for_groups(r, current, groups) if groups
78
+ store_for_source(r, current, *test.source_location)
59
79
  end
60
80
  r
61
81
  end
62
82
  end
83
+
84
+ def store_for_groups tests, path, groups
85
+ r = tests[:groups] ||= {}
86
+ groups.each do |g|
87
+ (r[g.to_s] ||= []) << path
88
+ end
89
+ end
90
+
91
+ def store_for_source tests, path, file, line
92
+ r = tests[:files] ||= {}
93
+ ((r[File.expand_path(file)] ||= {})[line] ||= []) << path
94
+ end
63
95
  end
64
96
 
65
97
  Executor.extend(Shuffled)
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Pork
3
- VERSION = '1.2.2'
3
+ VERSION = '1.2.3'
4
4
  end
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: pork 1.2.2 ruby lib
2
+ # stub: pork 1.2.3 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "pork"
6
- s.version = "1.2.2"
6
+ s.version = "1.2.3"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["Lin Jen-Shin (godfat)"]
11
- s.date = "2015-03-19"
11
+ s.date = "2015-04-16"
12
12
  s.description = "Pork -- Simple and clean and modular testing library.\n\nInspired by [Bacon][].\n\n[Bacon]: https://github.com/chneukirchen/bacon"
13
13
  s.email = ["godfat (XD) godfat.org"]
14
14
  s.files = [
@@ -47,6 +47,7 @@ Gem::Specification.new do |s|
47
47
  "test/test_bacon.rb",
48
48
  "test/test_inspect.rb",
49
49
  "test/test_nested.rb",
50
+ "test/test_pork_test.rb",
50
51
  "test/test_readme.rb",
51
52
  "test/test_should.rb"]
52
53
  s.homepage = "https://github.com/godfat/pork"
@@ -57,6 +58,7 @@ Gem::Specification.new do |s|
57
58
  "test/test_bacon.rb",
58
59
  "test/test_inspect.rb",
59
60
  "test/test_nested.rb",
61
+ "test/test_pork_test.rb",
60
62
  "test/test_readme.rb",
61
63
  "test/test_should.rb"]
62
64
 
@@ -0,0 +1,57 @@
1
+
2
+ require 'pork/test'
3
+
4
+ describe 'PORK_TEST=a' do
5
+ def verify line, executor, index
6
+ path = executor[index].first
7
+ type, desc, block, opts = extract(path, executor)
8
+ expect(type) .eq :would
9
+ expect(desc) .eq 'find the corresponding test case'
10
+ expect(block.source_location).eq [__FILE__, line]
11
+ expect(opts) .eq :groups => [:a, :b]
12
+ end
13
+
14
+ def extract path, executor
15
+ path.inject(executor.instance_variable_get(:@tests)) do |tests, idx|
16
+ type, arg, = tests[idx]
17
+ case type
18
+ when :describe # we need to go deeper
19
+ arg.instance_variable_get(:@tests)
20
+ else
21
+ tests[idx] # should end here
22
+ end
23
+ end
24
+ end
25
+
26
+ would 'find the corresponding test case', :groups => [:a, :b] do
27
+ line = __LINE__ - 1
28
+ [self.class, Pork::Executor].each do |executor|
29
+ verify(line, executor, "#{__FILE__}:#{__LINE__}") # line
30
+ verify(line, executor, 'a') # group
31
+ verify(line, executor, "#{__FILE__}:#{__LINE__}") # diff line
32
+ verify(line, executor, __FILE__) # file
33
+ end
34
+ end
35
+
36
+ describe 'PORK_TEST=b' do
37
+ would 'find both', :groups => [:b] do
38
+ line = __LINE__ - 1
39
+ Pork::Executor[__FILE__].size.should.eq 2
40
+ Pork::Executor['a'] .size.should.eq 1
41
+ Pork::Executor['b'] .size.should.eq 2
42
+ Pork::Executor['b'] .should.eq Pork::Executor[__FILE__]
43
+ Pork::Executor['a,b'] .should.eq Pork::Executor[__FILE__]
44
+ self.class['a'] .should.nil?
45
+ self.class['b'] .size.should.eq 1
46
+
47
+ a, b = Pork::Executor['b'].map{ |path| extract(path, Pork::Executor) }
48
+ expect(a[0]) .eq :would
49
+ expect(a[1]) .eq 'find the corresponding test case'
50
+ expect(a[3]) .eq :groups => [:a, :b]
51
+ expect(b[0]) .eq :would
52
+ expect(b[1]) .eq 'find both'
53
+ expect(b[2].source_location).eq [__FILE__, line]
54
+ expect(b[3]) .eq :groups => [:b]
55
+ end
56
+ end
57
+ end
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: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-19 00:00:00.000000000 Z
11
+ date: 2015-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: muack
@@ -71,6 +71,7 @@ files:
71
71
  - test/test_bacon.rb
72
72
  - test/test_inspect.rb
73
73
  - test/test_nested.rb
74
+ - test/test_pork_test.rb
74
75
  - test/test_readme.rb
75
76
  - test/test_should.rb
76
77
  homepage: https://github.com/godfat/pork
@@ -101,5 +102,6 @@ test_files:
101
102
  - test/test_bacon.rb
102
103
  - test/test_inspect.rb
103
104
  - test/test_nested.rb
105
+ - test/test_pork_test.rb
104
106
  - test/test_readme.rb
105
107
  - test/test_should.rb