1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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
|