pvn 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.
- data/README.markdown +38 -0
- data/bin/pvn +12 -0
- data/bin/pvndiff +10 -0
- data/lib/pvn/app.rb +144 -0
- data/lib/pvn/base/textlines.rb +35 -0
- data/lib/pvn/base/util.rb +14 -0
- data/lib/pvn/cmddoc.rb +77 -0
- data/lib/pvn/config.rb +65 -0
- data/lib/pvn/describe.rb +40 -0
- data/lib/pvn/diff/diffcmd.rb +49 -0
- data/lib/pvn/diff/differ.rb +67 -0
- data/lib/pvn/diff/diffopts.rb +58 -0
- data/lib/pvn/doc.rb +34 -0
- data/lib/pvn/io/element.rb +113 -0
- data/lib/pvn/io/fselement.rb +22 -0
- data/lib/pvn/log/formatter/color_formatter.rb +29 -0
- data/lib/pvn/log/formatter/entries_formatter.rb +33 -0
- data/lib/pvn/log/formatter/entry_formatter.rb +57 -0
- data/lib/pvn/log/formatter/log_formatter.rb +59 -0
- data/lib/pvn/log/formatter/message_formatter.rb +19 -0
- data/lib/pvn/log/formatter/path_formatter.rb +41 -0
- data/lib/pvn/log/formatter/summary_formatter.rb +49 -0
- data/lib/pvn/log/logcmd.rb +136 -0
- data/lib/pvn/log/logentry.rb +116 -0
- data/lib/pvn/log/logfactory.rb +101 -0
- data/lib/pvn/log/logoptions.rb +43 -0
- data/lib/pvn/pct/linecount.rb +33 -0
- data/lib/pvn/pct/pctcmd.rb +204 -0
- data/lib/pvn/pct/statcmd.rb +13 -0
- data/lib/pvn/revision/entry.rb +94 -0
- data/lib/pvn/revision.rb +119 -0
- data/lib/pvn/subcommands/base/clargs.rb +53 -0
- data/lib/pvn/subcommands/base/command.rb +60 -0
- data/lib/pvn/subcommands/base/doc.rb +94 -0
- data/lib/pvn/subcommands/base/options.rb +22 -0
- data/lib/pvn/subcommands/log/command.rb +70 -0
- data/lib/pvn/subcommands/log/options.rb +43 -0
- data/lib/pvn/subcommands/pct/clargs.rb +33 -0
- data/lib/pvn/subcommands/pct/command.rb +57 -0
- data/lib/pvn/subcommands/revision/multiple_revisions_option.rb +43 -0
- data/lib/pvn/subcommands/revision/revision_option.rb +74 -0
- data/lib/pvn/subcommands/revision/revision_regexp_option.rb +39 -0
- data/lib/pvn/svn/command/svncmd.rb +39 -0
- data/lib/pvn/svn/environment.rb +23 -0
- data/lib/pvn/svn/svnelement.rb +89 -0
- data/lib/pvn/svn/svninfo.rb +42 -0
- data/lib/pvn/svn/svnroot.rb +29 -0
- data/lib/pvn/upp/uppcmd.rb +112 -0
- data/lib/pvn/wherecmd.rb +55 -0
- data/lib/pvn.rb +8 -0
- data/lib/svnx/command.rb +60 -0
- data/lib/svnx/entry.rb +34 -0
- data/lib/svnx/info/command.rb +21 -0
- data/lib/svnx/info/entries.rb +27 -0
- data/lib/svnx/info/entry.rb +34 -0
- data/lib/svnx/log/command.rb +93 -0
- data/lib/svnx/log/entries.rb +57 -0
- data/lib/svnx/log/entry.rb +54 -0
- data/lib/svnx/status/command.rb +21 -0
- data/lib/svnx/status/entries.rb +22 -0
- data/lib/svnx/status/entry.rb +33 -0
- data/lib/synoption/base_option.rb +149 -0
- data/lib/synoption/boolean_option.rb +21 -0
- data/lib/synoption/doc.rb +81 -0
- data/lib/synoption/fixnum_option.rb +13 -0
- data/lib/synoption/match.rb +47 -0
- data/lib/synoption/option.rb +10 -0
- data/lib/synoption/optionable.rb +66 -0
- data/lib/synoption/set.rb +114 -0
- data/lib/system/cachecmd.rb +65 -0
- data/lib/system/cmdexec.rb +13 -0
- data/lib/system/cmdline.rb +70 -0
- data/lib/system/command/arg.rb +12 -0
- data/lib/system/command/cachefile.rb +39 -0
- data/lib/system/command/caching.rb +36 -0
- data/lib/system/command/line.rb +47 -0
- data/lib/system/command.rb +72 -0
- data/test/integration/svnx/log/test.rb +43 -0
- data/test/unit/pvn/app_test.rb +22 -0
- data/test/unit/pvn/io/element/log/log_test.rb +35 -0
- data/test/unit/pvn/log/formatter/entry_formatter_test.rb +90 -0
- data/test/unit/pvn/revision/entry_test.rb +123 -0
- data/test/unit/pvn/subcommands/log/command_test.rb +22 -0
- data/test/unit/pvn/subcommands/log/options_test.rb +85 -0
- data/test/unit/pvn/subcommands/revision/multiple_revisions_option_test.rb +67 -0
- data/test/unit/pvn/subcommands/revision/revision_option_test.rb +57 -0
- data/test/unit/pvn/subcommands/revision/revision_regexp_option_test.rb +69 -0
- data/test/unit/svnx/info/entry_test.rb +52 -0
- data/test/unit/svnx/log/cmargs_test.rb +22 -0
- data/test/unit/svnx/log/entries_test.rb +73 -0
- data/test/unit/svnx/log/entry_test.rb +21 -0
- data/test/unit/svnx/status/entry_test.rb +39 -0
- data/test/unit/synoption/base_option_test.rb +182 -0
- data/test/unit/synoption/match_test.rb +61 -0
- data/test/unit/synoption/option_test.rb +15 -0
- data/test/unit/synoption/set_test.rb +37 -0
- data/test/unit/system/command/caching_test.rb +97 -0
- data/test/unit/system/command/line_test.rb +33 -0
- metadata +199 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'pvn/subcommands/revision/revision_option'
|
6
|
+
|
7
|
+
module PVN
|
8
|
+
class RevisionOptionTestCase < PVN::TestCase
|
9
|
+
def assert_relative_to_absolute exp, val, path = '/Programs/wiquery/trunk'
|
10
|
+
ropt = PVN::RevisionOption.new
|
11
|
+
act = ropt.relative_to_absolute val, path
|
12
|
+
assert_equal exp, act, "val: #{val}; path: #{val}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_relative_to_absolute_middling
|
16
|
+
assert_relative_to_absolute '1887', '-7'
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_relative_to_absolute_latest
|
20
|
+
assert_relative_to_absolute '1950', '-1'
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_relative_to_absolute_oldest
|
24
|
+
assert_relative_to_absolute '412', '-163'
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_out_of_range
|
28
|
+
assert_raises(RuntimeError) do
|
29
|
+
assert_relative_to_absolute '1944', '-164'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def assert_post_process exp, val, path = '/Programs/wiquery/trunk'
|
34
|
+
ropt = PVN::RevisionOption.new
|
35
|
+
ropt.set_value val
|
36
|
+
ropt.post_process nil, [ path ]
|
37
|
+
act = ropt.value
|
38
|
+
assert_equal exp, act, "val: #{val}; path: #{path}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_post_process_absolute_middling
|
42
|
+
assert_post_process '1887', '1887'
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_post_process_middling
|
46
|
+
assert_post_process '1887', '-7'
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_post_process_latest
|
50
|
+
assert_post_process '1950', '-1'
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_post_process_oldest
|
54
|
+
assert_post_process '412', '-163'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'pvn/subcommands/revision/revision_regexp_option'
|
6
|
+
|
7
|
+
module PVN
|
8
|
+
class RevisionRegexpOptionTest < PVN::TestCase
|
9
|
+
def assert_tag_match str
|
10
|
+
assert_match RevisionRegexpOption::TAG_RE, str
|
11
|
+
end
|
12
|
+
|
13
|
+
def assert_tag_no_match str
|
14
|
+
assert_no_match RevisionRegexpOption::TAG_RE, str
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_pattern
|
18
|
+
assert_tag_match '-r500:600'
|
19
|
+
assert_tag_match '+1'
|
20
|
+
assert_tag_match '-r 500'
|
21
|
+
assert_tag_match '-1776'
|
22
|
+
|
23
|
+
assert_tag_no_match ' -r500:600'
|
24
|
+
assert_tag_no_match '1'
|
25
|
+
assert_tag_no_match '123'
|
26
|
+
assert_tag_no_match '-x'
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_out_of_range
|
30
|
+
assert_raises(RuntimeError) do
|
31
|
+
ropt = PVN::RevisionRegexpOption.new
|
32
|
+
ropt.process [ '-164' ]
|
33
|
+
ropt.post_process nil, [ '/Programs/wiquery/trunk' ]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def assert_post_process exp, val, path = '/Programs/wiquery/trunk'
|
38
|
+
ropt = PVN::RevisionRegexpOption.new
|
39
|
+
ropt.set_value val
|
40
|
+
ropt.post_process nil, [ path ]
|
41
|
+
act = ropt.value
|
42
|
+
assert_equal exp, act, "val: #{val}; path: #{path}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_post_process_middling
|
46
|
+
assert_post_process '1887', '-7'
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_post_process_latest
|
50
|
+
assert_post_process '1950', '-1'
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_post_process_oldest
|
54
|
+
assert_post_process '412', '-163'
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_post_process_tagval
|
58
|
+
assert_post_process '7', '-r7'
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_post_process_tagrange
|
62
|
+
assert_post_process '7:177', '-r7:177'
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_post_process_absolute_middling
|
66
|
+
assert_post_process '1887', '1887'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/info/tc'
|
5
|
+
require 'svnx/info/entry'
|
6
|
+
|
7
|
+
module SVNx::Info
|
8
|
+
class EntryTestCase < SVNx::Info::TestCase
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def test_entry_from_xml
|
12
|
+
# svn info --xml ./wiquery-core/pom.xml
|
13
|
+
xml = Array.new
|
14
|
+
xml << '<?xml version="1.0"?>'
|
15
|
+
xml << '<info>'
|
16
|
+
xml << '<entry'
|
17
|
+
xml << ' kind="file"'
|
18
|
+
xml << ' path="wiquery-core/pom.xml"'
|
19
|
+
xml << ' revision="1950">'
|
20
|
+
xml << '<url>file:///home/jpace/Programs/Subversion/Repositories/wiquery/trunk/wiquery-core/pom.xml</url>'
|
21
|
+
xml << '<repository>'
|
22
|
+
xml << '<root>file:///home/jpace/Programs/Subversion/Repositories/wiquery</root>'
|
23
|
+
xml << '<uuid>9d44104b-4b85-4781-9eca-83ed02b512a0</uuid>'
|
24
|
+
xml << '</repository>'
|
25
|
+
xml << '<wc-info>'
|
26
|
+
xml << '<schedule>normal</schedule>'
|
27
|
+
xml << '<depth>infinity</depth>'
|
28
|
+
xml << '<text-updated>2011-11-28T11:26:07.772551Z</text-updated>'
|
29
|
+
xml << '<checksum>3b2a51d21a9517a4d3dc5865c4b56db9</checksum>'
|
30
|
+
xml << '</wc-info>'
|
31
|
+
xml << '<commit'
|
32
|
+
xml << ' revision="1907">'
|
33
|
+
xml << '<author>hielke.hoeve@gmail.com</author>'
|
34
|
+
xml << '<date>2011-11-14T10:50:38.389281Z</date>'
|
35
|
+
xml << '</commit>'
|
36
|
+
xml << '</entry>'
|
37
|
+
xml << '</info>'
|
38
|
+
|
39
|
+
xmllines = xml.collect { |line| line + "\n" }
|
40
|
+
|
41
|
+
expdata = {
|
42
|
+
:url => 'file:///home/jpace/Programs/Subversion/Repositories/wiquery/trunk/wiquery-core/pom.xml',
|
43
|
+
:kind => 'file',
|
44
|
+
:path => 'wiquery-core/pom.xml',
|
45
|
+
:root => 'file:///home/jpace/Programs/Subversion/Repositories/wiquery'
|
46
|
+
}
|
47
|
+
|
48
|
+
entry = Entry.new :xmllines => xmllines.join('')
|
49
|
+
assert_entry_equals entry, expdata
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/log/tc'
|
5
|
+
require 'svnx/log/command'
|
6
|
+
|
7
|
+
module SVNx::Log
|
8
|
+
class CommandArgsTestCase ###$$$ < SVNx::Log::TestCase
|
9
|
+
|
10
|
+
def test_options_log_limit
|
11
|
+
cmdargs = LogCommandArgs.new :limit => 6
|
12
|
+
cmd = LogCommand.new :use_cache => true, :cmdargs => cmdargs
|
13
|
+
assert_equal 'svn log --xml --limit 6', cmd.command_line.to_command
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_options_verbose
|
17
|
+
cmdargs = LogCommandArgs.new :verbose => true
|
18
|
+
cmd = LogCommand.new :use_cache => true, :cmdargs => cmdargs
|
19
|
+
assert_equal 'svn log --xml -v', cmd.command_line.to_command
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/log/tc'
|
5
|
+
require 'svnx/log/entries'
|
6
|
+
|
7
|
+
module SVNx::Log
|
8
|
+
class EntriesTestCase < SVNx::Log::TestCase
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def assert_entry_fields_not_nil entry
|
12
|
+
# these are occasionally missing or blank, which REXML considers nil:
|
13
|
+
assert entry.message
|
14
|
+
assert entry.author
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_create_from_xml
|
18
|
+
expdata = '1947', 'reiern70', '2011-11-14T12:24:45.757124Z', 'added a convenience method to set the range'
|
19
|
+
expdata << { :kind => 'file',
|
20
|
+
:action => 'M',
|
21
|
+
:name => '/trunk/wiquery-jquery-ui/src/test/java/org/odlabs/wiquery/ui/slider/SliderTestCase.java'
|
22
|
+
}
|
23
|
+
|
24
|
+
entries = Entries.new :xmllines => get_test_lines_limit_15
|
25
|
+
|
26
|
+
assert_log_entry_equals entries[2], expdata
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_no_author_field
|
30
|
+
entries = Entries.new :xmllines => get_test_lines_no_author
|
31
|
+
nentries = entries.size
|
32
|
+
|
33
|
+
# revision 1 has no author ... wtf?
|
34
|
+
assert_entry_fields_not_nil entries[0]
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_empty_message_element
|
38
|
+
entries = Entries.new :xmllines => get_test_lines_empty_message
|
39
|
+
nentries = entries.size
|
40
|
+
|
41
|
+
# empty message here:
|
42
|
+
assert_entry_fields_not_nil entries[0]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_create_on_demand
|
46
|
+
# although entries now supports xmllines as an Array, we need the size for the assertion:
|
47
|
+
xmllines = get_test_lines_no_limit.join ''
|
48
|
+
|
49
|
+
# quite a big file ...
|
50
|
+
assert_equal 324827, xmllines.size
|
51
|
+
|
52
|
+
entries = Entries.new :xmllines => xmllines
|
53
|
+
|
54
|
+
nentries = entries.size
|
55
|
+
assert_equal 1949, nentries
|
56
|
+
|
57
|
+
# the power of Ruby, effortlessly getting instance variables ...
|
58
|
+
|
59
|
+
real_entries = entries.instance_eval '@entries'
|
60
|
+
|
61
|
+
# nothing processed yet ...
|
62
|
+
assert_nil real_entries[16]
|
63
|
+
assert_nil real_entries[17]
|
64
|
+
assert_nil real_entries[18]
|
65
|
+
|
66
|
+
assert_entry_fields_not_nil entries[17]
|
67
|
+
|
68
|
+
# and these still aren't processed:
|
69
|
+
assert_nil real_entries[16]
|
70
|
+
assert_nil real_entries[18]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/log/tc'
|
5
|
+
require 'svnx/log/entry'
|
6
|
+
|
7
|
+
module SVNx::Log
|
8
|
+
class EntryTestCase < SVNx::Log::TestCase
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def test_entry_from_xml
|
12
|
+
expdata = '1947', 'reiern70', '2011-11-14T12:24:45.757124Z', 'added a convenience method to set the range'
|
13
|
+
expdata << { :kind => 'file', :action => 'M', :name => '/trunk/wiquery-jquery-ui/src/test/java/org/odlabs/wiquery/ui/slider/SliderTestCase.java' }
|
14
|
+
|
15
|
+
doc = REXML::Document.new get_test_lines_limit_15.join('')
|
16
|
+
|
17
|
+
entry = Entry.new :xmlelement => doc.elements[1].elements[3]
|
18
|
+
assert_log_entry_equals entry, expdata
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/status/tc'
|
5
|
+
require 'svnx/status/entry'
|
6
|
+
|
7
|
+
module SVNx::Status
|
8
|
+
class EntryTestCase < SVNx::Status::TestCase
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def test_entry_from_xml
|
12
|
+
xml = Array.new
|
13
|
+
xml << "<?xml version=\"1.0\"?>\n"
|
14
|
+
xml << "<status>\n"
|
15
|
+
xml << "<target\n"
|
16
|
+
xml << " path=\"LICENSE\">\n"
|
17
|
+
xml << "<entry\n"
|
18
|
+
xml << " path=\"LICENSE\">\n"
|
19
|
+
xml << "<wc-status\n"
|
20
|
+
xml << " props=\"none\"\n"
|
21
|
+
xml << " item=\"deleted\"\n"
|
22
|
+
xml << " revision=\"1950\">\n"
|
23
|
+
xml << "<commit\n"
|
24
|
+
xml << " revision=\"412\">\n"
|
25
|
+
xml << "<author>lionel.armanet</author>\n"
|
26
|
+
xml << "<date>2010-09-17T21:23:25.763385Z</date>\n"
|
27
|
+
xml << "</commit>\n"
|
28
|
+
xml << "</wc-status>\n"
|
29
|
+
xml << "</entry>\n"
|
30
|
+
xml << "</target>\n"
|
31
|
+
xml << "</status>\n"
|
32
|
+
|
33
|
+
expdata = { :path => 'LICENSE', :status => 'deleted' }
|
34
|
+
|
35
|
+
entry = Entry.new :xmllines => xml.join('')
|
36
|
+
assert_entry_equals entry, expdata
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'synoption/base_option'
|
6
|
+
require 'stringio'
|
7
|
+
|
8
|
+
module PVN
|
9
|
+
class BaseOptionTestCase < Test::Unit::TestCase
|
10
|
+
include Loggable
|
11
|
+
|
12
|
+
def test_init_minimal
|
13
|
+
opt = BaseOption.new :limit, '-l', "the number of log entries", nil
|
14
|
+
assert_equal :limit, opt.name
|
15
|
+
assert_equal '-l', opt.tag
|
16
|
+
assert_equal "the number of log entries", opt.description
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_init_default_value
|
20
|
+
opt = BaseOption.new :nombre, '-x', " one two three", 133
|
21
|
+
assert_equal 133, opt.value
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_init_negate
|
25
|
+
opt = BaseOption.new :limit, '-l', "the number of log entries", nil, :negate => [ %r{^--no-?limit} ]
|
26
|
+
assert_equal [ %r{^--no-?limit} ], opt.negate
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_to_doc
|
30
|
+
opt = BaseOption.new :limit, '-l', "the number of log entries", 777, :negate => [ %r{^--no-?limit} ]
|
31
|
+
sio = StringIO.new
|
32
|
+
opt.to_doc sio
|
33
|
+
exp = String.new
|
34
|
+
exp << " -l [--limit] ARG : the number of log entries\n"
|
35
|
+
exp << " default: 777\n"
|
36
|
+
exp << " --no-limit \n"
|
37
|
+
assert_equal exp, sio.string
|
38
|
+
end
|
39
|
+
|
40
|
+
def assert_exact_match exp, opt, val
|
41
|
+
assert_equal exp, opt.exact_match?(val), "value: '" + val + "'"
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_exact_match
|
45
|
+
opt = BaseOption.new :limit, '-l', "the number of log entries", 3
|
46
|
+
[ '-l', '--limit' ].each do |val|
|
47
|
+
assert_exact_match true, opt, val
|
48
|
+
end
|
49
|
+
|
50
|
+
[ '-L', '-x', '--lim', '--liMit' ].each do |val|
|
51
|
+
assert_exact_match false, opt, val
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def assert_negative_match exp, opt, val
|
56
|
+
md = opt.negative_match? val
|
57
|
+
assert_equal exp, !!md, "value: '" + val + "'"
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_negative_match
|
61
|
+
opt = BaseOption.new :limit, '-l', "the number of log entries", 777, :negate => [ '-L', %r{^--no-?limit} ]
|
62
|
+
[ '-L', '--no-limit', '--nolimit' ].each do |val|
|
63
|
+
assert_negative_match true, opt, val
|
64
|
+
end
|
65
|
+
|
66
|
+
[ '-l', '-x', '-nolimit', ' --nolimit' ].each do |val|
|
67
|
+
assert_negative_match false, opt, val
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def assert_regexp_match exp, opt, val
|
72
|
+
md = opt.regexp_match? val
|
73
|
+
assert_equal exp, !!md, "value: '" + val + "'"
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_regexp_match
|
77
|
+
opt = BaseOption.new :revision, '-r', "the revision", nil, :regexp => Regexp.new('^[\-\+]\d+$')
|
78
|
+
[ '-1', '-123', '+99', '+443' ].each do |val|
|
79
|
+
assert_regexp_match true, opt, val
|
80
|
+
end
|
81
|
+
|
82
|
+
[ '-x', '123', '+-x', 'word' ].each do |val|
|
83
|
+
assert_regexp_match false, opt, val
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def assert_to_command_line exp, opt
|
88
|
+
assert_equal exp, opt.to_command_line
|
89
|
+
end
|
90
|
+
|
91
|
+
def make_xyz_option options = Hash.new
|
92
|
+
BaseOption.new :xyz, '-x', "the blah blah blah", nil, options
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_to_command_line_no_cmdline_option
|
96
|
+
opt = make_xyz_option
|
97
|
+
assert_to_command_line nil, opt
|
98
|
+
opt.set_value 1
|
99
|
+
assert_to_command_line [ '-x', 1 ], opt
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_to_command_line_cmdline_option_string
|
103
|
+
opt = make_xyz_option :as_cmdline_option => '--xray'
|
104
|
+
assert_to_command_line nil, opt
|
105
|
+
opt.set_value 1
|
106
|
+
assert_to_command_line '--xray', opt
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_to_command_line_cmdline_option_nil
|
110
|
+
opt = make_xyz_option :as_cmdline_option => nil
|
111
|
+
assert_to_command_line nil, opt
|
112
|
+
opt.set_value 1
|
113
|
+
assert_to_command_line nil, opt
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_takes_value
|
117
|
+
opt = make_xyz_option
|
118
|
+
assert opt.takes_value?
|
119
|
+
end
|
120
|
+
|
121
|
+
def assert_process exp_process, exp_value, exp_remaining_args, opt, args
|
122
|
+
pr = opt.process args
|
123
|
+
assert_equal exp_process, pr
|
124
|
+
assert_equal exp_value, opt.value
|
125
|
+
assert_equal exp_remaining_args, args
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_process_exact_no_match
|
129
|
+
opt = make_xyz_option
|
130
|
+
args = %w{ --baz foo }
|
131
|
+
assert_process false, nil, %w{ --baz foo }, opt, args
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_process_exact_takes_argument
|
135
|
+
opt = make_xyz_option
|
136
|
+
args = %w{ --xyz foo }
|
137
|
+
assert_process true, 'foo', %w{ }, opt, args
|
138
|
+
|
139
|
+
opt = make_xyz_option
|
140
|
+
args = %w{ --xyz foo bar }
|
141
|
+
assert_process true, 'foo', %w{ bar }, opt, args
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_process_exact_takes_missing_argument
|
145
|
+
opt = make_xyz_option
|
146
|
+
args = %w{ --xyz }
|
147
|
+
assert_raises(RuntimeError) do
|
148
|
+
assert_process true, 'foo', %w{ }, opt, args
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_process_negative
|
153
|
+
options = { :negate => [ '-X', %r{^--no-?xyz} ] }
|
154
|
+
%w{ -X --no-xyz --noxyz }.each do |arg|
|
155
|
+
opt = make_xyz_option options
|
156
|
+
args = [ arg ]
|
157
|
+
assert_process true, false, %w{ }, opt, args
|
158
|
+
end
|
159
|
+
|
160
|
+
%w{ -X --no-xyz --noxyz }.each do |arg|
|
161
|
+
opt = make_xyz_option options
|
162
|
+
args = [ arg, '--abc' ]
|
163
|
+
assert_process true, false, %w{ --abc }, opt, args
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_process_regexp
|
168
|
+
options = { :regexp => Regexp.new('^[\-\+]\d+$') }
|
169
|
+
%w{ -1 +123 }.each do |arg|
|
170
|
+
opt = make_xyz_option options
|
171
|
+
args = [ arg ]
|
172
|
+
assert_process true, arg, %w{ }, opt, args
|
173
|
+
end
|
174
|
+
|
175
|
+
%w{ -1 +123 }.each do |arg|
|
176
|
+
opt = make_xyz_option options
|
177
|
+
args = [ arg, '--foo' ]
|
178
|
+
assert_process true, arg, %w{ --foo }, opt, args
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'synoption/match'
|
6
|
+
|
7
|
+
module PVN
|
8
|
+
class MatchTestCase < Test::Unit::TestCase
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def assert_match exp, matcher, arg
|
12
|
+
assert_equal exp, matcher.match?(arg), "arg: #{arg}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def assert_matches exp, matcher, *args
|
16
|
+
args.each do |arg|
|
17
|
+
assert_match exp, matcher, arg
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_exact
|
22
|
+
matcher = OptionExactMatch.new '-t', 'tagname'
|
23
|
+
assert_matches true, matcher, '-t', '--tagname'
|
24
|
+
assert_matches false, matcher, '-T', '--tag-name', '--no-tagname', '--notagname'
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_negative_string
|
28
|
+
matcher = OptionNegativeMatch.new '-T'
|
29
|
+
assert_matches true, matcher, '-T'
|
30
|
+
assert_matches false, matcher, '-t'
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_negative_regexp
|
34
|
+
matcher = OptionNegativeMatch.new %r{^\-\-no\-?tagname$}
|
35
|
+
assert_matches true, matcher, '--no-tagname', '--notagname'
|
36
|
+
assert_matches false, matcher, '-t', '--non-tagname' '--nontagname'
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_negative_multiple
|
40
|
+
matcher = OptionNegativeMatch.new %r{^\-\-no\-?tagname$}, '-T'
|
41
|
+
assert_matches true, matcher, '-T', '--no-tagname', '--notagname'
|
42
|
+
assert_matches false, matcher, '-t', '--tagname'
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_match_not_nil matcher, arg
|
46
|
+
assert_not_nil matcher.match?(arg), "arg: #{arg}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def assert_matches_not_nil matcher, *args
|
50
|
+
args.each do |arg|
|
51
|
+
assert_match_not_nil matcher, arg
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_regexp_match
|
56
|
+
matcher = OptionRegexpMatch.new %r{^--tag-?name$}
|
57
|
+
assert_matches_not_nil matcher, '--tagname', '--tag-name'
|
58
|
+
assert_matches nil, matcher, '--tagnames' '--tag--name'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'synoption/set'
|
6
|
+
require 'synoption/base_option'
|
7
|
+
require 'stringio'
|
8
|
+
|
9
|
+
module PVN
|
10
|
+
class SetTestCase < Test::Unit::TestCase
|
11
|
+
include Loggable
|
12
|
+
|
13
|
+
def test_find_by_name
|
14
|
+
xyz = BaseOption.new :xyz, '-x', "blah blah xyz", nil
|
15
|
+
abc = BaseOption.new :abc, '-a', "abc yadda yadda", nil
|
16
|
+
tnt = BaseOption.new :tnt, '-t', "tnt and so forth", nil
|
17
|
+
|
18
|
+
os = OptionSet.new [ xyz, abc, tnt ]
|
19
|
+
|
20
|
+
assert_not_nil os.find_by_name(:xyz)
|
21
|
+
assert_nil os.find_by_name(:bfd)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_
|
25
|
+
xyz = BaseOption.new :xyz, '-x', "blah blah xyz", nil
|
26
|
+
abc = BaseOption.new :abc, '-a', "abc yadda yadda", nil
|
27
|
+
tnt = BaseOption.new :tnt, '-t', "tnt and so forth", nil
|
28
|
+
|
29
|
+
os = OptionSet.new [ xyz, abc, tnt ]
|
30
|
+
|
31
|
+
assert_not_nil os.find_by_name(:xyz)
|
32
|
+
assert_nil os.find_by_name(:bfd)
|
33
|
+
|
34
|
+
assert_equal xyz, os.find_by_name(:xyz)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|