rroonga 1.0.8 → 1.0.9
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/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
|