rroonga 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS.ja.rdoc +47 -0
- data/NEWS.rdoc +48 -0
- data/README.ja.rdoc +1 -0
- data/README.rdoc +1 -0
- data/Rakefile +32 -13
- data/benchmark/create-wikipedia-database.rb +212 -0
- data/benchmark/repeat-load.rb +213 -0
- data/benchmark/select.rb +1052 -0
- data/ext/groonga/mkmf.log +99 -0
- data/ext/groonga/rb-grn-column.c +57 -6
- data/ext/groonga/rb-grn-context.c +15 -9
- data/ext/groonga/rb-grn-expression.c +7 -7
- data/ext/groonga/{rb-grn-operation.c → rb-grn-operator.c} +89 -87
- data/ext/groonga/rb-grn-patricia-trie.c +5 -5
- data/ext/groonga/rb-grn-query.c +4 -4
- data/ext/groonga/rb-grn-table.c +16 -19
- data/ext/groonga/rb-grn.h +3 -3
- data/ext/groonga/rb-groonga.c +1 -1
- data/html/index.html +4 -4
- data/lib/groonga/context.rb +34 -0
- data/lib/groonga/expression-builder.rb +34 -2
- data/lib/groonga/record.rb +8 -6
- data/lib/groonga/schema.rb +40 -4
- data/rroonga-build.rb +2 -2
- data/test-unit/Rakefile +5 -18
- data/test-unit/html/classic.html +15 -0
- data/test-unit/html/index.html +13 -235
- data/test-unit/html/index.html.ja +15 -258
- data/test-unit/lib/test/unit.rb +1 -6
- data/test-unit/lib/test/unit/assertions.rb +11 -115
- data/test-unit/lib/test/unit/autorunner.rb +2 -5
- data/test-unit/lib/test/unit/collector/load.rb +1 -1
- data/test-unit/lib/test/unit/color-scheme.rb +2 -6
- data/test-unit/lib/test/unit/diff.rb +1 -17
- data/test-unit/lib/test/unit/testcase.rb +0 -7
- data/test-unit/lib/test/unit/testresult.rb +2 -34
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +45 -9
- data/test-unit/lib/test/unit/ui/tap/testrunner.rb +12 -2
- data/test-unit/lib/test/unit/ui/testrunner.rb +0 -25
- data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -1
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/test/test-color-scheme.rb +2 -4
- data/test-unit/test/test_assertions.rb +5 -51
- data/test/test-column.rb +31 -1
- data/test/test-context-select.rb +45 -14
- data/test/test-context.rb +36 -0
- data/test/test-database.rb +13 -0
- data/test/test-expression-builder.rb +32 -5
- data/test/test-record.rb +34 -1
- data/test/test-schema.rb +52 -2
- data/test/test-table-select-weight.rb +20 -1
- data/test/test-table.rb +58 -0
- metadata +13 -41
- data/test-unit-notify/Rakefile +0 -47
- data/test-unit-notify/lib/test/unit/notify.rb +0 -104
- data/test-unit/COPYING +0 -56
- data/test-unit/GPL +0 -340
- data/test-unit/PSFL +0 -271
- data/test-unit/html/bar.svg +0 -153
- data/test-unit/html/developer.svg +0 -469
- data/test-unit/html/favicon.ico +0 -0
- data/test-unit/html/favicon.svg +0 -82
- data/test-unit/html/heading-mark.svg +0 -393
- data/test-unit/html/install.svg +0 -636
- data/test-unit/html/logo.svg +0 -483
- data/test-unit/html/test-unit.css +0 -339
- data/test-unit/html/tutorial.svg +0 -559
- data/test-unit/lib/test/unit/util/output.rb +0 -31
- data/test-unit/test/ui/test_tap.rb +0 -33
- data/test-unit/test/util/test-output.rb +0 -11
data/test-unit/lib/test/unit.rb
CHANGED
@@ -90,13 +90,8 @@ module Test # :nodoc:
|
|
90
90
|
#
|
91
91
|
# Test::Unit is copyright (c) 2000-2003 Nathaniel Talbott. It is free
|
92
92
|
# software, and is distributed under the Ruby license. See the COPYING
|
93
|
-
# file.
|
93
|
+
# file in the standard Ruby distribution for details.
|
94
94
|
#
|
95
|
-
# Exception: lib/test/unit/diff.rb is copyright (c)
|
96
|
-
# 2008-2010 Kouhei Sutou and 2001-2008 Python Software
|
97
|
-
# Foundation. It is free software, and is distributed
|
98
|
-
# under the Ruby license and/or the PSF license. See the
|
99
|
-
# COPYING file and PSFL file.
|
100
95
|
#
|
101
96
|
# == Warranty
|
102
97
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Author:: Nathaniel Talbott.
|
2
2
|
# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
3
|
-
# Copyright (c) 2009
|
3
|
+
# Copyright (c) 2009 Kouhei Sutou.
|
4
4
|
# License:: Ruby license.
|
5
5
|
|
6
6
|
require 'test/unit/assertionfailederror'
|
@@ -80,23 +80,10 @@ module Test
|
|
80
80
|
public
|
81
81
|
def assert_equal(expected, actual, message=nil)
|
82
82
|
diff = AssertionMessage.delayed_diff(expected, actual)
|
83
|
-
|
84
|
-
actual.respond_to?(:encoding) and
|
85
|
-
expected.encoding != actual.encoding
|
86
|
-
format = <<EOT
|
87
|
-
<?>(?) expected but was
|
88
|
-
<?>(?).?
|
89
|
-
EOT
|
90
|
-
full_message = build_message(message, format,
|
91
|
-
expected, expected.encoding.name,
|
92
|
-
actual, actual.encoding.name,
|
93
|
-
diff)
|
94
|
-
else
|
95
|
-
full_message = build_message(message, <<EOT, expected, actual, diff)
|
83
|
+
full_message = build_message(message, <<EOT, expected, actual, diff)
|
96
84
|
<?> expected but was
|
97
85
|
<?>.?
|
98
86
|
EOT
|
99
|
-
end
|
100
87
|
begin
|
101
88
|
assert_block(full_message) { expected == actual }
|
102
89
|
rescue AssertionFailedError => failure
|
@@ -552,73 +539,18 @@ EOT
|
|
552
539
|
public
|
553
540
|
def assert_in_delta(expected_float, actual_float, delta, message="")
|
554
541
|
_wrap_assertion do
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
(expected_float.to_f - actual_float.to_f).abs <= delta.to_f
|
564
|
-
end
|
565
|
-
end
|
566
|
-
end
|
567
|
-
|
568
|
-
# :stopdoc:
|
569
|
-
private
|
570
|
-
def _assert_in_delta_validate_arguments(expected_float,
|
571
|
-
actual_float,
|
572
|
-
delta)
|
573
|
-
{
|
574
|
-
expected_float => "first float",
|
575
|
-
actual_float => "second float",
|
576
|
-
delta => "delta"
|
577
|
-
}.each do |float, name|
|
578
|
-
assert_respond_to(float, :to_f,
|
579
|
-
"The arguments must respond to to_f; " +
|
580
|
-
"the #{name} did not")
|
581
|
-
end
|
582
|
-
assert_operator(delta, :>=, 0.0, "The delta should not be negative")
|
583
|
-
end
|
584
|
-
|
585
|
-
def _assert_in_delta_message(expected_float, actual_float, delta,
|
586
|
-
message)
|
587
|
-
format = <<-EOT
|
588
|
-
<?> expected but was
|
589
|
-
<?> (tolerance <?>).
|
542
|
+
{expected_float => "first float", actual_float => "second float", delta => "delta"}.each do |float, name|
|
543
|
+
assert_respond_to(float, :to_f, "The arguments must respond to to_f; the #{name} did not")
|
544
|
+
end
|
545
|
+
assert_operator(delta, :>=, 0.0, "The delta should not be negative")
|
546
|
+
full_message = build_message(message, <<EOT, expected_float, actual_float, delta)
|
547
|
+
<?> and
|
548
|
+
<?> expected to be within
|
549
|
+
<?> of each other.
|
590
550
|
EOT
|
591
|
-
|
592
|
-
normalized_expected = expected_float.to_f
|
593
|
-
normalized_actual = actual_float.to_f
|
594
|
-
normalized_delta = delta.to_f
|
595
|
-
relation_format = nil
|
596
|
-
relation_arguments = nil
|
597
|
-
if normalized_actual < normalized_expected - normalized_delta
|
598
|
-
relation_format = "<<?> < <?>-<?>(?) <= <?>+<?>(?)>"
|
599
|
-
relation_arguments = [actual_float,
|
600
|
-
expected_float, delta, expected_float - delta,
|
601
|
-
expected_float, delta, expected_float + delta]
|
602
|
-
elsif normalized_expected - normalized_delta < normalized_actual
|
603
|
-
relation_format = "<<?>-<?>(?) <= <?>+<?>(?) < <?>>"
|
604
|
-
relation_arguments = [expected_float, delta, expected_float - delta,
|
605
|
-
expected_float, delta, expected_float + delta,
|
606
|
-
actual_float]
|
551
|
+
assert_block(full_message) { (expected_float.to_f - actual_float.to_f).abs <= delta.to_f }
|
607
552
|
end
|
608
|
-
|
609
|
-
if relation_format
|
610
|
-
format << <<-EOT
|
611
|
-
|
612
|
-
Relation:
|
613
|
-
#{relation_format}
|
614
|
-
EOT
|
615
|
-
arguments.concat(relation_arguments)
|
616
|
-
end
|
617
|
-
|
618
|
-
build_message(message, format, *arguments)
|
619
553
|
end
|
620
|
-
public
|
621
|
-
# :startdoc:
|
622
554
|
|
623
555
|
##
|
624
556
|
# Passes if the method send returns a true value.
|
@@ -914,42 +846,6 @@ EOT
|
|
914
846
|
end
|
915
847
|
end
|
916
848
|
|
917
|
-
##
|
918
|
-
# Passes if +path+ exists.
|
919
|
-
#
|
920
|
-
# Example:
|
921
|
-
# assert_path_exist("/tmp") # -> pass
|
922
|
-
# assert_path_exist("/bin/sh") # -> pass
|
923
|
-
# assert_path_exist("/nonexistent") # -> fail
|
924
|
-
def assert_path_exist(path, message=nil)
|
925
|
-
_wrap_assertion do
|
926
|
-
failure_message = build_message(message,
|
927
|
-
"<?> expected to exist",
|
928
|
-
path)
|
929
|
-
assert_block(failure_message) do
|
930
|
-
File.exist?(path)
|
931
|
-
end
|
932
|
-
end
|
933
|
-
end
|
934
|
-
|
935
|
-
##
|
936
|
-
# Passes if +path+ doesn't exist.
|
937
|
-
#
|
938
|
-
# Example:
|
939
|
-
# assert_path_not_exist("/nonexistent") # -> pass
|
940
|
-
# assert_path_not_exist("/tmp") # -> fail
|
941
|
-
# assert_path_not_exist("/bin/sh") # -> fail
|
942
|
-
def assert_path_not_exist(path, message=nil)
|
943
|
-
_wrap_assertion do
|
944
|
-
failure_message = build_message(message,
|
945
|
-
"<?> expected to not exist",
|
946
|
-
path)
|
947
|
-
assert_block(failure_message) do
|
948
|
-
not File.exist?(path)
|
949
|
-
end
|
950
|
-
end
|
951
|
-
end
|
952
|
-
|
953
849
|
##
|
954
850
|
# Builds a failure message. +head+ is added before the +template+ and
|
955
851
|
# +arguments+ replaces the '?'s positionally in the template.
|
@@ -99,7 +99,7 @@ module Test
|
|
99
99
|
|
100
100
|
attr_reader :suite, :runner_options
|
101
101
|
attr_accessor :filters, :to_run, :pattern, :exclude, :base, :workdir
|
102
|
-
attr_accessor :color_scheme
|
102
|
+
attr_accessor :color_scheme
|
103
103
|
attr_writer :runner, :collector
|
104
104
|
|
105
105
|
def initialize(standalone)
|
@@ -113,7 +113,6 @@ module Test
|
|
113
113
|
@runner_options = {}
|
114
114
|
@default_arguments = []
|
115
115
|
@workdir = nil
|
116
|
-
@listeners = []
|
117
116
|
config_file = "test-unit.yml"
|
118
117
|
if File.exist?(config_file)
|
119
118
|
load_config(config_file)
|
@@ -301,8 +300,6 @@ module Test
|
|
301
300
|
runner = @runner[self]
|
302
301
|
return false if runner.nil?
|
303
302
|
@runner_options[:color_scheme] ||= @color_scheme
|
304
|
-
@runner_options[:listeners] ||= []
|
305
|
-
@runner_options[:listeners].concat(@listeners)
|
306
303
|
Dir.chdir(@workdir) if @workdir
|
307
304
|
runner.run(suite, @runner_options).passed?
|
308
305
|
end
|
@@ -345,7 +342,7 @@ module Test
|
|
345
342
|
end
|
346
343
|
|
347
344
|
def global_config_file
|
348
|
-
File.expand_path("~/.test-unit.
|
345
|
+
File.expand_path("~/.test-unit.xml")
|
349
346
|
rescue ArgumentError
|
350
347
|
nil
|
351
348
|
end
|
@@ -95,7 +95,7 @@ module Test
|
|
95
95
|
|
96
96
|
def collect_file(path, test_suites, already_gathered)
|
97
97
|
@program_file ||= File.expand_path($0)
|
98
|
-
return if @program_file == path.
|
98
|
+
return if @program_file == path.to_s
|
99
99
|
add_load_path(path.expand_path.dirname) do
|
100
100
|
require(path.to_s)
|
101
101
|
find_test_cases(already_gathered).each do |test_case|
|
@@ -8,12 +8,8 @@ module Test
|
|
8
8
|
class << self
|
9
9
|
@@default = nil
|
10
10
|
def default
|
11
|
-
@@default ||= new("
|
12
|
-
|
13
|
-
Color.new("white", :bold => true),
|
14
|
-
"failure" =>
|
15
|
-
Color.new("red", :foreground => false) +
|
16
|
-
Color.new("white", :bold => true),
|
11
|
+
@@default ||= new("success" => Color.new("green", :bold => true),
|
12
|
+
"failure" => Color.new("red", :bold => true),
|
17
13
|
"pending" => Color.new("magenta", :bold => true),
|
18
14
|
"omission" => Color.new("blue", :bold => true),
|
19
15
|
"notification" => Color.new("cyan", :bold => true),
|
@@ -1,11 +1,4 @@
|
|
1
1
|
# port of Python's difflib.
|
2
|
-
#
|
3
|
-
# Copyright (c) 2001-2008 Python Software Foundation; All Rights Reserved
|
4
|
-
# Copyright (c) 2008-2010 Kouhei Sutou; All Rights Reserved
|
5
|
-
#
|
6
|
-
# It is free software, and is distributed under the Ruby
|
7
|
-
# license and/or the PSF license. See the COPYING file and
|
8
|
-
# PSFL file.
|
9
2
|
|
10
3
|
module Test
|
11
4
|
module Unit
|
@@ -724,16 +717,7 @@ module Test
|
|
724
717
|
|
725
718
|
def diff(differ_class, from, to, options={})
|
726
719
|
differ = differ_class.new(from.split(/\r?\n/), to.split(/\r?\n/))
|
727
|
-
|
728
|
-
if Object.const_defined?(:EncodingError)
|
729
|
-
begin
|
730
|
-
lines.join("\n")
|
731
|
-
rescue EncodingError
|
732
|
-
lines.collect {|line| line.force_encoding("ASCII-8BIT")}.join("\n")
|
733
|
-
end
|
734
|
-
else
|
735
|
-
lines.join("\n")
|
736
|
-
end
|
720
|
+
differ.diff(options).join("\n")
|
737
721
|
end
|
738
722
|
end
|
739
723
|
end
|
@@ -19,7 +19,6 @@ require 'test/unit/priority'
|
|
19
19
|
require 'test/unit/testsuite'
|
20
20
|
require 'test/unit/assertionfailederror'
|
21
21
|
require 'test/unit/util/backtracefilter'
|
22
|
-
require 'test/unit/util/output'
|
23
22
|
require 'test/unit/util/method-owner-finder'
|
24
23
|
|
25
24
|
module Test
|
@@ -83,7 +82,6 @@ module Test
|
|
83
82
|
include Priority
|
84
83
|
include Assertions
|
85
84
|
include Util::BacktraceFilter
|
86
|
-
include Util::Output
|
87
85
|
|
88
86
|
STARTED = name + "::STARTED" # :nodoc:
|
89
87
|
FINISHED = name + "::FINISHED" # :nodoc:
|
@@ -450,7 +448,6 @@ module Test
|
|
450
448
|
notify("#{self.class}\##{@method_name} was redefined")
|
451
449
|
end
|
452
450
|
__send__(@method_name)
|
453
|
-
add_pass
|
454
451
|
end
|
455
452
|
|
456
453
|
def handle_exception(exception)
|
@@ -474,10 +471,6 @@ module Test
|
|
474
471
|
def add_assertion
|
475
472
|
current_result.add_assertion
|
476
473
|
end
|
477
|
-
|
478
|
-
def add_pass
|
479
|
-
current_result.add_pass
|
480
|
-
end
|
481
474
|
end
|
482
475
|
end
|
483
476
|
end
|
@@ -34,11 +34,11 @@ module Test
|
|
34
34
|
CHANGED = "CHANGED"
|
35
35
|
FAULT = "FAULT"
|
36
36
|
|
37
|
-
attr_reader :run_count, :
|
37
|
+
attr_reader :run_count, :assertion_count, :faults
|
38
38
|
|
39
39
|
# Constructs a new, empty TestResult.
|
40
40
|
def initialize
|
41
|
-
@run_count, @
|
41
|
+
@run_count, @assertion_count = 0, 0
|
42
42
|
@summary_generators = []
|
43
43
|
@problem_checkers = []
|
44
44
|
@faults = []
|
@@ -51,10 +51,6 @@ module Test
|
|
51
51
|
notify_changed
|
52
52
|
end
|
53
53
|
|
54
|
-
def add_pass
|
55
|
-
@pass_count += 1
|
56
|
-
end
|
57
|
-
|
58
54
|
# Records an individual assertion.
|
59
55
|
def add_assertion
|
60
56
|
@assertion_count += 1
|
@@ -69,25 +65,6 @@ module Test
|
|
69
65
|
*@summary_generators.collect {|generator| send(generator)}].join(", ")
|
70
66
|
end
|
71
67
|
|
72
|
-
# Returnes a string that shows result status.
|
73
|
-
def status
|
74
|
-
if passed?
|
75
|
-
if pending_count > 0
|
76
|
-
"pending"
|
77
|
-
elsif omission_count > 0
|
78
|
-
"omission"
|
79
|
-
elsif notification_count > 0
|
80
|
-
"notification"
|
81
|
-
else
|
82
|
-
"pass"
|
83
|
-
end
|
84
|
-
elsif error_count > 0
|
85
|
-
"error"
|
86
|
-
elsif failure_count > 0
|
87
|
-
"failure"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
68
|
def to_s
|
92
69
|
summary
|
93
70
|
end
|
@@ -98,15 +75,6 @@ module Test
|
|
98
75
|
@problem_checkers.all? {|checker| not send(checker)}
|
99
76
|
end
|
100
77
|
|
101
|
-
def pass_percentage
|
102
|
-
n_tests = @run_count - omission_count
|
103
|
-
if n_tests.zero?
|
104
|
-
0
|
105
|
-
else
|
106
|
-
100.0 * (@pass_count / n_tests.to_f)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
78
|
private
|
111
79
|
def notify_changed
|
112
80
|
notify_listeners(CHANGED, self)
|
@@ -38,14 +38,23 @@ module Test
|
|
38
38
|
@progress_row_max = @options[:progress_row_max]
|
39
39
|
@progress_row_max ||= guess_progress_row_max
|
40
40
|
@already_outputted = false
|
41
|
+
@n_successes = 0
|
42
|
+
@n_omissions = 0
|
41
43
|
@indent = 0
|
42
44
|
@top_level = true
|
43
45
|
@faults = []
|
44
46
|
end
|
45
47
|
|
48
|
+
# Begins the test run.
|
49
|
+
def start
|
50
|
+
setup_mediator
|
51
|
+
attach_to_mediator
|
52
|
+
return start_mediator
|
53
|
+
end
|
54
|
+
|
46
55
|
private
|
47
56
|
def setup_mediator
|
48
|
-
|
57
|
+
@mediator = create_mediator(@suite)
|
49
58
|
output_setup_end
|
50
59
|
end
|
51
60
|
|
@@ -55,6 +64,10 @@ module Test
|
|
55
64
|
output("Loaded suite #{suite_name}")
|
56
65
|
end
|
57
66
|
|
67
|
+
def create_mediator(suite)
|
68
|
+
return TestRunnerMediator.new(suite)
|
69
|
+
end
|
70
|
+
|
58
71
|
def attach_to_mediator
|
59
72
|
@mediator.add_listener(TestResult::FAULT, &method(:add_fault))
|
60
73
|
@mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
|
@@ -65,9 +78,14 @@ module Test
|
|
65
78
|
@mediator.add_listener(TestSuite::FINISHED, &method(:test_suite_finished))
|
66
79
|
end
|
67
80
|
|
81
|
+
def start_mediator
|
82
|
+
return @mediator.run_suite
|
83
|
+
end
|
84
|
+
|
68
85
|
def add_fault(fault)
|
69
86
|
@faults << fault
|
70
87
|
output_progress(fault.single_character_display, fault_color(fault))
|
88
|
+
@n_omissions += 1 if fault.is_a?(Omission)
|
71
89
|
@already_outputted = true if fault.critical?
|
72
90
|
end
|
73
91
|
|
@@ -91,7 +109,13 @@ module Test
|
|
91
109
|
output("Finished in #{elapsed_time} seconds.")
|
92
110
|
nl
|
93
111
|
output(@result, result_color)
|
94
|
-
|
112
|
+
n_tests = @result.run_count - @n_omissions
|
113
|
+
if n_tests.zero?
|
114
|
+
pass_percentage = 0
|
115
|
+
else
|
116
|
+
pass_percentage = 100.0 * (@n_successes / n_tests.to_f)
|
117
|
+
end
|
118
|
+
output("%g%% passed" % pass_percentage, result_color)
|
95
119
|
end
|
96
120
|
|
97
121
|
def output_fault(fault)
|
@@ -135,7 +159,7 @@ module Test
|
|
135
159
|
def output_fault_message(fault)
|
136
160
|
output(fault.user_message) if fault.user_message
|
137
161
|
output_single("<")
|
138
|
-
output_single(fault.inspected_expected, color("
|
162
|
+
output_single(fault.inspected_expected, color("success"))
|
139
163
|
output("> expected but was")
|
140
164
|
output_single("<")
|
141
165
|
output_single(fault.inspected_actual, color("failure"))
|
@@ -171,7 +195,8 @@ module Test
|
|
171
195
|
|
172
196
|
def test_finished(name)
|
173
197
|
unless @already_outputted
|
174
|
-
|
198
|
+
@n_successes += 1
|
199
|
+
output_progress(".", color("success"))
|
175
200
|
end
|
176
201
|
@already_outputted = false
|
177
202
|
|
@@ -247,10 +272,7 @@ module Test
|
|
247
272
|
end
|
248
273
|
|
249
274
|
def color(name)
|
250
|
-
|
251
|
-
_color ||= @color_scheme["success"] if name == "pass"
|
252
|
-
_color ||= ColorScheme.default[name]
|
253
|
-
_color
|
275
|
+
@color_scheme[name] || ColorScheme.default[name]
|
254
276
|
end
|
255
277
|
|
256
278
|
def fault_color(fault)
|
@@ -258,7 +280,21 @@ module Test
|
|
258
280
|
end
|
259
281
|
|
260
282
|
def result_color
|
261
|
-
|
283
|
+
if @result.passed?
|
284
|
+
if @result.pending_count > 0
|
285
|
+
color("pending")
|
286
|
+
elsif @result.omission_count > 0
|
287
|
+
color("omission")
|
288
|
+
elsif @result.notification_count > 0
|
289
|
+
color("notification")
|
290
|
+
else
|
291
|
+
color("success")
|
292
|
+
end
|
293
|
+
elsif @result.error_count > 0
|
294
|
+
color("error")
|
295
|
+
elsif @result.failure_count > 0
|
296
|
+
color("failure")
|
297
|
+
end
|
262
298
|
end
|
263
299
|
|
264
300
|
def guess_color_availability
|