kagemusha 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/License.txt +54 -0
- data/Manifest.txt +31 -0
- data/README.ja.txt +59 -0
- data/README.txt +64 -0
- data/Rakefile +123 -0
- data/examples/date.rb +19 -0
- data/examples/datetime.rb +22 -0
- data/examples/first.rb +24 -0
- data/examples/rand.rb +22 -0
- data/examples/time.rb +19 -0
- data/lib/kagemusha.rb +10 -0
- data/lib/kagemusha/core.rb +62 -0
- data/lib/kagemusha/date.rb +30 -0
- data/lib/kagemusha/datetime.rb +48 -0
- data/lib/kagemusha/rand.rb +22 -0
- data/lib/kagemusha/time.rb +29 -0
- data/lib/kagemusha/version.rb +17 -0
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/test/test_date.rb +34 -0
- data/test/test_datetime.rb +43 -0
- data/test/test_helper.rb +10 -0
- data/test/test_kagemusha.rb +137 -0
- data/test/test_rand.rb +29 -0
- data/test/test_time.rb +34 -0
- data/website/index.html +72 -0
- data/website/index.txt +25 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +44 -0
- metadata +87 -0
data/History.txt
ADDED
data/License.txt
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
Kagemusha is copyrighted free software by Yuya Kato
|
3
|
+
<yuyakato at gmail dot com> You can redistribute it and/or modify it under
|
4
|
+
either the terms of the GPL or the conditions below:
|
5
|
+
|
6
|
+
1. You may make and give away verbatim copies of the source form of the
|
7
|
+
software without restriction, provided that you duplicate all of the
|
8
|
+
original copyright notices and associated disclaimers.
|
9
|
+
|
10
|
+
2. You may modify your copy of the software in any way, provided that
|
11
|
+
you do at least ONE of the following:
|
12
|
+
|
13
|
+
a) place your modifications in the Public Domain or otherwise make them
|
14
|
+
Freely Available, such as by posting said modifications to Usenet or an
|
15
|
+
equivalent medium, or by allowing the author to include your
|
16
|
+
modifications in the software.
|
17
|
+
|
18
|
+
b) use the modified software only within your corporation or
|
19
|
+
organization.
|
20
|
+
|
21
|
+
c) rename any non-standard executables so the names do not conflict with
|
22
|
+
standard executables, which must also be provided.
|
23
|
+
|
24
|
+
d) make other distribution arrangements with the author.
|
25
|
+
|
26
|
+
3. You may distribute the software in object code or executable
|
27
|
+
form, provided that you do at least ONE of the following:
|
28
|
+
|
29
|
+
a) distribute the executables and library files of the software,
|
30
|
+
together with instructions (in the manual page or equivalent) on where
|
31
|
+
to get the original distribution.
|
32
|
+
|
33
|
+
b) accompany the distribution with the machine-readable source of the
|
34
|
+
software.
|
35
|
+
|
36
|
+
c) give non-standard executables non-standard names, with
|
37
|
+
instructions on where to get the original software distribution.
|
38
|
+
|
39
|
+
d) make other distribution arrangements with the author.
|
40
|
+
|
41
|
+
4. You may modify and include the part of the software into any other
|
42
|
+
software (possibly commercial). But some files in the distribution
|
43
|
+
are not written by the author, so that they are not under this terms.
|
44
|
+
|
45
|
+
5. The scripts and library files supplied as input to or produced as
|
46
|
+
output from the software do not automatically fall under the
|
47
|
+
copyright of the software, but belong to whomever generated them,
|
48
|
+
and may be sold commercially, and may be aggregated with this
|
49
|
+
software.
|
50
|
+
|
51
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
52
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
53
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
54
|
+
PURPOSE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
History.txt
|
2
|
+
License.txt
|
3
|
+
Manifest.txt
|
4
|
+
README.ja.txt
|
5
|
+
README.txt
|
6
|
+
Rakefile
|
7
|
+
examples/date.rb
|
8
|
+
examples/datetime.rb
|
9
|
+
examples/first.rb
|
10
|
+
examples/rand.rb
|
11
|
+
examples/time.rb
|
12
|
+
lib/kagemusha.rb
|
13
|
+
lib/kagemusha/core.rb
|
14
|
+
lib/kagemusha/date.rb
|
15
|
+
lib/kagemusha/datetime.rb
|
16
|
+
lib/kagemusha/rand.rb
|
17
|
+
lib/kagemusha/time.rb
|
18
|
+
lib/kagemusha/version.rb
|
19
|
+
scripts/txt2html
|
20
|
+
setup.rb
|
21
|
+
test/test_date.rb
|
22
|
+
test/test_datetime.rb
|
23
|
+
test/test_helper.rb
|
24
|
+
test/test_kagemusha.rb
|
25
|
+
test/test_rand.rb
|
26
|
+
test/test_time.rb
|
27
|
+
website/index.html
|
28
|
+
website/index.txt
|
29
|
+
website/javascripts/rounded_corners_lite.inc.js
|
30
|
+
website/stylesheets/screen.css
|
31
|
+
website/template.rhtml
|
data/README.ja.txt
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
影武者 - テスト用モック作成支援ライブラリ
|
3
|
+
=========================================
|
4
|
+
|
5
|
+
これって何?
|
6
|
+
-----------
|
7
|
+
|
8
|
+
Rubyでテストコードを記述するための便利ライブラリです。
|
9
|
+
|
10
|
+
例えば日付関係のテストを記述する際にはDate.todayなどの
|
11
|
+
挙動を上書きするなどの手法がありますが、このやり方ですと
|
12
|
+
無駄にグローバル領域を汚染してしまいます。
|
13
|
+
|
14
|
+
ブロックで指定された範囲内のみに限定して基本的なクラスの
|
15
|
+
挙動を上書きするために、このライブラリを作りました。
|
16
|
+
|
17
|
+
例:
|
18
|
+
require "kagemusha"
|
19
|
+
|
20
|
+
musha = Kagemusha.new(Time)
|
21
|
+
musha.defs(:now) { self.local(2000, 1, 1) }
|
22
|
+
musha.def(:to_s) { self.strftime("%Y-%m-%d") }
|
23
|
+
|
24
|
+
musha.swap {
|
25
|
+
p Time.now #=> Sat Jan 01 00:00:00 +0900 2000
|
26
|
+
p Time.now.to_s #=> "2000-01-01"
|
27
|
+
}
|
28
|
+
|
29
|
+
なお、よく使うと思われるDate、Time、randなどに対するモックを
|
30
|
+
いくつか標準で用意されています。
|
31
|
+
|
32
|
+
例:
|
33
|
+
require "kagemusha/date"
|
34
|
+
|
35
|
+
musha = Kagemusha::Date.at(2000, 1, 1)
|
36
|
+
musha.swap {
|
37
|
+
p Date.today.to_s #=> "2000-01-01"
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
インストール
|
42
|
+
------------
|
43
|
+
|
44
|
+
Gemでインストールしてください。
|
45
|
+
|
46
|
+
$ gem install kagemusha
|
47
|
+
|
48
|
+
|
49
|
+
利用例
|
50
|
+
------
|
51
|
+
|
52
|
+
exampleディレクトリを見てください。
|
53
|
+
|
54
|
+
|
55
|
+
サポート
|
56
|
+
--------
|
57
|
+
|
58
|
+
何かありましたら下記までお願いします。
|
59
|
+
加藤 勇也 (Yuya Kato) <yuyakato at gmail.com>
|
data/README.txt
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
Kagemusha - a library of testing mock-objects
|
3
|
+
=============================================
|
4
|
+
|
5
|
+
Welcome to Kagemusha
|
6
|
+
--------------------
|
7
|
+
|
8
|
+
Kagemusha is a library of helper functions
|
9
|
+
for testing Ruby scripts. It helps you generating
|
10
|
+
scoped mock-objects which overrides behavior of
|
11
|
+
the class restricted in given blocks, without
|
12
|
+
tainting a global area.
|
13
|
+
|
14
|
+
For example, if you override Date.today when you write
|
15
|
+
something about dates, then the code will taint global
|
16
|
+
areas to no purpose.
|
17
|
+
|
18
|
+
If you use Kagemusha, the test code will override
|
19
|
+
behavior of the class restricted in given block.
|
20
|
+
|
21
|
+
Example:
|
22
|
+
require "kagemusha"
|
23
|
+
|
24
|
+
musha = Kagemusha.new(Time)
|
25
|
+
musha.defs(:now) { self.local(2000, 1, 1) }
|
26
|
+
musha.def(:to_s) { self.strftime("%Y-%m-%d") }
|
27
|
+
|
28
|
+
musha.swap {
|
29
|
+
p Time.now #=> Sat Jan 01 00:00:00 +0900 2000
|
30
|
+
p Time.now.to_s #=> "2000-01-01"
|
31
|
+
}
|
32
|
+
|
33
|
+
Also, it has default useful mock-objects set Date, Time,
|
34
|
+
rand, and so on.
|
35
|
+
|
36
|
+
Example:
|
37
|
+
require "kagemusha/date"
|
38
|
+
|
39
|
+
musha = Kagemusha::Date.at(2000, 1, 1)
|
40
|
+
musha.swap {
|
41
|
+
p Date.today.to_s #=> "2000-01-01"
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
Installation
|
46
|
+
------------
|
47
|
+
|
48
|
+
The easiest way to get started with Kagemusha is to
|
49
|
+
install it via RubyGems. You can do this easily:
|
50
|
+
|
51
|
+
$ gem install kagemusha
|
52
|
+
|
53
|
+
|
54
|
+
Examples
|
55
|
+
--------
|
56
|
+
|
57
|
+
see example directory.
|
58
|
+
|
59
|
+
|
60
|
+
Support
|
61
|
+
--------
|
62
|
+
|
63
|
+
Feel free to mail me:
|
64
|
+
Yuya Kato <yuyakato at gmail.com>
|
data/Rakefile
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'hoe'
|
11
|
+
|
12
|
+
include FileUtils
|
13
|
+
require File.join(File.dirname(__FILE__), 'lib', 'kagemusha', 'version')
|
14
|
+
|
15
|
+
AUTHOR = "Yuya Kato" # can also be an array of Authors
|
16
|
+
EMAIL = "yuyakato at gmail.com"
|
17
|
+
DESCRIPTION = "Kagemusha is a library of helper functions for testing Ruby scripts."
|
18
|
+
GEM_NAME = "kagemusha" # what ppl will type to install your gem
|
19
|
+
|
20
|
+
@config_file = "~/.rubyforge/user-config.yml"
|
21
|
+
@config = nil
|
22
|
+
def rubyforge_username
|
23
|
+
unless @config
|
24
|
+
begin
|
25
|
+
@config = YAML.load(File.read(File.expand_path(@config_file)))
|
26
|
+
rescue
|
27
|
+
puts <<-EOS
|
28
|
+
ERROR: No rubyforge config file found: #{@config_file}"
|
29
|
+
Run 'rubyforge setup' to prepare your env for access to Rubyforge
|
30
|
+
- See http://newgem.rubyforge.org/rubyforge.html for more details
|
31
|
+
EOS
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@rubyforge_username ||= @config["username"]
|
36
|
+
end
|
37
|
+
|
38
|
+
RUBYFORGE_PROJECT = 'kagemusha' # The unix name for your project
|
39
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
40
|
+
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
41
|
+
|
42
|
+
NAME = "kagemusha"
|
43
|
+
REV = nil
|
44
|
+
# UNCOMMENT IF REQUIRED:
|
45
|
+
# REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
|
46
|
+
VERS = Kagemusha::VERSION::STRING + (REV ? ".#{REV}" : "")
|
47
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
|
48
|
+
RDOC_OPTS = ['--quiet', '--title', 'kagemusha documentation',
|
49
|
+
"--opname", "index.html",
|
50
|
+
"--line-numbers",
|
51
|
+
"--main", "README",
|
52
|
+
"--inline-source"]
|
53
|
+
|
54
|
+
class Hoe
|
55
|
+
def extra_deps
|
56
|
+
@extra_deps.reject { |x| Array(x).first == 'hoe' }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Generate all the Rake tasks
|
61
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
62
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
63
|
+
p.author = AUTHOR
|
64
|
+
p.description = DESCRIPTION
|
65
|
+
p.email = EMAIL
|
66
|
+
p.summary = DESCRIPTION
|
67
|
+
p.url = HOMEPATH
|
68
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
69
|
+
p.test_globs = ["test/**/test_*.rb"]
|
70
|
+
p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
|
71
|
+
|
72
|
+
# == Optional
|
73
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
74
|
+
#p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
75
|
+
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
76
|
+
end
|
77
|
+
|
78
|
+
CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
|
79
|
+
PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
80
|
+
hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
|
81
|
+
|
82
|
+
desc 'Generate website files'
|
83
|
+
task :website_generate do
|
84
|
+
Dir['website/**/*.txt'].each do |txt|
|
85
|
+
sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
desc 'Upload website files to rubyforge'
|
90
|
+
task :website_upload do
|
91
|
+
host = "#{rubyforge_username}@rubyforge.org"
|
92
|
+
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
93
|
+
local_dir = 'website'
|
94
|
+
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
95
|
+
end
|
96
|
+
|
97
|
+
desc 'Generate and upload website files'
|
98
|
+
task :website => [:website_generate, :website_upload, :publish_docs]
|
99
|
+
|
100
|
+
desc 'Release the website and new gem version'
|
101
|
+
task :deploy => [:check_version, :website, :release] do
|
102
|
+
puts "Remember to create SVN tag:"
|
103
|
+
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
104
|
+
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
105
|
+
puts "Suggested comment:"
|
106
|
+
puts "Tagging release #{CHANGES}"
|
107
|
+
end
|
108
|
+
|
109
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
110
|
+
task :local_deploy => [:website_generate, :install_gem]
|
111
|
+
|
112
|
+
task :check_version do
|
113
|
+
unless ENV['VERSION']
|
114
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
115
|
+
exit
|
116
|
+
end
|
117
|
+
unless ENV['VERSION'] == VERS
|
118
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
119
|
+
exit
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
data/examples/date.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
# $Id: date.rb 26 2007-08-15 14:22:25Z yuyakato $
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "kagemusha/date"
|
6
|
+
|
7
|
+
musha = Kagemusha::Date.on(2007, 1, 1)
|
8
|
+
|
9
|
+
p Date.today.strftime("%Y-%m-%d")
|
10
|
+
|
11
|
+
puts "---"
|
12
|
+
|
13
|
+
musha.swap {
|
14
|
+
p Date.today.strftime("%Y-%m-%d")
|
15
|
+
}
|
16
|
+
|
17
|
+
puts "---"
|
18
|
+
|
19
|
+
p Date.today.strftime("%Y-%m-%d")
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# $Id: datetime.rb 26 2007-08-15 14:22:25Z yuyakato $
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "kagemusha/datetime"
|
6
|
+
|
7
|
+
musha = Kagemusha::DateTime.at(1984, 5, 11, 5, 15, 30)
|
8
|
+
|
9
|
+
p Date.today.strftime("%Y-%m-%d")
|
10
|
+
p Time.now
|
11
|
+
|
12
|
+
puts "---"
|
13
|
+
|
14
|
+
musha.swap {
|
15
|
+
p Date.today.strftime("%Y-%m-%d")
|
16
|
+
p Time.now
|
17
|
+
}
|
18
|
+
|
19
|
+
puts "---"
|
20
|
+
|
21
|
+
p Date.today.strftime("%Y-%m-%d")
|
22
|
+
p Time.now
|
data/examples/first.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
# $Id: first.rb 25 2007-08-15 14:18:09Z yuyakato $
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "kagemusha"
|
6
|
+
|
7
|
+
musha = Kagemusha.new(Time)
|
8
|
+
musha.defs(:now) { self.local(1984, 5, 11) }
|
9
|
+
musha.def(:+) { |other| other }
|
10
|
+
|
11
|
+
p Time.now
|
12
|
+
p Time.now + 60 * 60 * 24
|
13
|
+
|
14
|
+
puts "---"
|
15
|
+
|
16
|
+
musha.swap {
|
17
|
+
p Time.now
|
18
|
+
p Time.now + 60 * 60 * 24
|
19
|
+
}
|
20
|
+
|
21
|
+
puts "---"
|
22
|
+
|
23
|
+
p Time.now
|
24
|
+
p Time.now + 60 * 60 * 24
|
data/examples/rand.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# $Id: rand.rb 26 2007-08-15 14:22:25Z yuyakato $
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "kagemusha/rand"
|
6
|
+
|
7
|
+
musha = Kagemusha::Rand.always(1)
|
8
|
+
|
9
|
+
p rand(5)
|
10
|
+
p rand(5)
|
11
|
+
|
12
|
+
puts "---"
|
13
|
+
|
14
|
+
musha.swap {
|
15
|
+
p rand(5)
|
16
|
+
p rand(5)
|
17
|
+
}
|
18
|
+
|
19
|
+
puts "---"
|
20
|
+
|
21
|
+
p rand(5)
|
22
|
+
p rand(5)
|
data/examples/time.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
# $Id: time.rb 26 2007-08-15 14:22:25Z yuyakato $
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "kagemusha/time"
|
6
|
+
|
7
|
+
musha = Kagemusha::Time.at(2007, 1, 1)
|
8
|
+
|
9
|
+
p Time.now
|
10
|
+
|
11
|
+
puts "---"
|
12
|
+
|
13
|
+
musha.swap {
|
14
|
+
p Time.now
|
15
|
+
}
|
16
|
+
|
17
|
+
puts "---"
|
18
|
+
|
19
|
+
p Time.now
|