glib2 0.90.8 → 0.90.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. data/ChangeLog +44 -0
  2. data/Rakefile +1 -0
  3. data/ext/glib2/rbglib.h +1 -1
  4. data/ext/glib2/rbglib_iochannel.c +15 -6
  5. data/ext/glib2/rbgobj_signal.c +1 -1
  6. data/ext/glib2/rbgobject.h +1 -1
  7. data/lib/gnome2-raketask.rb +4 -2
  8. data/lib/mkmf-gnome2.rb +47 -23
  9. data/test/glib-test-init.rb +1 -3
  10. metadata +20 -121
  11. data/test-unit/COPYING +0 -56
  12. data/test-unit/GPL +0 -340
  13. data/test-unit/History.txt +0 -279
  14. data/test-unit/Manifest.txt +0 -110
  15. data/test-unit/PSFL +0 -271
  16. data/test-unit/README.txt +0 -75
  17. data/test-unit/Rakefile +0 -53
  18. data/test-unit/TODO +0 -5
  19. data/test-unit/bin/testrb +0 -5
  20. data/test-unit/html/bar.png +0 -0
  21. data/test-unit/html/bar.svg +0 -153
  22. data/test-unit/html/developer.png +0 -0
  23. data/test-unit/html/developer.svg +0 -469
  24. data/test-unit/html/famfamfam-logo.png +0 -0
  25. data/test-unit/html/favicon.ico +0 -0
  26. data/test-unit/html/favicon.png +0 -0
  27. data/test-unit/html/favicon.svg +0 -82
  28. data/test-unit/html/heading-mark.png +0 -0
  29. data/test-unit/html/heading-mark.svg +0 -393
  30. data/test-unit/html/index.html +0 -285
  31. data/test-unit/html/index.html.ja +0 -299
  32. data/test-unit/html/install.png +0 -0
  33. data/test-unit/html/install.svg +0 -636
  34. data/test-unit/html/jp.png +0 -0
  35. data/test-unit/html/kinotan-failure.png +0 -0
  36. data/test-unit/html/kinotan-pass.png +0 -0
  37. data/test-unit/html/logo.png +0 -0
  38. data/test-unit/html/logo.svg +0 -483
  39. data/test-unit/html/reference.png +0 -0
  40. data/test-unit/html/rubyforge.png +0 -0
  41. data/test-unit/html/tango-logo.png +0 -0
  42. data/test-unit/html/test-unit.css +0 -339
  43. data/test-unit/html/tutorial.png +0 -0
  44. data/test-unit/html/tutorial.svg +0 -559
  45. data/test-unit/html/us.png +0 -0
  46. data/test-unit/images/color-diff.png +0 -0
  47. data/test-unit/lib/test/unit.rb +0 -328
  48. data/test-unit/lib/test/unit/assertionfailederror.rb +0 -25
  49. data/test-unit/lib/test/unit/assertions.rb +0 -1792
  50. data/test-unit/lib/test/unit/attribute.rb +0 -125
  51. data/test-unit/lib/test/unit/autorunner.rb +0 -415
  52. data/test-unit/lib/test/unit/collector.rb +0 -38
  53. data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
  54. data/test-unit/lib/test/unit/collector/dir.rb +0 -108
  55. data/test-unit/lib/test/unit/collector/load.rb +0 -187
  56. data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
  57. data/test-unit/lib/test/unit/collector/xml.rb +0 -250
  58. data/test-unit/lib/test/unit/color-scheme.rb +0 -106
  59. data/test-unit/lib/test/unit/color.rb +0 -96
  60. data/test-unit/lib/test/unit/diff.rb +0 -740
  61. data/test-unit/lib/test/unit/error.rb +0 -131
  62. data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
  63. data/test-unit/lib/test/unit/failure.rb +0 -136
  64. data/test-unit/lib/test/unit/fixture.rb +0 -185
  65. data/test-unit/lib/test/unit/notification.rb +0 -129
  66. data/test-unit/lib/test/unit/omission.rb +0 -191
  67. data/test-unit/lib/test/unit/pending.rb +0 -150
  68. data/test-unit/lib/test/unit/priority.rb +0 -180
  69. data/test-unit/lib/test/unit/runner/console.rb +0 -52
  70. data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
  71. data/test-unit/lib/test/unit/runner/tap.rb +0 -8
  72. data/test-unit/lib/test/unit/runner/xml.rb +0 -15
  73. data/test-unit/lib/test/unit/testcase.rb +0 -515
  74. data/test-unit/lib/test/unit/testresult.rb +0 -125
  75. data/test-unit/lib/test/unit/testsuite.rb +0 -134
  76. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
  77. data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -467
  78. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -63
  79. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +0 -82
  80. data/test-unit/lib/test/unit/ui/testrunner.rb +0 -53
  81. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -86
  82. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
  83. data/test-unit/lib/test/unit/ui/xml/testrunner.rb +0 -224
  84. data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -42
  85. data/test-unit/lib/test/unit/util/method-owner-finder.rb +0 -28
  86. data/test-unit/lib/test/unit/util/observable.rb +0 -90
  87. data/test-unit/lib/test/unit/util/output.rb +0 -31
  88. data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
  89. data/test-unit/lib/test/unit/version.rb +0 -7
  90. data/test-unit/sample/adder.rb +0 -13
  91. data/test-unit/sample/subtracter.rb +0 -12
  92. data/test-unit/sample/test_adder.rb +0 -20
  93. data/test-unit/sample/test_subtracter.rb +0 -20
  94. data/test-unit/sample/test_user.rb +0 -23
  95. data/test-unit/test/collector/test-descendant.rb +0 -133
  96. data/test-unit/test/collector/test-load.rb +0 -442
  97. data/test-unit/test/collector/test_dir.rb +0 -406
  98. data/test-unit/test/collector/test_objectspace.rb +0 -100
  99. data/test-unit/test/run-test.rb +0 -22
  100. data/test-unit/test/test-assertions.rb +0 -1849
  101. data/test-unit/test/test-attribute.rb +0 -86
  102. data/test-unit/test/test-color-scheme.rb +0 -69
  103. data/test-unit/test/test-color.rb +0 -47
  104. data/test-unit/test/test-diff.rb +0 -518
  105. data/test-unit/test/test-emacs-runner.rb +0 -60
  106. data/test-unit/test/test-fixture.rb +0 -324
  107. data/test-unit/test/test-notification.rb +0 -33
  108. data/test-unit/test/test-omission.rb +0 -81
  109. data/test-unit/test/test-pending.rb +0 -70
  110. data/test-unit/test/test-priority.rb +0 -119
  111. data/test-unit/test/test-testcase.rb +0 -569
  112. data/test-unit/test/test_error.rb +0 -26
  113. data/test-unit/test/test_failure.rb +0 -33
  114. data/test-unit/test/test_testresult.rb +0 -113
  115. data/test-unit/test/test_testsuite.rb +0 -137
  116. data/test-unit/test/testunit-test-util.rb +0 -14
  117. data/test-unit/test/ui/test_tap.rb +0 -33
  118. data/test-unit/test/ui/test_testrunmediator.rb +0 -20
  119. data/test-unit/test/util/test-method-owner-finder.rb +0 -38
  120. data/test-unit/test/util/test-output.rb +0 -11
  121. data/test-unit/test/util/test_backtracefilter.rb +0 -41
  122. data/test-unit/test/util/test_observable.rb +0 -102
  123. data/test-unit/test/util/test_procwrapper.rb +0 -36
@@ -1,125 +0,0 @@
1
- #--
2
- # Author:: Nathaniel Talbott.
3
- # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
4
- # License:: Ruby license.
5
-
6
- require 'test/unit/util/observable'
7
- require 'test/unit/failure'
8
- require 'test/unit/error'
9
- require 'test/unit/omission'
10
- require 'test/unit/pending'
11
- require 'test/unit/notification'
12
-
13
- module Test
14
- module Unit
15
- module NullResultContainerInitializer
16
- private
17
- def initialize_containers
18
- end
19
- end
20
-
21
- # Collects Test::Unit::Failure and Test::Unit::Error so that
22
- # they can be displayed to the user. To this end, observers
23
- # can be added to it, allowing the dynamic updating of, say, a
24
- # UI.
25
- class TestResult
26
- include Util::Observable
27
- include NullResultContainerInitializer
28
- include TestResultFailureSupport
29
- include TestResultErrorSupport
30
- include TestResultPendingSupport
31
- include TestResultOmissionSupport
32
- include TestResultNotificationSupport
33
-
34
- FINISHED = name + "::FINISHED"
35
- CHANGED = name + "::CHANGED"
36
- PASS_ASSERTION = name + "::PASS_ASSERTION"
37
- FAULT = name + "::FAULT"
38
-
39
- attr_reader :run_count, :pass_count, :assertion_count, :faults
40
-
41
- # Constructs a new, empty TestResult.
42
- def initialize
43
- @run_count, @pass_count, @assertion_count = 0, 0, 0
44
- @summary_generators = []
45
- @problem_checkers = []
46
- @faults = []
47
- initialize_containers
48
- end
49
-
50
- # Records a test run.
51
- def add_run
52
- @run_count += 1
53
- notify_listeners(FINISHED, self)
54
- notify_changed
55
- end
56
-
57
- def add_pass
58
- @pass_count += 1
59
- end
60
-
61
- # Records an individual assertion.
62
- def add_assertion
63
- @assertion_count += 1
64
- notify_listeners(PASS_ASSERTION, self)
65
- notify_changed
66
- end
67
-
68
- # Returns a string contain the recorded runs, assertions,
69
- # failures and errors in this TestResult.
70
- def summary
71
- ["#{run_count} tests",
72
- "#{assertion_count} assertions",
73
- *@summary_generators.collect {|generator| send(generator)}].join(", ")
74
- end
75
-
76
- # Returnes a string that shows result status.
77
- def status
78
- if passed?
79
- if pending_count > 0
80
- "pending"
81
- elsif omission_count > 0
82
- "omission"
83
- elsif notification_count > 0
84
- "notification"
85
- else
86
- "pass"
87
- end
88
- elsif error_count > 0
89
- "error"
90
- elsif failure_count > 0
91
- "failure"
92
- end
93
- end
94
-
95
- def to_s
96
- summary
97
- end
98
-
99
- # Returns whether or not this TestResult represents
100
- # successful completion.
101
- def passed?
102
- @problem_checkers.all? {|checker| not send(checker)}
103
- end
104
-
105
- def pass_percentage
106
- n_tests = @run_count - omission_count
107
- if n_tests.zero?
108
- 0
109
- else
110
- 100.0 * (@pass_count / n_tests.to_f)
111
- end
112
- end
113
-
114
- private
115
- def notify_changed
116
- notify_listeners(CHANGED, self)
117
- end
118
-
119
- def notify_fault(fault)
120
- @faults << fault
121
- notify_listeners(FAULT, fault)
122
- end
123
- end
124
- end
125
- end
@@ -1,134 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
- # Copyright:: Copyright (c) 2008-2011 Kouhei Sutou. All rights reserved.
6
- # License:: Ruby license.
7
-
8
- require 'test/unit/error'
9
-
10
- module Test
11
- module Unit
12
-
13
- # A collection of tests which can be #run.
14
- #
15
- # Note: It is easy to confuse a TestSuite instance with
16
- # something that has a static suite method; I know because _I_
17
- # have trouble keeping them straight. Think of something that
18
- # has a suite method as simply providing a way to get a
19
- # meaningful TestSuite instance.
20
- class TestSuite
21
- attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
22
-
23
- # Test suite that has higher priority is ran prior to
24
- # test suites that have lower priority.
25
- attr_accessor :priority
26
-
27
- STARTED = name + "::STARTED"
28
- STARTED_OBJECT = name + "::STARTED::OBJECT"
29
- FINISHED = name + "::FINISHED"
30
- FINISHED_OBJECT = name + "::FINISHED::OBJECT"
31
-
32
- # Creates a new TestSuite with the given name.
33
- def initialize(name="Unnamed TestSuite", test_case=nil)
34
- @name = name
35
- @tests = []
36
- @test_case = test_case
37
- @n_tests = 0
38
- @priority = 0
39
- @start_time = nil
40
- @elapsed_time = nil
41
- @passed = true
42
- end
43
-
44
- # Runs the tests and/or suites contained in this
45
- # TestSuite.
46
- def run(result, &progress_block)
47
- @start_time = Time.now
48
- yield(STARTED, name)
49
- yield(STARTED_OBJECT, self)
50
- run_startup(result)
51
- while test = @tests.shift
52
- @n_tests += test.size
53
- test.run(result, &progress_block)
54
- @passed = false unless test.passed?
55
- end
56
- run_shutdown(result)
57
- ensure
58
- @elapsed_time = Time.now - @start_time
59
- yield(FINISHED, name)
60
- yield(FINISHED_OBJECT, self)
61
- end
62
-
63
- # Adds the test to the suite.
64
- def <<(test)
65
- @tests << test
66
- self
67
- end
68
-
69
- def delete(test)
70
- @tests.delete(test)
71
- end
72
-
73
- # Retuns the rolled up number of tests in this suite;
74
- # i.e. if the suite contains other suites, it counts the
75
- # tests within those suites, not the suites themselves.
76
- def size
77
- total_size = @n_tests
78
- @tests.each { |test| total_size += test.size }
79
- total_size
80
- end
81
-
82
- def empty?
83
- tests.empty?
84
- end
85
-
86
- # Overridden to return the name given the suite at
87
- # creation.
88
- def to_s
89
- @name
90
- end
91
-
92
- # It's handy to be able to compare TestSuite instances.
93
- def ==(other)
94
- return false unless(other.kind_of?(self.class))
95
- return false unless(@name == other.name)
96
- @tests == other.tests
97
- end
98
-
99
- def passed?
100
- @passed
101
- end
102
-
103
- private
104
- def run_startup(result)
105
- return if @test_case.nil? or !@test_case.respond_to?(:startup)
106
- begin
107
- @test_case.startup
108
- rescue Exception
109
- raise unless handle_exception($!, result)
110
- end
111
- end
112
-
113
- def run_shutdown(result)
114
- return if @test_case.nil? or !@test_case.respond_to?(:shutdown)
115
- begin
116
- @test_case.shutdown
117
- rescue Exception
118
- raise unless handle_exception($!, result)
119
- end
120
- end
121
-
122
- def handle_exception(exception, result)
123
- case exception
124
- when *ErrorHandler::PASS_THROUGH_EXCEPTIONS
125
- false
126
- else
127
- result.add_error(Error.new(@test_case.name, exception))
128
- @passed = false
129
- true
130
- end
131
- end
132
- end
133
- end
134
- end
@@ -1,14 +0,0 @@
1
- module Test
2
- module Unit
3
- module UI
4
- module Console
5
- module OutputLevel
6
- SILENT = 0
7
- PROGRESS_ONLY = 1
8
- NORMAL = 2
9
- VERBOSE = 3
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,467 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright::
5
- # * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
6
- # * Copyright (c) 2008-2009 Kouhei Sutou <kou@clear-code.com>
7
- # License:: Ruby license.
8
-
9
- require 'test/unit/color-scheme'
10
- require 'test/unit/ui/testrunner'
11
- require 'test/unit/ui/testrunnermediator'
12
- require 'test/unit/ui/console/outputlevel'
13
-
14
- module Test
15
- module Unit
16
- module UI
17
- module Console
18
-
19
- # Runs a Test::Unit::TestSuite on the console.
20
- class TestRunner < UI::TestRunner
21
- include OutputLevel
22
-
23
- # Creates a new TestRunner for running the passed
24
- # suite. If quiet_mode is true, the output while
25
- # running is limited to progress dots, errors and
26
- # failures, and the final result. io specifies
27
- # where runner output should go to; defaults to
28
- # STDOUT.
29
- def initialize(suite, options={})
30
- super
31
- @output_level = @options[:output_level] || NORMAL
32
- @output = @options[:output] || STDOUT
33
- @use_color = @options[:use_color]
34
- @use_color = guess_color_availability if @use_color.nil?
35
- @color_scheme = @options[:color_scheme] || ColorScheme.default
36
- @reset_color = Color.new("reset")
37
- @progress_row = 0
38
- @progress_row_max = @options[:progress_row_max]
39
- @progress_row_max ||= guess_progress_row_max
40
- @already_outputted = false
41
- @indent = 0
42
- @top_level = true
43
- @faults = []
44
- end
45
-
46
- private
47
- def setup_mediator
48
- super
49
- output_setup_end
50
- end
51
-
52
- def output_setup_end
53
- suite_name = @suite.to_s
54
- suite_name = @suite.name if @suite.kind_of?(Module)
55
- output("Loaded suite #{suite_name}")
56
- end
57
-
58
- def attach_to_mediator
59
- @mediator.add_listener(TestResult::FAULT,
60
- &method(:add_fault))
61
- @mediator.add_listener(TestRunnerMediator::STARTED,
62
- &method(:started))
63
- @mediator.add_listener(TestRunnerMediator::FINISHED,
64
- &method(:finished))
65
- @mediator.add_listener(TestCase::STARTED_OBJECT,
66
- &method(:test_started))
67
- @mediator.add_listener(TestCase::FINISHED_OBJECT,
68
- &method(:test_finished))
69
- @mediator.add_listener(TestSuite::STARTED_OBJECT,
70
- &method(:test_suite_started))
71
- @mediator.add_listener(TestSuite::FINISHED_OBJECT,
72
- &method(:test_suite_finished))
73
- end
74
-
75
- def add_fault(fault)
76
- @faults << fault
77
- output_progress(fault.single_character_display, fault_color(fault))
78
- @already_outputted = true if fault.critical?
79
- end
80
-
81
- def started(result)
82
- @result = result
83
- output_started
84
- end
85
-
86
- def output_started
87
- output("Started")
88
- end
89
-
90
- def finished(elapsed_time)
91
- nl if output?(NORMAL) and !output?(VERBOSE)
92
- @faults.each_with_index do |fault, index|
93
- nl
94
- output_single("%3d) " % (index + 1))
95
- output_fault(fault)
96
- end
97
- nl
98
- output("Finished in #{elapsed_time} seconds.")
99
- nl
100
- output(@result, result_color)
101
- output("%g%% passed" % @result.pass_percentage, result_color)
102
- unless elapsed_time.zero?
103
- nl
104
- throuputs =
105
- [
106
- "%.2f tests/s" % [@result.run_count / elapsed_time],
107
- "%.2f assertions/s" % [@result.assertion_count / elapsed_time],
108
- ]
109
- output(throuputs.join(", "))
110
- end
111
- end
112
-
113
- def output_fault(fault)
114
- if @use_color and fault.is_a?(Failure) and
115
- fault.inspected_expected and fault.inspected_actual
116
- output_single(fault.label, fault_color(fault))
117
- output(":")
118
- output_fault_backtrace(fault)
119
- output_fault_message(fault)
120
- else
121
- label, detail = format_fault(fault).split(/\r?\n/, 2)
122
- output(label, fault_color(fault))
123
- output(detail)
124
- end
125
- end
126
-
127
- def output_fault_backtrace(fault)
128
- backtrace = fault.location
129
- if backtrace.size == 1
130
- output(fault.test_name +
131
- backtrace[0].sub(/\A(.+:\d+).*/, ' [\\1]') +
132
- ":")
133
- else
134
- output(fault.test_name)
135
- backtrace.each_with_index do |entry, i|
136
- if i.zero?
137
- prefix = "["
138
- postfix = ""
139
- elsif i == backtrace.size - 1
140
- prefix = " "
141
- postfix = "]:"
142
- else
143
- prefix = " "
144
- postfix = ""
145
- end
146
- output(" #{prefix}#{entry}#{postfix}")
147
- end
148
- end
149
- end
150
-
151
- def output_fault_message(fault)
152
- if fault.expected.respond_to?(:encoding) and
153
- fault.actual.respond_to?(:encoding) and
154
- fault.expected.encoding != fault.actual.encoding
155
- need_encoding = true
156
- else
157
- need_encoding = false
158
- end
159
- output(fault.user_message) if fault.user_message
160
- output_single("<")
161
- output_single(fault.inspected_expected, color("pass"))
162
- output_single(">")
163
- if need_encoding
164
- output_single("(")
165
- output_single(fault.expected.encoding.name, color("pass"))
166
- output_single(")")
167
- end
168
- output(" expected but was")
169
- output_single("<")
170
- output_single(fault.inspected_actual, color("failure"))
171
- output_single(">")
172
- if need_encoding
173
- output_single("(")
174
- output_single(fault.actual.encoding.name, color("failure"))
175
- output_single(")")
176
- end
177
- output("")
178
- from, to = prepare_for_diff(fault.expected, fault.actual)
179
- if from and to
180
- from_lines = from.split(/\r?\n/)
181
- to_lines = to.split(/\r?\n/)
182
- if need_encoding
183
- from_lines << ""
184
- to_lines << ""
185
- from_lines << "Encoding: #{fault.expected.encoding.name}"
186
- to_lines << "Encoding: #{fault.actual.encoding.name}"
187
- end
188
- differ = ColorizedReadableDiffer.new(from_lines, to_lines, self)
189
- if differ.need_diff?
190
- output("")
191
- output("diff:")
192
- differ.diff
193
- end
194
- end
195
- end
196
-
197
- def format_fault(fault)
198
- fault.long_display
199
- end
200
-
201
- def test_started(test)
202
- return unless output?(VERBOSE)
203
-
204
- name = test.name.sub(/\(.+?\)\z/, '')
205
- right_space = 8 * 2
206
- left_space = @progress_row_max - right_space
207
- left_space = left_space - indent.size - name.size
208
- tab_stop = "\t" * ([left_space - 1, 0].max / 8)
209
- output_single("#{indent}#{name}:#{tab_stop}", nil, VERBOSE)
210
- @test_start = Time.now
211
- end
212
-
213
- def test_finished(test)
214
- unless @already_outputted
215
- output_progress(".", color("pass"))
216
- end
217
- @already_outputted = false
218
-
219
- return unless output?(VERBOSE)
220
-
221
- output(": (%f)" % (Time.now - @test_start), nil, VERBOSE)
222
- end
223
-
224
- def test_suite_started(suite)
225
- if @top_level
226
- @top_level = false
227
- return
228
- end
229
-
230
- output_single(indent, nil, VERBOSE)
231
- if suite.test_case.nil?
232
- _color = color("suite")
233
- else
234
- _color = color("case")
235
- end
236
- output_single(suite.name, _color, VERBOSE)
237
- output(": ", nil, VERBOSE)
238
- @indent += 2
239
- end
240
-
241
- def test_suite_finished(suite)
242
- @indent -= 2
243
- end
244
-
245
- def indent
246
- if output?(VERBOSE)
247
- " " * @indent
248
- else
249
- ""
250
- end
251
- end
252
-
253
- def nl(level=NORMAL)
254
- output("", nil, level)
255
- end
256
-
257
- def output(something, color=nil, level=NORMAL)
258
- return unless output?(level)
259
- output_single(something, color, level)
260
- @output.puts
261
- end
262
-
263
- def output_single(something, color=nil, level=NORMAL)
264
- return false unless output?(level)
265
- if @use_color and color
266
- something = "%s%s%s" % [color.escape_sequence,
267
- something,
268
- @reset_color.escape_sequence]
269
- end
270
- @output.write(something)
271
- @output.flush
272
- true
273
- end
274
-
275
- def output_progress(mark, color=nil)
276
- if output_single(mark, color, PROGRESS_ONLY)
277
- return unless @progress_row_max > 0
278
- @progress_row += mark.size
279
- if @progress_row >= @progress_row_max
280
- nl unless @output_level == VERBOSE
281
- @progress_row = 0
282
- end
283
- end
284
- end
285
-
286
- def output?(level)
287
- level <= @output_level
288
- end
289
-
290
- def color(name)
291
- _color = @color_scheme[name]
292
- _color ||= @color_scheme["success"] if name == "pass"
293
- _color ||= ColorScheme.default[name]
294
- _color
295
- end
296
-
297
- def fault_color(fault)
298
- color(fault.class.name.split(/::/).last.downcase)
299
- end
300
-
301
- def result_color
302
- color(@result.status)
303
- end
304
-
305
- def guess_color_availability
306
- return false unless @output.tty?
307
- case ENV["TERM"]
308
- when /term(?:-color)?\z/, "screen"
309
- true
310
- else
311
- return true if ENV["EMACS"] == "t"
312
- false
313
- end
314
- end
315
-
316
- def guess_progress_row_max
317
- term_width = guess_term_width
318
- if term_width.zero?
319
- if ENV["EMACS"] == "t"
320
- -1
321
- else
322
- 79
323
- end
324
- else
325
- term_width
326
- end
327
- end
328
-
329
- def guess_term_width
330
- Integer(ENV["COLUMNS"] || ENV["TERM_WIDTH"] || 0)
331
- rescue ArgumentError
332
- 0
333
- end
334
- end
335
-
336
- class ColorizedReadableDiffer < Diff::ReadableDiffer
337
- def initialize(from, to, runner)
338
- @runner = runner
339
- super(from, to)
340
- end
341
-
342
- def need_diff?(options={})
343
- operations.each do |tag,|
344
- return true if [:replace, :equal].include?(tag)
345
- end
346
- false
347
- end
348
-
349
- private
350
- def output_single(something, color=nil)
351
- @runner.send(:output_single, something, color)
352
- end
353
-
354
- def output(something, color=nil)
355
- @runner.send(:output, something, color)
356
- end
357
-
358
- def color(name)
359
- @runner.send(:color, name)
360
- end
361
-
362
- def cut_off_ratio
363
- 0
364
- end
365
-
366
- def default_ratio
367
- 0
368
- end
369
-
370
- def tag(mark, color_name, contents)
371
- _color = color(color_name)
372
- contents.each do |content|
373
- output_single(mark, _color)
374
- output_single(" ")
375
- output(content)
376
- end
377
- end
378
-
379
- def tag_deleted(contents)
380
- tag("-", "diff-deleted-tag", contents)
381
- end
382
-
383
- def tag_inserted(contents)
384
- tag("+", "diff-inserted-tag", contents)
385
- end
386
-
387
- def tag_equal(contents)
388
- tag(" ", "normal", contents)
389
- end
390
-
391
- def tag_difference(contents)
392
- tag("?", "diff-difference-tag", contents)
393
- end
394
-
395
- def diff_line(from_line, to_line)
396
- to_operations = []
397
- from_line, to_line, _operations = line_operations(from_line, to_line)
398
-
399
- no_replace = true
400
- _operations.each do |tag,|
401
- if tag == :replace
402
- no_replace = false
403
- break
404
- end
405
- end
406
-
407
- output_single("?", color("diff-difference-tag"))
408
- output_single(" ")
409
- _operations.each do |tag, from_start, from_end, to_start, to_end|
410
- from_width = compute_width(from_line, from_start, from_end)
411
- to_width = compute_width(to_line, to_start, to_end)
412
- case tag
413
- when :replace
414
- output_single(from_line[from_start...from_end],
415
- color("diff-deleted"))
416
- if (from_width < to_width)
417
- output_single(" " * (to_width - from_width))
418
- end
419
- to_operations << Proc.new do
420
- output_single(to_line[to_start...to_end],
421
- color("diff-inserted"))
422
- if (to_width < from_width)
423
- output_single(" " * (from_width - to_width))
424
- end
425
- end
426
- when :delete
427
- output_single(from_line[from_start...from_end],
428
- color("diff-deleted"))
429
- unless no_replace
430
- to_operations << Proc.new {output_single(" " * from_width)}
431
- end
432
- when :insert
433
- if no_replace
434
- output_single(to_line[to_start...to_end],
435
- color("diff-inserted"))
436
- else
437
- output_single(" " * to_width)
438
- to_operations << Proc.new do
439
- output_single(to_line[to_start...to_end],
440
- color("diff-inserted"))
441
- end
442
- end
443
- when :equal
444
- output_single(from_line[from_start...from_end])
445
- unless no_replace
446
- to_operations << Proc.new {output_single(" " * to_width)}
447
- end
448
- else
449
- raise "unknown tag: #{tag}"
450
- end
451
- end
452
- output("")
453
-
454
- unless to_operations.empty?
455
- output_single("?", color("diff-difference-tag"))
456
- output_single(" ")
457
- to_operations.each do |operation|
458
- operation.call
459
- end
460
- output("")
461
- end
462
- end
463
- end
464
- end
465
- end
466
- end
467
- end