bob-test 0.0.2

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.
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2009 Nicolás Sanguinetti <http://nicolassanguinetti.info>
2
+ Copyright (c) 2009 Simon Rozet <http://atonie.org>
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ 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
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1 @@
1
+ See 4c8296ec4f50c92686e4fa9cd7006b4780a9ddbb for details.
@@ -0,0 +1,9 @@
1
+ task :default do
2
+ ruby "-Ilib test/bob_test_test.rb"
3
+ end
4
+
5
+ begin
6
+ require "mg"
7
+ MG.new("bob-test.gemspec")
8
+ rescue LoadError
9
+ end
@@ -0,0 +1,4 @@
1
+ require "bob"
2
+ require "bob/test/buildable_stub"
3
+ require "bob/test/scm/git"
4
+ require "bob/test/scm/svn"
@@ -0,0 +1,37 @@
1
+ module Bob::Test
2
+ BuildableStub = Struct.new(:scm, :uri, :branch, :build_script) do
3
+ include Bob::Buildable
4
+
5
+ attr_reader :repo, :builds, :metadata
6
+
7
+ def self.call(repo)
8
+ scm = (Bob::Test::GitRepo === repo) ? :git : :svn
9
+ uri =
10
+ if scm == :git
11
+ repo.path
12
+ else
13
+ "file://#{SvnRepo.server_root}/#{repo.name}"
14
+ end
15
+ # move to repo
16
+ branch = (scm == :git) ? "master" : ""
17
+ build_script = "./test"
18
+
19
+ new(scm, uri, branch, build_script)
20
+ end
21
+
22
+ def initialize(*args)
23
+ super
24
+
25
+ @builds = {}
26
+ @metadata = {}
27
+ end
28
+
29
+ def start_building(commit_id, commit_info)
30
+ @metadata[commit_id] = commit_info
31
+ end
32
+
33
+ def finish_building(commit_id, status, output)
34
+ @builds[commit_id] = [status ? :successful : :failed, output]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,66 @@
1
+ module Bob::Test
2
+ class AbstractSCMRepo
3
+ attr_reader :path, :name
4
+
5
+ def initialize(name, base_dir=Bob.directory)
6
+ @name = name
7
+ @path = File.join(base_dir, @name.to_s)
8
+ end
9
+
10
+ def destroy
11
+ FileUtils.rm_r path if File.directory?(path)
12
+ end
13
+
14
+ def add_commit(message, &action)
15
+ Dir.chdir(path) do
16
+ yield action
17
+ commit(message)
18
+ end
19
+ end
20
+
21
+ def add_failing_commit
22
+ add_commit "This commit will fail" do
23
+ system "echo '#{build_script(false)}' > test"
24
+ system "chmod +x test"
25
+ add "test"
26
+ end
27
+ end
28
+
29
+ def add_successful_commit
30
+ add_commit "This commit will work" do
31
+ system "echo '#{build_script(true)}' > test"
32
+ system "chmod +x test"
33
+ add "test"
34
+ end
35
+ end
36
+
37
+ def commits
38
+ raise NotImplementedError
39
+ end
40
+
41
+ def head
42
+ commits.last[:identifier]
43
+ end
44
+
45
+ protected
46
+ def add(file)
47
+ raise NotImplementedError
48
+ end
49
+
50
+ def commit(message)
51
+ raise NotImplementedError
52
+ end
53
+
54
+ def run(command)
55
+ system "#{command} &>/dev/null"
56
+ end
57
+
58
+ def build_script(successful=true)
59
+ <<-script
60
+ #!/bin/sh
61
+ echo "Running tests..."
62
+ exit #{successful ? 0 : 1}
63
+ script
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + "/abstract"
2
+
3
+ module Bob::Test
4
+ class GitRepo < AbstractSCMRepo
5
+ def create
6
+ FileUtils.mkdir_p(path)
7
+
8
+ Dir.chdir(path) do
9
+ run "git init"
10
+ run "git config user.name 'John Doe'"
11
+ run "git config user.email 'johndoe@example.org'"
12
+ run "echo 'just a test repo' >> README"
13
+ add "README"
14
+ commit "First commit"
15
+ end
16
+ end
17
+
18
+ def commits
19
+ Dir.chdir(path) do
20
+ commits = `git log --pretty=oneline`.collect { |l| l.split(" ").first }
21
+ commits.inject([]) do |commits, sha1|
22
+ format = "---%n:message: >-%n %s%n:timestamp: %ci%n" +
23
+ ":identifier: %H%n:author: %n :name: %an%n :email: %ae%n"
24
+ commits << YAML.load(`git show -s --pretty=format:"#{format}" #{sha1}`)
25
+ end.reverse
26
+ end
27
+ end
28
+
29
+ def head
30
+ Dir.chdir(path) do
31
+ `git log --pretty=format:%H | head -1`.chomp
32
+ end
33
+ end
34
+
35
+ def short_head
36
+ head[0..6]
37
+ end
38
+
39
+ protected
40
+ def add(file)
41
+ run "git add #{file}"
42
+ end
43
+
44
+ def commit(message)
45
+ run %Q{git commit -m "#{message}"}
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + "/abstract"
2
+ require "hpricot"
3
+
4
+ module Bob::Test
5
+ class SvnRepo < AbstractSCMRepo
6
+ def self.server_root
7
+ @root ||= File.join(Bob.directory, "svn")
8
+ end
9
+
10
+ attr_reader :remote
11
+
12
+ def initialize(name, base_dir=Bob.directory)
13
+ super
14
+
15
+ @path = File.join(base_dir, "svn-#{name}")
16
+ @remote = File.join(SvnRepo.server_root, name.to_s)
17
+ end
18
+
19
+ def create
20
+ create_remote
21
+
22
+ run "svn checkout file://#{remote} #{path}"
23
+
24
+ add_commit("First commit") do
25
+ run "echo 'just a test repo' >> README"
26
+ add "README"
27
+ end
28
+ end
29
+
30
+ def destroy
31
+ FileUtils.rm_r(remote) if File.directory?(remote)
32
+ super
33
+ end
34
+
35
+ def commits
36
+ Dir.chdir(path) do
37
+ doc = Hpricot::XML(`svn log --xml`)
38
+
39
+ (doc/:log/:logentry).inject([]) { |commits, commit|
40
+ commits << { :identifier => commit["revision"],
41
+ :message => commit.at("msg").inner_html,
42
+ :committed_at => Time.parse(commit.at("date").inner_html) }
43
+ }.reverse
44
+ end
45
+ end
46
+
47
+ alias_method :short_head, :head
48
+
49
+ protected
50
+ def add(file)
51
+ run "svn add #{file}"
52
+ end
53
+
54
+ def commit(message)
55
+ run %Q{svn commit -m "#{message}"}
56
+ run "svn up"
57
+ end
58
+
59
+ private
60
+ def create_remote
61
+ FileUtils.mkdir_p(SvnRepo.server_root)
62
+
63
+ run "svnadmin create #{remote}"
64
+
65
+ File.open(File.join(remote, "conf", "svnserve.conf"), "w") { |f|
66
+ f.puts "[general]"
67
+ f.puts "anon-access = write"
68
+ f.puts "auth-access = write"
69
+ }
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,67 @@
1
+ require "test/unit"
2
+ require "bob/test"
3
+
4
+ class BobTestTest < Test::Unit::TestCase
5
+ include Bob::Test
6
+
7
+ def assert_scm_repo(repo)
8
+ repo.destroy
9
+ repo.create
10
+
11
+ assert_equal 1, repo.commits.size
12
+ assert_equal "First commit", repo.commits.first[:message]
13
+
14
+ repo.add_failing_commit
15
+ assert_equal 2, repo.commits.size
16
+ assert_equal "This commit will fail", repo.commits.last[:message]
17
+ assert_equal repo.commits.last[:identifier], repo.head
18
+ assert repo.short_head
19
+
20
+ repo.add_successful_commit
21
+ assert_equal 3, repo.commits.size
22
+ assert_equal "This commit will work", repo.commits.last[:message]
23
+ assert_equal repo.commits.last[:identifier], repo.head
24
+ end
25
+
26
+ def test_buildable_stub
27
+ b = BuildableStub.new(:git, "git://github.com/ry/node", "master", "make")
28
+
29
+ assert_equal :git, b.scm
30
+ assert_equal "git://github.com/ry/node", b.uri
31
+ assert_equal "master", b.branch
32
+ assert_equal "make", b.build_script
33
+ end
34
+
35
+ def test_scm_repo
36
+ assert_scm_repo(GitRepo.new(:my_test_project))
37
+ assert_scm_repo(SvnRepo.new(:my_test_project))
38
+ end
39
+
40
+ def test_buildable_git_repo
41
+ Bob.directory = "/tmp/bob-git"
42
+
43
+ repo = GitRepo.new(:test_repo)
44
+ repo.destroy
45
+ repo.create
46
+
47
+ b = BuildableStub.call(repo)
48
+ assert_equal :git, b.scm
49
+ assert_equal "/tmp/bob-git/test_repo", b.uri
50
+ assert_equal "master", b.branch
51
+ assert_equal "./test", b.build_script
52
+ end
53
+
54
+ def test_buildable_svn_repo
55
+ Bob.directory = "/tmp/bob-svn"
56
+
57
+ repo = SvnRepo.new(:test_repo)
58
+ repo.destroy
59
+ repo.create
60
+
61
+ b = BuildableStub.call(repo)
62
+ assert_equal :svn, b.scm
63
+ assert_equal "", b.branch
64
+ assert_equal "./test", b.build_script
65
+ assert_equal "file:///tmp/bob-svn/svn/test_repo", b.uri
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bob-test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - "Nicol\xC3\xA1s Sanguinetti"
8
+ - Simon Rozet
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-06-01 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bob
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: hpricot
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ version:
36
+ description: test helpers shared among Bob, Bobette and Integrity
37
+ email: info@integrityapp.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - LICENSE
46
+ - README.md
47
+ - Rakefile
48
+ - lib/bob/test.rb
49
+ - lib/bob/test/buildable_stub.rb
50
+ - lib/bob/test/scm/abstract.rb
51
+ - lib/bob/test/scm/git.rb
52
+ - lib/bob/test/scm/svn.rb
53
+ - test/bob_test_test.rb
54
+ has_rdoc: true
55
+ homepage: http://integrityapp.com
56
+ licenses: []
57
+
58
+ post_install_message:
59
+ rdoc_options: []
60
+
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ requirements: []
76
+
77
+ rubyforge_project: integrity
78
+ rubygems_version: 1.3.3
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: test helpers shared among Bob, Bobette and Integrity
82
+ test_files: []
83
+