test_friends 0.0.1
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/.gitignore +17 -0
- data/.travis.yml +5 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +30 -0
- data/Rakefile +9 -0
- data/lib/test_friends/resolv_error_stub.rb +34 -0
- data/lib/test_friends/tempfile.rb +101 -0
- data/lib/test_friends/version.rb +3 -0
- data/lib/test_friends.rb +6 -0
- data/test/test_friends/test_resolv_error_stub.rb +12 -0
- data/test/test_friends/test_tempfile.rb +48 -0
- data/test_friends.gemspec +23 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 25d61630b0e5b3ffcb5c97a49aed2748aea7ef22
|
4
|
+
data.tar.gz: a81f771ebe3a2704a7274d9054f2030530e5367a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5360dcbba296bfef17ea3a24fa3149688a4bcfa47c4a8ed9239972630af9cbc1bb6fd098df287b0bab0592e6856457aed17ecc55d7dc35da3ba32241a2460c8e
|
7
|
+
data.tar.gz: e9ae4a3c868f582c048810bb699cfc03a6ff405ecb28a4bf9aecfae76cd2f03cd672a241df39951039ad0f1508e93e7d2c3ccef8c0e8c51bbf40be294bc7e141
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 sunaot
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# TestFriends [](https://travis-ci.org/sunaot/test_friends)
|
2
|
+
|
3
|
+
TestFriends gem is a library bundle to help your unit testing.
|
4
|
+
|
5
|
+
It includes following modules.
|
6
|
+
|
7
|
+
* TestFriends::ResolvErrorStub: to force Resolv to raise error exception.
|
8
|
+
* TestFriends::Tempfile: Real file stub with auto cleanup and Pathname like APIs.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
gem 'test_friends'
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install test_friends
|
23
|
+
|
24
|
+
## Contributing
|
25
|
+
|
26
|
+
1. Fork it
|
27
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
28
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
29
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
30
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'resolv'
|
2
|
+
|
3
|
+
module TestFriends
|
4
|
+
module ResolvErrorStub
|
5
|
+
def force_resolv_error &block
|
6
|
+
original_resolver = ::Resolv::DefaultResolver
|
7
|
+
replace_resolver ErrorResolv.new
|
8
|
+
begin
|
9
|
+
block.call
|
10
|
+
ensure
|
11
|
+
replace_resolver original_resolver
|
12
|
+
end
|
13
|
+
end
|
14
|
+
alias_method :force_resolve_error, :force_resolv_error
|
15
|
+
|
16
|
+
private
|
17
|
+
def replace_resolver new_resolver
|
18
|
+
current = $VERBOSE
|
19
|
+
$VERBOSE = nil # to ignore const redefined warning
|
20
|
+
::Resolv.const_set(:DefaultResolver, new_resolver)
|
21
|
+
$VERBOSE = current
|
22
|
+
end
|
23
|
+
|
24
|
+
class ErrorResolv
|
25
|
+
PublicAPIs = ::Resolv.new.public_methods(false)
|
26
|
+
def raise_error *args
|
27
|
+
raise ::Resolv::ResolvError
|
28
|
+
end
|
29
|
+
|
30
|
+
PublicAPIs.each {|method| alias_method method, :raise_error }
|
31
|
+
private :raise_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'tmpdir'
|
3
|
+
require 'pathname'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'forwardable'
|
6
|
+
|
7
|
+
module TestFriends
|
8
|
+
class Tempfile
|
9
|
+
extend Forwardable
|
10
|
+
def_delegators '@path',
|
11
|
+
*%w(
|
12
|
+
basename dirname extname parent
|
13
|
+
open read close sysopen truncate
|
14
|
+
atime mtime ctime utime
|
15
|
+
exist? file? directory? symlink? zero? ftype stat
|
16
|
+
chmod chown delete unlink mkpath mkdir rename rmtree
|
17
|
+
to_s
|
18
|
+
)
|
19
|
+
|
20
|
+
def initialize options = {}
|
21
|
+
opt = { :extname => nil, :filename => nil, }.merge(options)
|
22
|
+
dir = Dir.mktmpdir
|
23
|
+
if opt[:filename] then
|
24
|
+
file = create_tempfile_by_name dir, opt[:filename]
|
25
|
+
elsif opt[:extname] then
|
26
|
+
file = create_tempfile_with_extname dir, opt[:extname]
|
27
|
+
else
|
28
|
+
file = create_tempfile dir
|
29
|
+
end
|
30
|
+
ObjectSpace.define_finalizer self, Destructor.new(dir)
|
31
|
+
@path = Pathname.new file.path
|
32
|
+
@tempfile = file
|
33
|
+
@dir = Pathname.new dir
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_path
|
37
|
+
@path
|
38
|
+
end
|
39
|
+
|
40
|
+
def touch mtime = Time.now, nocreate = false
|
41
|
+
FileUtils.touch self.to_s, { :mtime => mtime, :nocreate => nocreate }
|
42
|
+
end
|
43
|
+
|
44
|
+
def teardown
|
45
|
+
@tempfile.close!
|
46
|
+
@dir.rmtree if @dir.exist?
|
47
|
+
ObjectSpace.undefine_finalizer self
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def create_tempfile tmpdir
|
52
|
+
::Tempfile.new('', tmpdir)
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_tempfile_by_name tmpdir, filename
|
56
|
+
new_file = Pathname.new(tmpdir) + filename
|
57
|
+
FileUtils.touch new_file.to_s
|
58
|
+
behave_like_tempfile new_file
|
59
|
+
new_file
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_tempfile_with_extname tmpdir, extname
|
63
|
+
::Tempfile.new([nil, extname], tmpdir)
|
64
|
+
end
|
65
|
+
|
66
|
+
def behave_like_tempfile path
|
67
|
+
ObjectSpace.define_finalizer path, Tempfile.destructor(path)
|
68
|
+
class << path
|
69
|
+
def path
|
70
|
+
self.to_path
|
71
|
+
end
|
72
|
+
|
73
|
+
def close!
|
74
|
+
self.delete if self.exist?
|
75
|
+
ObjectSpace.undefine_finalizer self
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def Tempfile.destructor path
|
81
|
+
proc { path.delete if path.exist? }
|
82
|
+
end
|
83
|
+
|
84
|
+
class Destructor
|
85
|
+
def initialize dirname
|
86
|
+
@pid = Process.pid
|
87
|
+
@dir = Pathname.new dirname
|
88
|
+
end
|
89
|
+
|
90
|
+
def call *args
|
91
|
+
return if @pid != Process.pid
|
92
|
+
STDERR.print "removing ", @dir.to_s, "..." if $DEBUG
|
93
|
+
begin
|
94
|
+
@dir.rmtree
|
95
|
+
rescue Errno::ENOENT
|
96
|
+
end
|
97
|
+
STDERR.print "done\n" if $DEBUG
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/lib/test_friends.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'test_friends/resolv_error_stub'
|
3
|
+
|
4
|
+
class ResolvErrorStubTest < Minitest::Test
|
5
|
+
include TestFriends::ResolvErrorStub
|
6
|
+
|
7
|
+
def test_force_resolv_error
|
8
|
+
force_resolv_error do
|
9
|
+
assert_raises(Resolv::ResolvError) { Resolv.getaddresses 'www.example.com' }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'test_friends/tempfile'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
class TempfileTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@file = TestFriends::Tempfile.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
@file.teardown
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_create_with_filename
|
15
|
+
file = TestFriends::Tempfile.new :filename => 'sample.file'
|
16
|
+
assert_equal('sample.file', file.basename.to_s)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_create_with_extname
|
20
|
+
file = TestFriends::Tempfile.new :extname => '.md'
|
21
|
+
assert_equal('.md', file.extname)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_create_with_no_option
|
25
|
+
assert @file.file?
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_write_file
|
29
|
+
@file.open('w') {|f| f.write('hello, world') }
|
30
|
+
assert_equal 'hello, world', @file.read
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_remove_parent_dir
|
34
|
+
@file.parent.rmtree
|
35
|
+
assert !@file.exist?
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_set_mtime
|
39
|
+
a_time = Time.parse('2013/09/22 18:14:30')
|
40
|
+
@file.utime a_time, a_time
|
41
|
+
assert_equal 22, @file.mtime.day
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_set_mtime_by_touch
|
45
|
+
@file.touch Time.parse('2013/09/22 18:14:30')
|
46
|
+
assert_equal 22, @file.mtime.day
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'test_friends/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "test_friends"
|
8
|
+
spec.version = TestFriends::VERSION
|
9
|
+
spec.authors = ["sunaot"]
|
10
|
+
spec.email = ["sunao.tanabe@gmail.com"]
|
11
|
+
spec.description = %q{Helpful tools for unit testing}
|
12
|
+
spec.summary = %q{TestFriends gem is a library bundle to help your unit testing.}
|
13
|
+
spec.homepage = "https://github.com/sunaot/test_friends"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: test_friends
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- sunaot
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Helpful tools for unit testing
|
42
|
+
email:
|
43
|
+
- sunao.tanabe@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- ".travis.yml"
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- lib/test_friends.rb
|
55
|
+
- lib/test_friends/resolv_error_stub.rb
|
56
|
+
- lib/test_friends/tempfile.rb
|
57
|
+
- lib/test_friends/version.rb
|
58
|
+
- test/test_friends/test_resolv_error_stub.rb
|
59
|
+
- test/test_friends/test_tempfile.rb
|
60
|
+
- test_friends.gemspec
|
61
|
+
homepage: https://github.com/sunaot/test_friends
|
62
|
+
licenses:
|
63
|
+
- MIT
|
64
|
+
metadata: {}
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 2.2.2
|
82
|
+
signing_key:
|
83
|
+
specification_version: 4
|
84
|
+
summary: TestFriends gem is a library bundle to help your unit testing.
|
85
|
+
test_files:
|
86
|
+
- test/test_friends/test_resolv_error_stub.rb
|
87
|
+
- test/test_friends/test_tempfile.rb
|
88
|
+
has_rdoc:
|