aboutsummaryrefslogtreecommitdiffstats
path: root/switchtower/test/scm/cvs_test.rb
diff options
context:
space:
mode:
authorJamis Buck <jamis@37signals.com>2005-08-17 10:13:25 +0000
committerJamis Buck <jamis@37signals.com>2005-08-17 10:13:25 +0000
commit72f50e65ce95a27cb08373256ddd316ba621064e (patch)
tree6d0b9d0b2e69d9e88e3ea594058f1d39efba75d5 /switchtower/test/scm/cvs_test.rb
parentfbba128f73e9a297ca6252c85d3c42b34241ff2f (diff)
downloadrails-72f50e65ce95a27cb08373256ddd316ba621064e.tar.gz
rails-72f50e65ce95a27cb08373256ddd316ba621064e.tar.bz2
rails-72f50e65ce95a27cb08373256ddd316ba621064e.zip
Added CVS module for SwitchTower (very, very experimental!)
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2027 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'switchtower/test/scm/cvs_test.rb')
-rw-r--r--switchtower/test/scm/cvs_test.rb159
1 files changed, 159 insertions, 0 deletions
diff --git a/switchtower/test/scm/cvs_test.rb b/switchtower/test/scm/cvs_test.rb
new file mode 100644
index 0000000000..3df64cce0e
--- /dev/null
+++ b/switchtower/test/scm/cvs_test.rb
@@ -0,0 +1,159 @@
+$:.unshift File.dirname(__FILE__) + "/../../lib"
+
+require File.dirname(__FILE__) + "/../utils"
+require 'test/unit'
+require 'switchtower/scm/cvs'
+
+class ScmCvsTest < Test::Unit::TestCase
+ class CvsTest < SwitchTower::SCM::Cvs
+ attr_accessor :story
+ attr_reader :last_path
+
+ def cvs_log(path)
+ @last_path = path
+ story.shift
+ end
+ end
+
+ class MockChannel
+ attr_reader :sent_data
+
+ def send_data(data)
+ @sent_data ||= []
+ @sent_data << data
+ end
+
+ def [](name)
+ "value"
+ end
+ end
+
+ class MockActor
+ attr_reader :command
+ attr_reader :channels
+ attr_accessor :story
+
+ def initialize(config)
+ @config = config
+ end
+
+ def run(command)
+ @command = command
+ @channels ||= []
+ @channels << MockChannel.new
+ story.each { |stream, line| yield @channels.last, stream, line }
+ end
+
+ def method_missing(sym, *args)
+ @config.send(sym, *args)
+ end
+ end
+
+ def setup
+ @config = MockConfiguration.new
+ @config[:repository] = ":ext:joetester@rubyforge.org:/hello/world"
+ @config[:local] = "/hello/world"
+ @config[:cvs] = "/path/to/cvs"
+ @config[:password] = "chocolatebrownies"
+ @scm = CvsTest.new(@config)
+ @actor = MockActor.new(@config)
+ @log_msg = <<MSG.strip
+RCS file: /var/cvs/copland/copland/LICENSE,v
+Working file: LICENSE
+head: 1.1
+branch:
+locks: strict
+access list:
+keyword substitution: kv
+total revisions: 1; selected revisions: 1
+description:
+----------------------------
+revision 1.1
+date: 2004/08/29 04:23:36; author: minam; state: Exp;
+New implementation.
+=============================================================================
+
+RCS file: /var/cvs/copland/copland/Rakefile,v
+Working file: Rakefile
+head: 1.7
+branch:
+locks: strict
+access list:
+keyword substitution: kv
+total revisions: 7; selected revisions: 1
+description:
+----------------------------
+revision 1.7
+date: 2004/09/15 16:35:01; author: minam; state: Exp; lines: +2 -1
+Rakefile now publishes package documentation from doc/packages instead of
+doc/packrat. Updated "latest updates" in manual.
+=============================================================================
+
+RCS file: /var/cvs/copland/copland/TODO,v
+Working file: TODO
+head: 1.18
+branch:
+locks: strict
+access list:
+keyword substitution: kv
+total revisions: 18; selected revisions: 1
+description:
+----------------------------
+revision 1.18
+date: 2004/10/12 02:21:02; author: minam; state: Exp; lines: +4 -1
+Added RubyConf 2004 presentation.
+=============================================================================
+
+RCS file: /var/cvs/copland/copland/Attic/build-gemspec.rb,v
+Working file: build-gemspec.rb
+head: 1.5
+branch:
+locks: strict
+access list:
+keyword substitution: kv
+total revisions: 5; selected revisions: 1
+description:
+----------------------------
+revision 1.5
+date: 2004/08/29 04:10:17; author: minam; state: dead; lines: +0 -0
+Here we go -- point of no return. Deleting existing implementation to make
+way for new implementation.
+=============================================================================
+
+RCS file: /var/cvs/copland/copland/copland.gemspec,v
+Working file: copland.gemspec
+head: 1.12
+branch:
+locks: strict
+access list:
+keyword substitution: kv
+total revisions: 13; selected revisions: 1
+description:
+----------------------------
+revision 1.12
+date: 2004/09/11 21:45:58; author: minam; state: Exp; lines: +4 -4
+Minor change in how version is communicated to gemspec.
+=============================================================================
+MSG
+ @scm.story = [ @log_msg ]
+ end
+
+ def test_latest_revision
+ @scm.story = [ @log_msg ]
+ assert_equal "2004-10-12T02:21:02", @scm.latest_revision
+ assert_equal "/hello/world", @scm.last_path
+ end
+
+ def test_checkout
+ @actor.story = []
+ assert_nothing_raised { @scm.checkout(@actor) }
+ assert_nil @actor.channels.last.sent_data
+ assert_match %r{/path/to/cvs}, @actor.command
+ end
+
+ def test_checkout_needs_ssh_password
+ @actor.story = [[:out, "joetester@rubyforge.org's password: "]]
+ assert_nothing_raised { @scm.checkout(@actor) }
+ assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
+ end
+end