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.
Files changed (99) hide show
  1. data/README.markdown +38 -0
  2. data/bin/pvn +12 -0
  3. data/bin/pvndiff +10 -0
  4. data/lib/pvn/app.rb +144 -0
  5. data/lib/pvn/base/textlines.rb +35 -0
  6. data/lib/pvn/base/util.rb +14 -0
  7. data/lib/pvn/cmddoc.rb +77 -0
  8. data/lib/pvn/config.rb +65 -0
  9. data/lib/pvn/describe.rb +40 -0
  10. data/lib/pvn/diff/diffcmd.rb +49 -0
  11. data/lib/pvn/diff/differ.rb +67 -0
  12. data/lib/pvn/diff/diffopts.rb +58 -0
  13. data/lib/pvn/doc.rb +34 -0
  14. data/lib/pvn/io/element.rb +113 -0
  15. data/lib/pvn/io/fselement.rb +22 -0
  16. data/lib/pvn/log/formatter/color_formatter.rb +29 -0
  17. data/lib/pvn/log/formatter/entries_formatter.rb +33 -0
  18. data/lib/pvn/log/formatter/entry_formatter.rb +57 -0
  19. data/lib/pvn/log/formatter/log_formatter.rb +59 -0
  20. data/lib/pvn/log/formatter/message_formatter.rb +19 -0
  21. data/lib/pvn/log/formatter/path_formatter.rb +41 -0
  22. data/lib/pvn/log/formatter/summary_formatter.rb +49 -0
  23. data/lib/pvn/log/logcmd.rb +136 -0
  24. data/lib/pvn/log/logentry.rb +116 -0
  25. data/lib/pvn/log/logfactory.rb +101 -0
  26. data/lib/pvn/log/logoptions.rb +43 -0
  27. data/lib/pvn/pct/linecount.rb +33 -0
  28. data/lib/pvn/pct/pctcmd.rb +204 -0
  29. data/lib/pvn/pct/statcmd.rb +13 -0
  30. data/lib/pvn/revision/entry.rb +94 -0
  31. data/lib/pvn/revision.rb +119 -0
  32. data/lib/pvn/subcommands/base/clargs.rb +53 -0
  33. data/lib/pvn/subcommands/base/command.rb +60 -0
  34. data/lib/pvn/subcommands/base/doc.rb +94 -0
  35. data/lib/pvn/subcommands/base/options.rb +22 -0
  36. data/lib/pvn/subcommands/log/command.rb +70 -0
  37. data/lib/pvn/subcommands/log/options.rb +43 -0
  38. data/lib/pvn/subcommands/pct/clargs.rb +33 -0
  39. data/lib/pvn/subcommands/pct/command.rb +57 -0
  40. data/lib/pvn/subcommands/revision/multiple_revisions_option.rb +43 -0
  41. data/lib/pvn/subcommands/revision/revision_option.rb +74 -0
  42. data/lib/pvn/subcommands/revision/revision_regexp_option.rb +39 -0
  43. data/lib/pvn/svn/command/svncmd.rb +39 -0
  44. data/lib/pvn/svn/environment.rb +23 -0
  45. data/lib/pvn/svn/svnelement.rb +89 -0
  46. data/lib/pvn/svn/svninfo.rb +42 -0
  47. data/lib/pvn/svn/svnroot.rb +29 -0
  48. data/lib/pvn/upp/uppcmd.rb +112 -0
  49. data/lib/pvn/wherecmd.rb +55 -0
  50. data/lib/pvn.rb +8 -0
  51. data/lib/svnx/command.rb +60 -0
  52. data/lib/svnx/entry.rb +34 -0
  53. data/lib/svnx/info/command.rb +21 -0
  54. data/lib/svnx/info/entries.rb +27 -0
  55. data/lib/svnx/info/entry.rb +34 -0
  56. data/lib/svnx/log/command.rb +93 -0
  57. data/lib/svnx/log/entries.rb +57 -0
  58. data/lib/svnx/log/entry.rb +54 -0
  59. data/lib/svnx/status/command.rb +21 -0
  60. data/lib/svnx/status/entries.rb +22 -0
  61. data/lib/svnx/status/entry.rb +33 -0
  62. data/lib/synoption/base_option.rb +149 -0
  63. data/lib/synoption/boolean_option.rb +21 -0
  64. data/lib/synoption/doc.rb +81 -0
  65. data/lib/synoption/fixnum_option.rb +13 -0
  66. data/lib/synoption/match.rb +47 -0
  67. data/lib/synoption/option.rb +10 -0
  68. data/lib/synoption/optionable.rb +66 -0
  69. data/lib/synoption/set.rb +114 -0
  70. data/lib/system/cachecmd.rb +65 -0
  71. data/lib/system/cmdexec.rb +13 -0
  72. data/lib/system/cmdline.rb +70 -0
  73. data/lib/system/command/arg.rb +12 -0
  74. data/lib/system/command/cachefile.rb +39 -0
  75. data/lib/system/command/caching.rb +36 -0
  76. data/lib/system/command/line.rb +47 -0
  77. data/lib/system/command.rb +72 -0
  78. data/test/integration/svnx/log/test.rb +43 -0
  79. data/test/unit/pvn/app_test.rb +22 -0
  80. data/test/unit/pvn/io/element/log/log_test.rb +35 -0
  81. data/test/unit/pvn/log/formatter/entry_formatter_test.rb +90 -0
  82. data/test/unit/pvn/revision/entry_test.rb +123 -0
  83. data/test/unit/pvn/subcommands/log/command_test.rb +22 -0
  84. data/test/unit/pvn/subcommands/log/options_test.rb +85 -0
  85. data/test/unit/pvn/subcommands/revision/multiple_revisions_option_test.rb +67 -0
  86. data/test/unit/pvn/subcommands/revision/revision_option_test.rb +57 -0
  87. data/test/unit/pvn/subcommands/revision/revision_regexp_option_test.rb +69 -0
  88. data/test/unit/svnx/info/entry_test.rb +52 -0
  89. data/test/unit/svnx/log/cmargs_test.rb +22 -0
  90. data/test/unit/svnx/log/entries_test.rb +73 -0
  91. data/test/unit/svnx/log/entry_test.rb +21 -0
  92. data/test/unit/svnx/status/entry_test.rb +39 -0
  93. data/test/unit/synoption/base_option_test.rb +182 -0
  94. data/test/unit/synoption/match_test.rb +61 -0
  95. data/test/unit/synoption/option_test.rb +15 -0
  96. data/test/unit/synoption/set_test.rb +37 -0
  97. data/test/unit/system/command/caching_test.rb +97 -0
  98. data/test/unit/system/command/line_test.rb +33 -0
  99. metadata +199 -0
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'system/command/line'
5
+
6
+ module System
7
+ class CacheFile
8
+ include Loggable
9
+
10
+ def initialize cache_dir, args
11
+ # pwd = Pathname.pwd.split_path.join('')
12
+ # info "pwd: #{pwd}"
13
+ @args = args
14
+ @pn = Pathname.new(cache_dir) + args.join('-').gsub('/', '\/')
15
+ info "pn: #{@pn}".yellow
16
+ end
17
+
18
+ def readlines
19
+ if @pn.exist?
20
+ info "reading from cache file: #{@pn}".cyan
21
+ @pn.readlines
22
+ else
23
+ cl = CommandLine.new @args
24
+ output = cl.execute
25
+
26
+ @pn.parent.mkpath
27
+ info "saving output to cache file: #{@pn}"
28
+ File.put_via_temp_file @pn.to_s do
29
+ output
30
+ end
31
+ output
32
+ end
33
+ end
34
+
35
+ def to_s
36
+ @pn.to_s
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'system/command/line'
5
+ require 'system/command/cachefile'
6
+
7
+ module System
8
+ class CachingCommandLine < CommandLine
9
+ # caches its input and values.
10
+ @@cache_dir = '/tmp' + Pathname.new($0).expand_path
11
+
12
+ class << self
13
+ def cache_dir
14
+ @@cache_dir
15
+ end
16
+
17
+ def cache_dir= dir
18
+ @@cache_dir = dir
19
+ end
20
+ end
21
+
22
+ def cache_dir
23
+ @@cache_dir
24
+ end
25
+
26
+ def cache_file
27
+ pwd = Pathname.pwd.split_path.join('')
28
+ CacheFile.new cache_dir, @args
29
+ end
30
+
31
+ def execute
32
+ cachefile = cache_file
33
+ @output = cachefile.readlines
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'system/command/arg'
5
+ require 'open3'
6
+
7
+ module System
8
+ class CommandLine
9
+ include Loggable
10
+
11
+ attr_reader :output
12
+
13
+ def initialize args = Array.new
14
+ @args = args.dup
15
+ end
16
+
17
+ def << arg
18
+ # @args << Argument.new(arg)
19
+ @args << arg
20
+ end
21
+
22
+ def execute
23
+ cmd = to_command
24
+
25
+ # cmd << " 2>&1"
26
+
27
+ # I want to use popen3, but the version that works (sets $?) is in 1.9.x,
28
+ # not 1.8.x:
29
+ IO.popen(cmd + " 2>&1") do |io|
30
+ @output = io.readlines
31
+ end
32
+
33
+ if $? && $?.exitstatus != 0
34
+ info "cmd: #{cmd}".red
35
+ info "$?: #{$?.inspect}".red
36
+ info "$?.exitstatus: #{$? && $?.exitstatus}".red
37
+ raise "ERROR running command '#{cmd}': #{@output[-1]}"
38
+ end
39
+
40
+ @output
41
+ end
42
+
43
+ def to_command
44
+ @args.join ' '
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'system/cmdexec'
5
+ require 'synoption/optionable'
6
+ require 'pvn/subcommands/revision/revision_option'
7
+
8
+ module PVN
9
+ class Command
10
+ include Optionable
11
+ include Loggable
12
+
13
+ def self.has_revision_option revopts = Hash.new
14
+ options << RevisionRegexpOption.new(revopts)
15
+ end
16
+
17
+ attr_reader :output
18
+
19
+ def initialize args = Hash.new
20
+ debug "args: #{args}"
21
+ @execute = args[:execute].nil? || args[:execute]
22
+ @executor = args[:executor] || CommandExecutor.new
23
+
24
+ if options
25
+ options.process self, args, args[:command_args] || Array.new
26
+ end
27
+
28
+ execute
29
+ end
30
+
31
+ def get_command_line args
32
+ fullcmdargs = options.to_command_line + options.arguments
33
+ info "fullcmdargs: #{fullcmdargs}"
34
+
35
+ fullcmdargs
36
+ end
37
+
38
+ def execute
39
+ # see SVNCommand#execute
40
+ raise "abstract method invoked"
41
+ end
42
+
43
+ def command
44
+ raise "abstract method invoked"
45
+ end
46
+
47
+ def run args
48
+ info "self.class: #{self.class}"
49
+ info "@command : #{command}"
50
+ info "@execute : #{@execute}"
51
+
52
+ if @execute
53
+ info "@executor : #{@executor}"
54
+ @output = @executor.run command
55
+ else
56
+ debug "not executing: #{command}"
57
+ end
58
+ end
59
+
60
+ def option optname
61
+ self.class.find_option optname
62
+ end
63
+
64
+ def has_entries?
65
+ false
66
+ end
67
+
68
+ def options
69
+ # self.class.options
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'integration/tc'
5
+ require 'svnx/log/tc'
6
+ require 'svnx/log/command'
7
+ require 'svnx/log/entry'
8
+
9
+ module SVNx::Log
10
+ class EntryTestCase < PVN::IntegrationTestCase
11
+ include Loggable
12
+
13
+ def assert_log_entry_equals entry, expdata
14
+ assert_equal expdata[0], entry.revision
15
+ assert_equal expdata[1], entry.author
16
+ assert_equal expdata[2], entry.date
17
+ assert_equal expdata[3], entry.message
18
+ entry.paths.each_with_index do |path, idx|
19
+ info path.inspect.yellow
20
+ assert_equal expdata[4 + idx][:kind], path.kind
21
+ assert_equal expdata[4 + idx][:action], path.action
22
+ assert_equal expdata[4 + idx][:name], path.name
23
+ end
24
+ end
25
+
26
+ def test_entry_from_command
27
+ lcargs = LogCommandArgs.new :limit => 2, :verbose => false, :use_cache => false
28
+ lc = LogCommand.new lcargs
29
+
30
+ lc.execute
31
+ output = lc.output
32
+ info "output: #{output}"
33
+
34
+ expdata = '1947', 'reiern70', '2011-11-14T12:24:45.757124Z', 'added a convenience method to set the range'
35
+ expdata << { :kind => 'file', :action => 'M', :name => '/trunk/wiquery-jquery-ui/src/test/java/org/odlabs/wiquery/ui/slider/SliderTestCase.java' }
36
+
37
+ doc = REXML::Document.new output.join('')
38
+
39
+ entry = Entry.new :xmlelement => doc.elements[1].elements[2]
40
+ assert_log_entry_equals entry, expdata
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,22 @@
1
+ require 'tc'
2
+ require 'pvn/app'
3
+
4
+ class TestPVNCli < PVN::TestCase
5
+ def setup
6
+ PVN::App::Runner.execute @stdout_io = StringIO.new, Array.new
7
+ @stdout_io.rewind
8
+ @stdout = @stdout_io.read
9
+ end
10
+
11
+ def test_print_default_output
12
+ # assert_match(/To update this executable/, @stdout)
13
+ end
14
+
15
+ def xxx_test_help
16
+ io = StringIO.new
17
+ PVN::App::Runner.execute io, %w{ --help }
18
+ io.rewind
19
+ io = io.read
20
+ # assert_match(/To update this executable/, io)
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'pvn/log/tc'
5
+ require 'svnx/log/entries'
6
+ require 'pvn/io/element'
7
+
8
+ module PVN::IO::IOElement
9
+ class LogTestCase ###$$$ < PVN::Log::TestCase
10
+ def assert_log_entries_size expsize, dirlog
11
+ assert_equal expsize, dirlog.entries.size
12
+ end
13
+
14
+ def assert_log_command exp_n_entries, localpath, args = Hash.new
15
+ dir = PVN::IO::Element.new :local => localpath
16
+ cmdargs = SVNx::LogCommandArgs.new args
17
+
18
+ dirlog = dir.log cmdargs
19
+ # info "dirlog: #{dirlog}".yellow
20
+ dirlog.entries.each do |entry|
21
+ # info "entry: #{entry}".blue
22
+ end
23
+
24
+ assert_log_entries_size exp_n_entries, dirlog
25
+ end
26
+
27
+ def test_options_none
28
+ assert_log_command 163, '/Programs/wiquery/trunk'
29
+ end
30
+
31
+ def test_option_limit
32
+ assert_log_command 15, '/Programs/wiquery/trunk', :limit => 15
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'svnx/log/entries'
6
+ require 'pvn/io/element'
7
+ require 'pvn/log/formatter/entry_formatter'
8
+
9
+ require 'resources'
10
+
11
+ module PVN; module Log; end; end
12
+
13
+ module PVN::Log
14
+ class EntryFormatTestCase < PVN::TestCase
15
+ TEST_LINES = Resources.instance.test_lines '/Programs/wiquery/trunk', "svn", "log", "-l", "15", "-v", "--xml"
16
+ ENTRIES = SVNx::Log::Entries.new :xmllines => TEST_LINES
17
+
18
+ def show_all entries, from_head, from_tail
19
+ ef = EntriesFormatter.new true, entries, from_head, from_tail
20
+ puts ef.format
21
+ end
22
+
23
+ def assert_format explines, entry, use_colors, idx, from_head, from_tail, total
24
+ ef = EntryFormatter.new use_colors, entry, idx, from_head, from_tail, total
25
+
26
+ fmtlines = ef.format
27
+ assert_equal explines, fmtlines
28
+ end
29
+
30
+ def test_colors_from_head_not_from_tail_index_0
31
+ entries = ENTRIES
32
+ explines = [
33
+ "\e[1m1950\e[0m \e[1m-1\e[0m \e[36m\e[1mjpace\e[0m\e[0m \e[35m\e[1m2011-12-05T12:41:52.385786Z\e[0m\e[0m",
34
+ "",
35
+ "\e[37mTesting.\e[0m",
36
+ "",
37
+ " \e[33m/trunk/buildNumber.properties\e[0m"
38
+ ]
39
+ assert_format explines, entries[0], true, 0, true, false, 15
40
+ end
41
+
42
+ def test_colors_from_head_not_from_tail_index_4
43
+ entries = ENTRIES
44
+ explines = [
45
+ "\e[1m1950\e[0m \e[1m-5\e[0m \e[36m\e[1mjpace\e[0m\e[0m \e[35m\e[1m2011-12-05T12:41:52.385786Z\e[0m\e[0m",
46
+ "",
47
+ "\e[37mTesting.\e[0m",
48
+ "",
49
+ " \e[33m/trunk/buildNumber.properties\e[0m"
50
+ ]
51
+ assert_format explines, entries[0], true, 4, true, false, 15
52
+ end
53
+
54
+ def test_no_colors_from_head_from_tail_index_4
55
+ entries = ENTRIES
56
+ explines = [
57
+ "1950 -5 +10 jpace 2011-12-05T12:41:52.385786Z",
58
+ "",
59
+ "Testing.",
60
+ "",
61
+ " /trunk/buildNumber.properties"
62
+ ]
63
+ assert_format explines, entries[0], false, 4, true, true, 15
64
+ end
65
+
66
+ def test_colors_from_head_from_tail_index_4
67
+ entries = ENTRIES
68
+ explines = [
69
+ "\e[1m1950\e[0m \e[1m-5\e[0m \e[1m+10\e[0m \e[36m\e[1mjpace\e[0m\e[0m \e[35m\e[1m2011-12-05T12:41:52.385786Z\e[0m\e[0m",
70
+ "",
71
+ "\e[37mTesting.\e[0m",
72
+ "",
73
+ " \e[33m/trunk/buildNumber.properties\e[0m"
74
+ ]
75
+ assert_format explines, entries[0], true, 4, true, true, 15
76
+ end
77
+
78
+ def test_no_colors_from_head_not_from_tail_index_4
79
+ entries = ENTRIES
80
+ explines = [
81
+ "1950 -5 jpace 2011-12-05T12:41:52.385786Z",
82
+ "",
83
+ "Testing.",
84
+ "",
85
+ " /trunk/buildNumber.properties"
86
+ ]
87
+ assert_format explines, entries[0], false, 4, true, false, 15
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'svnx/log/entries'
6
+ require 'pvn/revision/entry'
7
+
8
+ require 'resources'
9
+
10
+ module PVN::Revision
11
+ class TestCase < PVN::TestCase
12
+ def setup
13
+ @xmllines = Resources.instance.test_lines '/Programs/wiquery/trunk', "svn", "log", "--xml", "pom.xml"
14
+ end
15
+
16
+ def assert_revision_entry exp_value, value
17
+ rev = PVN::Revision::Entry.new :xmllines => @xmllines, :value => value
18
+ assert_equal exp_value, rev.value
19
+ end
20
+
21
+ def test_absolute_midrange
22
+ assert_revision_entry 733, 733
23
+ end
24
+
25
+ def test_absolute_most_recent
26
+ assert_revision_entry 1907, 1907
27
+ end
28
+
29
+ def test_absolute_least_recent
30
+ assert_revision_entry 412, 412
31
+ end
32
+
33
+ def test_absolute_midrange_as_string
34
+ assert_revision_entry 733, '733'
35
+ end
36
+
37
+ def test_absolute_most_recent_as_string
38
+ assert_revision_entry 1907, '1907'
39
+ end
40
+
41
+ def test_absolute_least_recent_as_string
42
+ assert_revision_entry 412, '412'
43
+ end
44
+
45
+ def test_svn_word
46
+ assert_revision_entry 'HEAD', 'HEAD'
47
+ %w{ HEAD BASE COMMITTED PREV }.each do |word|
48
+ assert_revision_entry word, word
49
+ end
50
+ end
51
+
52
+ def test_negative_most_recent
53
+ assert_revision_entry 1907, -1
54
+ end
55
+
56
+ def test_negative_second_most_recent
57
+ assert_revision_entry 1887, -2
58
+ end
59
+
60
+ def test_negative_least_recent
61
+ assert_revision_entry 412, -34
62
+ end
63
+
64
+ def test_negative_too_far_back
65
+ assert_raises(RuntimeError) do
66
+ assert_revision_entry nil, -35
67
+ end
68
+ end
69
+
70
+ def test_negative_most_recent_as_string
71
+ assert_revision_entry 1907, '-1'
72
+ end
73
+
74
+ def test_negative_second_most_recent_as_string
75
+ assert_revision_entry 1887, '-2'
76
+ end
77
+
78
+ def test_negative_least_recent_as_string
79
+ assert_revision_entry 412, '-34'
80
+ end
81
+
82
+ def test_negative_too_far_back_as_string
83
+ assert_raises(RuntimeError) do
84
+ assert_revision_entry nil, '-35'
85
+ end
86
+ end
87
+
88
+ def test_positive_most_recent
89
+ assert_revision_entry 1907, '+34'
90
+ end
91
+
92
+ def test_positive_second_most_recent
93
+ assert_revision_entry 1887, '+33'
94
+ end
95
+
96
+ def test_positive_least_recent
97
+ assert_revision_entry 412, '+1'
98
+ end
99
+
100
+ def test_positive_too_far_forward
101
+ assert_raises(RuntimeError) do
102
+ assert_revision_entry nil, '+35'
103
+ end
104
+ end
105
+
106
+ def xxxtest_range_svn_word_to_number
107
+ assert_revision_entry 'BASE:1', 'BASE:1'
108
+ end
109
+
110
+ # def test_end
111
+ # class File
112
+ # def initialize args
113
+ # rev = args[:revision]
114
+ # reventry = Revision.new name, rev
115
+ # @revision = reventry.number
116
+ # end
117
+ # end
118
+
119
+ # dir = PVN::IO::File :name => "pom.xml", :revision => "-3"
120
+ # assert_equal 190, dir.revision
121
+ # end
122
+ end
123
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'pvn/subcommands/log/command'
6
+
7
+ module PVN; module App; module Log; end; end; end
8
+
9
+ module PVN::App::Log
10
+ class CommandTest < PVN::TestCase
11
+
12
+ def test_path
13
+ PVN::Subcommands::Log::Command.new %w{ /Programs/wiquery/trunk/pom.xml }
14
+ end
15
+
16
+ def test_invalid_path
17
+ assert_raises(RuntimeError) do
18
+ PVN::Subcommands::Log::Command.new %w{ /this/doesnt/exist }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'pvn/subcommands/log/options'
6
+
7
+ module PVN; module App; module Log; end; end; end
8
+
9
+ module PVN::App::Log
10
+ class OptionsTest < PVN::TestCase
11
+ def assert_options exp, args
12
+ options = PVN::Subcommands::Log::OptionSet.new
13
+ options.process args
14
+
15
+ assert_equal exp[:limit], options.limit
16
+ assert_equal exp[:revision], options.revision
17
+
18
+ exppaths = exp[:path] ? [ exp[:path] ] : exp[:paths]
19
+ assert_equal exppaths, options.paths
20
+ end
21
+
22
+ def test_default
23
+ expdata = Hash.new
24
+ expdata[:limit] = 5
25
+ expdata[:paths] = Array.new
26
+ assert_options expdata, Array.new
27
+ end
28
+
29
+ def test_limit
30
+ expdata = Hash.new
31
+ expdata[:limit] = 15
32
+ expdata[:paths] = Array.new
33
+ assert_options expdata, %w{ --limit 15 }
34
+ end
35
+
36
+ def test_help
37
+ expdata = Hash.new
38
+ expdata[:limit] = 5
39
+ expdata[:revision] = nil
40
+ expdata[:paths] = Array.new
41
+ expdata[:help] = true
42
+ assert_options expdata, %w{ --help }
43
+ end
44
+
45
+ def test_revision_single
46
+ expdata = Hash.new
47
+ expdata[:limit] = nil
48
+ expdata[:revision] = [ '500' ]
49
+ expdata[:path] = '/Programs/wiquery/trunk'
50
+ assert_options expdata, %w{ -r500 /Programs/wiquery/trunk }
51
+ end
52
+
53
+ def test_revision_multi
54
+ expdata = Hash.new
55
+ expdata[:limit] = nil
56
+ expdata[:revision] = [ '500:600' ]
57
+ expdata[:path] = '/Programs/wiquery/trunk'
58
+ assert_options expdata, %w{ -r500:600 /Programs/wiquery/trunk }
59
+ end
60
+
61
+ def test_revision_relative
62
+ expdata = Hash.new
63
+ expdata[:limit] = nil
64
+ expdata[:revision] = [ '1944' ]
65
+ expdata[:path] = '/Programs/wiquery/trunk'
66
+ assert_options expdata, %w{ -5 /Programs/wiquery/trunk }
67
+ end
68
+
69
+ def test_revisions_single
70
+ expdata = Hash.new
71
+ expdata[:limit] = nil
72
+ expdata[:revision] = [ '1', '3' ]
73
+ expdata[:path] = '/Programs/wiquery/trunk'
74
+ assert_options expdata, %w{ -r1 -r3 /Programs/wiquery/trunk }
75
+ end
76
+
77
+ def test_revisions_relative
78
+ expdata = Hash.new
79
+ expdata[:limit] = nil
80
+ expdata[:revision] = [ '1944', '1848' ]
81
+ expdata[:path] = '/Programs/wiquery/trunk'
82
+ assert_options expdata, %w{ -5 -10 /Programs/wiquery/trunk }
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'pvn/subcommands/revision/multiple_revisions_option'
6
+
7
+ module PVN
8
+ class MultipleRevisionsRegexpOptionTestCase < PVN::TestCase
9
+ def test_out_of_range
10
+ assert_raises(RuntimeError) do
11
+ ropt = PVN::MultipleRevisionsRegexpOption.new
12
+ ropt.process [ '-164' ]
13
+ ropt.post_process nil, [ '/Programs/wiquery/trunk' ]
14
+ end
15
+ end
16
+
17
+ def assert_post_process exp, vals, path = '/Programs/wiquery/trunk'
18
+ ropt = PVN::MultipleRevisionsRegexpOption.new
19
+ vals.each do |val|
20
+ ropt.set_value val
21
+ end
22
+ ropt.post_process nil, [ path ]
23
+ act = ropt.value
24
+ assert_equal exp, act, "vals: #{vals}; path: #{path}"
25
+ end
26
+
27
+ def test_post_process_single_middling
28
+ assert_post_process [ '1887' ], [ '-7' ]
29
+ end
30
+
31
+ def test_post_process_single_latest
32
+ assert_post_process [ '1950' ], '-1'
33
+ end
34
+
35
+ def test_post_process_single_oldest
36
+ assert_post_process [ '412' ], '-163'
37
+ end
38
+
39
+ def test_post_process_single_tagval_unconverted
40
+ assert_post_process [ '7' ], '-r7'
41
+ end
42
+
43
+ def test_post_process_single_tagrange_unconverted
44
+ assert_post_process [ '7:177' ], '-r7:177'
45
+ end
46
+
47
+ def test_post_process_multiple_middling
48
+ assert_post_process [ '1887', '1950' ], [ '-7', '-1' ]
49
+ end
50
+
51
+ def test_post_process_multiple_relative_tagval_unconverted
52
+ assert_post_process [ '1944', '7' ], [ '-5', '-r7' ]
53
+ end
54
+
55
+ def assert_process exp, args, path = '/Programs/wiquery/trunk'
56
+ ropt = PVN::MultipleRevisionsRegexpOption.new
57
+ ropt.process args
58
+ ropt.post_process nil, [ path ]
59
+ act = ropt.value
60
+ assert_equal exp, act, "args: #{args}; path: #{path}"
61
+ end
62
+
63
+ def test_process_tag_value
64
+ assert_process %w{ 317 }, %w{ -r 317 }
65
+ end
66
+ end
67
+ end