ciat 0.4.8 → 0.4.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/README.rdoc +4 -4
- data/lib/ciat.rb +3 -5
- data/lib/ciat/differs/html_differ.rb +3 -4
- data/lib/ciat/erb_helpers.rb +6 -4
- data/lib/ciat/feedback/composite.rb +2 -2
- data/lib/ciat/feedback/feedback_counter.rb +2 -2
- data/lib/ciat/feedback/html_feedback.rb +25 -8
- data/lib/ciat/feedback/html_feedback_builder.rb +28 -0
- data/lib/ciat/feedback/return_status.rb +1 -1
- data/lib/ciat/feedback/standard_output.rb +1 -1
- data/lib/ciat/io.rb +17 -0
- data/lib/ciat/processors/basic_processing.rb +21 -30
- data/lib/ciat/{executors → processors}/java.rb +7 -8
- data/lib/ciat/{executors → processors}/parrot.rb +9 -10
- data/lib/ciat/rake_task.rb +1 -1
- data/lib/ciat/subresult.rb +20 -0
- data/lib/ciat/suite.rb +27 -38
- data/lib/ciat/suite_builder.rb +54 -0
- data/lib/ciat/test.rb +32 -18
- data/lib/ciat/test_element.rb +7 -2
- data/lib/ciat/{crate.rb → test_file.rb} +24 -16
- data/lib/ciat/test_result.rb +24 -0
- data/lib/ciat/traffic_light.rb +6 -0
- data/lib/templates/detail_row.html.erb +5 -4
- data/lib/templates/group_header.html.erb +2 -2
- data/lib/templates/report.html.erb +1 -1
- data/lib/templates/summary_row.html.erb +4 -4
- data/spec/ciat/erb_helpers_spec.rb +71 -0
- data/spec/ciat/feedback/composite_spec.rb +28 -0
- data/spec/ciat/feedback/feedback_counter_spec.rb +91 -0
- data/spec/ciat/feedback/html_feedback_spec.rb +48 -0
- data/spec/ciat/feedback/return_status_spec.rb +90 -0
- data/spec/ciat/feedback/standard_output_spec.rb +109 -0
- data/spec/ciat/processors/basic_processing_spec.rb +146 -0
- data/spec/ciat/processors/java_spec.rb +31 -0
- data/spec/ciat/processors/parrot_spec.rb +40 -0
- data/spec/ciat/subresult_spec.rb +40 -0
- data/spec/ciat/suite_builder_spec.rb +70 -0
- data/spec/ciat/suite_spec.rb +64 -0
- data/spec/ciat/test_element_spec.rb +78 -0
- data/spec/ciat/test_file_spec.rb +96 -0
- data/spec/ciat/test_spec.rb +127 -0
- data/spec/ciat/traffic_light_spec.rb +41 -0
- data/spec/ciat_spec.rb +2 -0
- data/spec/spec_helper.rb +134 -0
- data/spec/templates/detail_row/elements_html_erb_spec.rb +60 -0
- data/spec/templates/detail_row_html_erb_spec.rb +73 -0
- data/spec/templates/elements/diff_html_erb_spec.rb +28 -0
- data/spec/templates/elements/plain_element_html_erb_spec.rb +36 -0
- data/spec/templates/report_html_erb_spec.rb +85 -0
- data/spec/templates/summary_row_html_erb_spec.rb +93 -0
- data/spec/templates/test_numbers_html_erb_spec.rb +82 -0
- metadata +54 -32
- data/History.txt +0 -96
- data/Rakefile +0 -40
- data/ciat.gemspec +0 -53
- data/lib/ciat/cargo.rb +0 -55
- data/lib/ciat/compilers/java.rb +0 -54
- data/lib/ciat/processors/copy.rb +0 -37
- data/lib/ciat/version.rb +0 -7
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'ciat/io'
|
2
|
+
|
3
|
+
class CIAT::SuiteBuilder
|
4
|
+
include CIAT::IO
|
5
|
+
|
6
|
+
attr_reader :options
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def build_processors
|
13
|
+
options[:processors]
|
14
|
+
end
|
15
|
+
|
16
|
+
def build_output_folder
|
17
|
+
options[:output_folder] || OUTPUT_FOLDER
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_test_files
|
21
|
+
if options[:files]
|
22
|
+
make_test_files(options[:files])
|
23
|
+
else
|
24
|
+
folder = options[:folder] || "ciat"
|
25
|
+
pattern = options[:pattern] || "*.ciat"
|
26
|
+
make_test_files(Dir[File.join(folder, "**", pattern)])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def make_test_files(filenames)
|
31
|
+
if filenames.empty?
|
32
|
+
raise IOError.new("no test files specified")
|
33
|
+
end
|
34
|
+
filenames.map do |filename|
|
35
|
+
CIAT::TestFile.new(filename, build_output_folder)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_feedback
|
40
|
+
CIAT::Feedback::Composite.new(
|
41
|
+
options[:feedback] || default_feedback,
|
42
|
+
CIAT::Feedback::ReturnStatus.new
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_feedback
|
47
|
+
counter = CIAT::Feedback::FeedbackCounter.new
|
48
|
+
CIAT::Feedback::Composite.new(counter,
|
49
|
+
CIAT::Feedback::StandardOutput.new(counter),
|
50
|
+
CIAT::Feedback::HtmlFeedback.new(counter, options)
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/lib/ciat/test.rb
CHANGED
@@ -1,36 +1,50 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'ciat/test_result'
|
3
|
+
require 'ciat/subresult'
|
2
4
|
|
3
5
|
class CIAT::Test
|
4
|
-
attr_reader :filename
|
5
6
|
attr_reader :processors
|
6
|
-
attr_reader :elements
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@
|
12
|
-
|
8
|
+
def initialize(test_file, processors, feedback) #:nodoc:
|
9
|
+
@test_file = test_file
|
10
|
+
@processors = processors
|
11
|
+
@feedback = feedback
|
12
|
+
end
|
13
|
+
|
14
|
+
def elements
|
15
|
+
@elements ||= @test_file.process
|
16
|
+
end
|
17
|
+
|
18
|
+
def filename
|
19
|
+
@test_file.filename(:ciat)
|
13
20
|
end
|
14
21
|
|
15
22
|
def run
|
16
|
-
run_processors
|
17
|
-
|
18
|
-
|
23
|
+
CIAT::TestResult.new(self, run_processors)
|
24
|
+
end
|
25
|
+
|
26
|
+
def grouping
|
27
|
+
@test_file.grouping
|
19
28
|
end
|
20
29
|
|
21
30
|
def run_processors #:nodoc:
|
22
|
-
|
23
|
-
|
24
|
-
|
31
|
+
light = CIAT::TrafficLight::GREEN
|
32
|
+
processors.map do |processor|
|
33
|
+
if light.green?
|
34
|
+
light = processor.process(self)
|
35
|
+
subresult(processor, light)
|
36
|
+
else
|
37
|
+
subresult(processor)
|
38
|
+
end
|
25
39
|
end
|
26
40
|
end
|
27
41
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
def subresult(processor, light = CIAT::TrafficLight::UNSET)
|
43
|
+
subresult = CIAT::Subresult.new(self, light, processor)
|
44
|
+
@feedback.report_subresult(subresult)
|
45
|
+
subresult
|
32
46
|
end
|
33
|
-
|
47
|
+
|
34
48
|
def element(*names)
|
35
49
|
elements[names.compact.join("_").to_sym]
|
36
50
|
end
|
data/lib/ciat/test_element.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require "yaml"
|
2
|
+
require 'ciat/io'
|
2
3
|
|
3
4
|
class CIAT::TestElement
|
5
|
+
|
6
|
+
include CIAT::IO
|
7
|
+
|
4
8
|
attr_reader :name
|
5
9
|
attr_reader :filename
|
6
10
|
|
@@ -26,12 +30,12 @@ class CIAT::TestElement
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def content
|
29
|
-
@content ||=
|
33
|
+
@content ||= read_file(@filename)
|
30
34
|
end
|
31
35
|
|
32
36
|
def as_file
|
33
37
|
if @content
|
34
|
-
|
38
|
+
write_file(@filename, @content)
|
35
39
|
end
|
36
40
|
@filename
|
37
41
|
end
|
@@ -41,4 +45,5 @@ class CIAT::TestElement
|
|
41
45
|
def metadata
|
42
46
|
@@metadata ||= YAML.load_file(File.join(File.dirname(__FILE__), "..", "data", "elements.yml"))
|
43
47
|
end
|
48
|
+
|
44
49
|
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
class CIAT::
|
2
|
-
attr_reader :test_file
|
3
|
-
attr_reader :stub
|
4
|
-
attr_reader :output_folder
|
1
|
+
class CIAT::TestFile #:nodoc:all
|
5
2
|
|
6
3
|
def initialize(test_file, output_folder)
|
4
|
+
unless File.exists?(test_file)
|
5
|
+
raise IOError.new(test_file + " does not exist")
|
6
|
+
end
|
7
7
|
@test_file = test_file
|
8
8
|
@output_folder = output_folder
|
9
9
|
end
|
10
|
-
|
11
|
-
def stub
|
12
|
-
test_file.gsub(File.extname(test_file), "")
|
13
|
-
end
|
14
10
|
|
15
11
|
def filename(*modifiers)
|
16
|
-
|
12
|
+
if modifiers == [:ciat]
|
13
|
+
@test_file
|
14
|
+
else
|
15
|
+
File.join(@output_folder, [stub, *modifiers].compact.join("_"))
|
16
|
+
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
File.
|
21
|
-
end
|
19
|
+
def grouping
|
20
|
+
File.dirname(@test_file)
|
21
|
+
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def process #:nodoc:
|
24
24
|
elements = empty_elements_hash
|
25
|
-
|
25
|
+
split.each do |name, contents|
|
26
26
|
elements[name] = CIAT::TestElement.new(name, filename(name), contents)
|
27
27
|
end
|
28
28
|
elements
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
31
|
+
def split #:nodoc:
|
32
32
|
tag = :description
|
33
33
|
content = ""
|
34
34
|
raw_elements = {}
|
35
|
-
|
35
|
+
read.each do |line|
|
36
36
|
if line =~ /^==== ((\w|\s)+?)\W*$/
|
37
37
|
raw_elements[tag] = content
|
38
38
|
tag = $1.gsub(" ", "_").to_sym
|
@@ -50,9 +50,17 @@ class CIAT::Crate #:nodoc:all
|
|
50
50
|
#
|
51
51
|
private
|
52
52
|
|
53
|
+
def read
|
54
|
+
File.readlines(@test_file)
|
55
|
+
end
|
56
|
+
|
53
57
|
def empty_elements_hash
|
54
58
|
Hash.new do |hash, name|
|
55
59
|
hash[name] = CIAT::TestElement.new(name, filename(name), nil)
|
56
60
|
end
|
57
61
|
end
|
62
|
+
|
63
|
+
def stub
|
64
|
+
@test_file.gsub(File.extname(@test_file), "")
|
65
|
+
end
|
58
66
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CIAT::TestResult
|
2
|
+
attr_reader :subresults
|
3
|
+
|
4
|
+
def initialize(test, subresults)
|
5
|
+
@test = test
|
6
|
+
@subresults = subresults
|
7
|
+
end
|
8
|
+
|
9
|
+
def grouping
|
10
|
+
@test.grouping
|
11
|
+
end
|
12
|
+
|
13
|
+
def processors
|
14
|
+
@test.processors
|
15
|
+
end
|
16
|
+
|
17
|
+
def filename
|
18
|
+
@test.filename
|
19
|
+
end
|
20
|
+
|
21
|
+
def element(*args)
|
22
|
+
@test.element(*args)
|
23
|
+
end
|
24
|
+
end
|
data/lib/ciat/traffic_light.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
class CIAT::TrafficLight
|
2
|
+
|
2
3
|
attr_reader :setting
|
3
4
|
|
4
5
|
def initialize(setting = :unset) #:nodoc:
|
5
6
|
@setting = setting
|
6
7
|
end
|
7
8
|
|
9
|
+
GREEN = CIAT::TrafficLight.new(:green)
|
10
|
+
RED = CIAT::TrafficLight.new(:red)
|
11
|
+
YELLOW = CIAT::TrafficLight.new(:yellow)
|
12
|
+
UNSET = CIAT::TrafficLight.new(:unset)
|
13
|
+
|
8
14
|
def unset?
|
9
15
|
@setting == :unset
|
10
16
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
<tr class="details" style="display:none">
|
2
|
-
<td colspan="<%= result.
|
2
|
+
<td colspan="<%= result.subresults.size + 1 %>">
|
3
3
|
|
4
|
-
<% result.
|
5
|
-
<h3>Results from <%= processor.describe %></h3>
|
6
|
-
<%= render "detail_row/elements",
|
4
|
+
<% result.subresults.each do |subresult| %>
|
5
|
+
<h3>Results from <%= subresult.processor.describe %></h3>
|
6
|
+
<%= render "detail_row/elements",
|
7
|
+
:elements => subresult.relevant_elements %>
|
7
8
|
<% end %>
|
8
9
|
|
9
10
|
</tr>
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<% if
|
1
|
+
<% if new_grouping?(result) %>
|
2
2
|
<tr>
|
3
3
|
<td colspan="<%= result.processors.size + 1 %>">
|
4
|
-
<strong><%=
|
4
|
+
<strong><%= result.grouping.gsub("/", " / ") %></strong>
|
5
5
|
</td>
|
6
6
|
</tr>
|
7
7
|
<% end %>
|
@@ -4,9 +4,9 @@
|
|
4
4
|
<%= result.element(:description).content %>
|
5
5
|
</a>
|
6
6
|
</td>
|
7
|
-
<% result.
|
8
|
-
<td class="<%=
|
9
|
-
<%= light_to_word(
|
10
|
-
|
7
|
+
<% result.subresults.each do |subresult| %>
|
8
|
+
<td class="<%= subresult.light.setting %>">
|
9
|
+
<%= light_to_word(subresult.light) %>
|
10
|
+
</td>
|
11
11
|
<% end %>
|
12
12
|
</tr>
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
describe CIAT::ERBHelpers do
|
4
|
+
before(:each) do
|
5
|
+
@helper = Object.new
|
6
|
+
@helper.extend(CIAT::ERBHelpers)
|
7
|
+
|
8
|
+
@unset = CIAT::TrafficLight.new(:unset)
|
9
|
+
@green = CIAT::TrafficLight.new(:green)
|
10
|
+
@yellow = CIAT::TrafficLight.new(:yellow)
|
11
|
+
@red = CIAT::TrafficLight.new(:red)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "converting light to word" do
|
15
|
+
it "should handle unset light" do
|
16
|
+
@helper.light_to_word(@unset).should == "n/a"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should handle green light" do
|
20
|
+
@helper.light_to_word(@green).should == "passed"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should handle yellow light" do
|
24
|
+
@helper.light_to_word(@yellow).should == "ERROR"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should handle red light" do
|
28
|
+
@helper.light_to_word(@red).should == "FAILURE"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "converting light to sentence" do
|
33
|
+
it "should handle unset light" do
|
34
|
+
@helper.light_to_sentence("prefix", @unset).should ==
|
35
|
+
"<span class=\"unset\">prefix not run.</span>"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should handle green light" do
|
39
|
+
@helper.light_to_sentence("prefix", @green).should ==
|
40
|
+
"<span class=\"green\">prefix passed.</span>"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should handle yellow light" do
|
44
|
+
@helper.light_to_sentence("prefix", @yellow).should ==
|
45
|
+
"<span class=\"yellow\">prefix errored.</span>"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should handle red light" do
|
49
|
+
@helper.light_to_sentence("prefix", @red).should ==
|
50
|
+
"<span class=\"red\">prefix failed.</span>"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should render another template" do
|
55
|
+
template = mock("template")
|
56
|
+
locals = mock("locals")
|
57
|
+
binder = mock("binder")
|
58
|
+
bindings = mock("bindings")
|
59
|
+
erb = mock("erb")
|
60
|
+
result = mock("result")
|
61
|
+
|
62
|
+
@helper.should_receive(:read).with("phile.html.erb").and_return(template)
|
63
|
+
ERB.should_receive(:new).with(template).and_return(erb)
|
64
|
+
CIAT::TemplateBinder.should_receive(:new).with(locals).and_return(binder)
|
65
|
+
binder.should_receive(:get_binding).and_return(bindings)
|
66
|
+
erb.should_receive(:filename=).with("phile.html.erb")
|
67
|
+
erb.should_receive(:result).with(bindings).and_return(result)
|
68
|
+
|
69
|
+
@helper.render("phile.html.erb", locals).should == result
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
require 'ciat/feedback/composite'
|
4
|
+
|
5
|
+
describe CIAT::Feedback::Composite do
|
6
|
+
before(:each) do
|
7
|
+
@subfeedbacks = [mock("feedback 1"), mock("feedback 2"), mock("feedback 3")]
|
8
|
+
@feedback = CIAT::Feedback::Composite.new(*@subfeedbacks)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should report at the end" do
|
12
|
+
suite = mock("suite")
|
13
|
+
|
14
|
+
@subfeedbacks.each { |feedback| feedback.should_receive(:post_tests).with(suite) }
|
15
|
+
|
16
|
+
@feedback.post_tests(suite)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should report a light" do
|
20
|
+
subresult = mock("subresult")
|
21
|
+
|
22
|
+
@subfeedbacks.each do |feedback|
|
23
|
+
feedback.should_receive(:report_subresult).with(subresult)
|
24
|
+
end
|
25
|
+
|
26
|
+
@feedback.report_subresult(subresult)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
require 'ciat/feedback/standard_output'
|
4
|
+
|
5
|
+
describe CIAT::Feedback::FeedbackCounter do
|
6
|
+
before(:each) do
|
7
|
+
@feedback = CIAT::Feedback::FeedbackCounter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "reporting on a processor" do
|
11
|
+
before(:each) do
|
12
|
+
@light = mock("light")
|
13
|
+
@subresult = mock("subresult")
|
14
|
+
@subresult.should_receive(:light).at_least(:once).and_return(@light)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should report a green light" do
|
18
|
+
expect_light(:green)
|
19
|
+
|
20
|
+
@feedback.report_subresult(@subresult)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should report a red light" do
|
24
|
+
expect_light(:red)
|
25
|
+
@feedback.should_receive(:increment_failure_count)
|
26
|
+
|
27
|
+
@feedback.report_subresult(@subresult)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should report a yellow light" do
|
31
|
+
expect_light(:yellow)
|
32
|
+
@feedback.should_receive(:increment_error_count)
|
33
|
+
|
34
|
+
@feedback.report_subresult(@subresult)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should report an unset light" do
|
38
|
+
expect_light(:unset)
|
39
|
+
|
40
|
+
@feedback.report_subresult(@subresult)
|
41
|
+
end
|
42
|
+
|
43
|
+
def expect_light(setting)
|
44
|
+
@light.should_receive(:setting).at_least(:once).and_return(setting)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "failure count" do
|
49
|
+
it "should be zero initially" do
|
50
|
+
@feedback.failure_count.should == 0
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should increment" do
|
54
|
+
@feedback.increment_failure_count
|
55
|
+
|
56
|
+
@feedback.failure_count.should == 1
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should increment lots" do
|
60
|
+
1000.times { @feedback.increment_failure_count }
|
61
|
+
|
62
|
+
@feedback.failure_count.should == 1000
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "error count" do
|
67
|
+
it "should be zero initially" do
|
68
|
+
@feedback.error_count.should == 0
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should increment" do
|
72
|
+
@feedback.increment_error_count
|
73
|
+
|
74
|
+
@feedback.error_count.should == 1
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should increment lots" do
|
78
|
+
666.times { @feedback.increment_error_count }
|
79
|
+
|
80
|
+
@feedback.error_count.should == 666
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should not interfere with failure count" do
|
84
|
+
666.times { @feedback.increment_failure_count }
|
85
|
+
777.times { @feedback.increment_error_count }
|
86
|
+
|
87
|
+
@feedback.failure_count.should == 666
|
88
|
+
@feedback.error_count.should == 777
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|