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 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
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'minitest'
7
+ end
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 [![Build Status](https://travis-ci.org/sunaot/test_friends.png?branch=master)](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,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task 'default' => 'test'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'test/lib'
8
+ t.test_files = FileList['test/**/test_*.rb']
9
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module TestFriends
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "test_friends/version"
2
+ require "test_friends/resolv_error_stub"
3
+ require "test_friends/tempfile"
4
+
5
+ module TestFriends
6
+ end
@@ -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: