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.
Files changed (60) hide show
  1. data/README.rdoc +4 -4
  2. data/lib/ciat.rb +3 -5
  3. data/lib/ciat/differs/html_differ.rb +3 -4
  4. data/lib/ciat/erb_helpers.rb +6 -4
  5. data/lib/ciat/feedback/composite.rb +2 -2
  6. data/lib/ciat/feedback/feedback_counter.rb +2 -2
  7. data/lib/ciat/feedback/html_feedback.rb +25 -8
  8. data/lib/ciat/feedback/html_feedback_builder.rb +28 -0
  9. data/lib/ciat/feedback/return_status.rb +1 -1
  10. data/lib/ciat/feedback/standard_output.rb +1 -1
  11. data/lib/ciat/io.rb +17 -0
  12. data/lib/ciat/processors/basic_processing.rb +21 -30
  13. data/lib/ciat/{executors → processors}/java.rb +7 -8
  14. data/lib/ciat/{executors → processors}/parrot.rb +9 -10
  15. data/lib/ciat/rake_task.rb +1 -1
  16. data/lib/ciat/subresult.rb +20 -0
  17. data/lib/ciat/suite.rb +27 -38
  18. data/lib/ciat/suite_builder.rb +54 -0
  19. data/lib/ciat/test.rb +32 -18
  20. data/lib/ciat/test_element.rb +7 -2
  21. data/lib/ciat/{crate.rb → test_file.rb} +24 -16
  22. data/lib/ciat/test_result.rb +24 -0
  23. data/lib/ciat/traffic_light.rb +6 -0
  24. data/lib/templates/detail_row.html.erb +5 -4
  25. data/lib/templates/group_header.html.erb +2 -2
  26. data/lib/templates/report.html.erb +1 -1
  27. data/lib/templates/summary_row.html.erb +4 -4
  28. data/spec/ciat/erb_helpers_spec.rb +71 -0
  29. data/spec/ciat/feedback/composite_spec.rb +28 -0
  30. data/spec/ciat/feedback/feedback_counter_spec.rb +91 -0
  31. data/spec/ciat/feedback/html_feedback_spec.rb +48 -0
  32. data/spec/ciat/feedback/return_status_spec.rb +90 -0
  33. data/spec/ciat/feedback/standard_output_spec.rb +109 -0
  34. data/spec/ciat/processors/basic_processing_spec.rb +146 -0
  35. data/spec/ciat/processors/java_spec.rb +31 -0
  36. data/spec/ciat/processors/parrot_spec.rb +40 -0
  37. data/spec/ciat/subresult_spec.rb +40 -0
  38. data/spec/ciat/suite_builder_spec.rb +70 -0
  39. data/spec/ciat/suite_spec.rb +64 -0
  40. data/spec/ciat/test_element_spec.rb +78 -0
  41. data/spec/ciat/test_file_spec.rb +96 -0
  42. data/spec/ciat/test_spec.rb +127 -0
  43. data/spec/ciat/traffic_light_spec.rb +41 -0
  44. data/spec/ciat_spec.rb +2 -0
  45. data/spec/spec_helper.rb +134 -0
  46. data/spec/templates/detail_row/elements_html_erb_spec.rb +60 -0
  47. data/spec/templates/detail_row_html_erb_spec.rb +73 -0
  48. data/spec/templates/elements/diff_html_erb_spec.rb +28 -0
  49. data/spec/templates/elements/plain_element_html_erb_spec.rb +36 -0
  50. data/spec/templates/report_html_erb_spec.rb +85 -0
  51. data/spec/templates/summary_row_html_erb_spec.rb +93 -0
  52. data/spec/templates/test_numbers_html_erb_spec.rb +82 -0
  53. metadata +54 -32
  54. data/History.txt +0 -96
  55. data/Rakefile +0 -40
  56. data/ciat.gemspec +0 -53
  57. data/lib/ciat/cargo.rb +0 -55
  58. data/lib/ciat/compilers/java.rb +0 -54
  59. data/lib/ciat/processors/copy.rb +0 -37
  60. data/lib/ciat/version.rb +0 -7
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ describe CIAT::TrafficLight do
4
+ before(:each) do
5
+ @traffic_light = CIAT::TrafficLight.new
6
+ end
7
+
8
+ it "should initially be unset" do
9
+ @traffic_light.unset?.should == true
10
+ @traffic_light.green!
11
+ @traffic_light.unset?.should == false
12
+ end
13
+
14
+ it "should set and query green" do
15
+ @traffic_light.green?.should == false
16
+ @traffic_light.green!
17
+ @traffic_light.green?.should == true
18
+ end
19
+
20
+ it "should set and query yellow" do
21
+ @traffic_light.yellow?.should == false
22
+ @traffic_light.yellow!
23
+ @traffic_light.yellow?.should == true
24
+ end
25
+
26
+ it "should set and query red" do
27
+ @traffic_light.red?.should == false
28
+ @traffic_light.red!
29
+ @traffic_light.red?.should == true
30
+ end
31
+
32
+ it "should not switch away from yellow" do
33
+ @traffic_light.yellow!
34
+ @traffic_light.yellow?.should == true
35
+ @traffic_light.red!
36
+ @traffic_light.green!
37
+ @traffic_light.yellow?.should == true
38
+ @traffic_light.red?.should == false
39
+ @traffic_light.green?.should == false
40
+ end
41
+ end
data/spec/ciat_spec.rb ADDED
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
@@ -0,0 +1,134 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'spec'
4
+ rescue LoadError
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'ciat'
11
+
12
+ module ERBHelpers
13
+ def build_erb(filename)
14
+ erb = ERB.new(File.read(filename))
15
+ erb.filename = File.expand_path(filename)
16
+ erb
17
+ end
18
+
19
+ def process_erb
20
+ Hpricot(erb.result(binding))
21
+ end
22
+
23
+ def replace_tabs(string)
24
+ string
25
+ end
26
+
27
+ def light_to_sentence(prefix, light)
28
+ prefix
29
+ end
30
+
31
+ def title(text)
32
+ text
33
+ end
34
+
35
+ def render(file, locals)
36
+ @recursion.render(file, locals)
37
+ end
38
+
39
+ def fake(what, content)
40
+ "<div class=\"fake\"><div id=\"#{what}\">#{content}</div></div>"
41
+ end
42
+ end
43
+
44
+ module MockHelpers
45
+ def array_of_mocks(count, name)
46
+ (1..count).to_a.map do |i|
47
+ mock(name + " " + i.to_s)
48
+ end
49
+ end
50
+ end
51
+
52
+ module CustomDetailRowMatchers
53
+ class HaveColSpan
54
+ def initialize(expected)
55
+ @expected = expected
56
+ end
57
+
58
+ def matches?(target)
59
+ @target = target
60
+ (@target/"//td").attr('colspan').eql?(@expected.to_s)
61
+ end
62
+
63
+ def failure_message
64
+ "expected #{@target.inspect} to have colspan #{@expected}"
65
+ end
66
+
67
+ def negative_failure_message
68
+ "expected #{@target.inspect} not to have colspan #{@expected}"
69
+ end
70
+ end
71
+
72
+ class HaveInnerHtml
73
+ def initialize(xpath, expected)
74
+ @xpath = xpath
75
+ @expected = expected
76
+ end
77
+
78
+ def matches?(target)
79
+ @target = target
80
+ (@target/@xpath).inner_html.match(@expected)
81
+ end
82
+
83
+ def failure_message
84
+ "expected #{@target.inspect} to have '#{@expected}' at #{@xpath}"
85
+ end
86
+
87
+ def negative_failure_message
88
+ "expected #{@target.inspect} not to have source '#{@expected}' at #{@xpath}"
89
+ end
90
+ end
91
+
92
+ class HaveNone
93
+ def initialize(xpath)
94
+ @xpath = xpath
95
+ end
96
+
97
+ def matches?(target)
98
+ @target = target
99
+ (@target/@xpath).size == 0
100
+ end
101
+
102
+ def failure_message
103
+ "expected #{@target.inspect} to have nothing with #{@xpath}"
104
+ end
105
+
106
+ def negative_failure_message
107
+ "expected #{@target.inspect} to have something with #{@xpath}"
108
+ end
109
+ end
110
+
111
+ def have_colspan(expected)
112
+ HaveColSpan.new(expected)
113
+ end
114
+
115
+ def have_inner_html(xpath, expected)
116
+ HaveInnerHtml.new(xpath, expected)
117
+ end
118
+
119
+ def have_none(xpath)
120
+ HaveNone.new(xpath)
121
+ end
122
+
123
+ def have_description(header, expected)
124
+ have_inner_html("//#{header}", expected)
125
+ end
126
+
127
+ def have_fake(type, expected)
128
+ have_inner_html("//div[@class=\"fake\"]/div[@id=\"#{type}\"]", expected)
129
+ end
130
+
131
+ def have_diff_table(expected)
132
+ have_inner_html("table", /Expected(.|\s)*Generated(.|\s)*#{expected}/)
133
+ end
134
+ end
@@ -0,0 +1,60 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'hpricot'
4
+
5
+ describe "element output in detail row" do
6
+ include ERBHelpers
7
+ include CustomDetailRowMatchers
8
+
9
+ attr_reader :erb
10
+ attr_reader :recursion
11
+ attr_reader :processor
12
+ attr_reader :test_file
13
+ attr_reader :elements
14
+
15
+ before(:each) do
16
+ @recursion = mock("recursion")
17
+ @processor = mock('processor')
18
+ @test_file = mock("test file")
19
+ @erb = ERB.new(File.read("lib/templates/detail_row/elements.html.erb"))
20
+ end
21
+
22
+ it "should handle no elements" do
23
+ @elements = []
24
+
25
+ doc = process_erb
26
+ doc.should have_inner_html("", /\s*/)
27
+ end
28
+
29
+ it "should process one used element" do
30
+ @elements = [mock("element")]
31
+ template = mock("template")
32
+
33
+ @elements[0].should_receive(:template).and_return(template)
34
+ @recursion.should_receive(:render).
35
+ with(template, :element => @elements[0]).and_return(fake(:element, "faked element"))
36
+
37
+ doc = process_erb
38
+ doc.should have_fake(:element, "faked element")
39
+ end
40
+
41
+ it "should process many elements" do
42
+ @elements = [mock("element 0"), mock("element 1"), mock("element 2")]
43
+ templates = [mock("template 0"), mock("template 1"), mock("template 2")]
44
+
45
+ @elements[0].should_receive(:template).and_return(templates[0])
46
+ @recursion.should_receive(:render).
47
+ with(templates[0], :element => @elements[0]).and_return(fake(:element0, "faked 0"))
48
+ @elements[1].should_receive(:template).and_return(templates[1])
49
+ @recursion.should_receive(:render).
50
+ with(templates[1], :element => @elements[1]).and_return(fake(:element1, "faked 1"))
51
+ @elements[2].should_receive(:template).and_return(templates[2])
52
+ @recursion.should_receive(:render).
53
+ with(templates[2], :element => @elements[2]).and_return(fake(:element2, "faked 2"))
54
+
55
+ doc = process_erb
56
+ doc.should have_fake(:element0, "faked 0")
57
+ doc.should have_fake(:element1, "faked 1")
58
+ doc.should have_fake(:element2, "faked 2")
59
+ end
60
+ end
@@ -0,0 +1,73 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'hpricot'
4
+
5
+ describe "detail row of test report" do
6
+ include ERBHelpers
7
+ include CustomDetailRowMatchers
8
+
9
+ attr_reader :erb
10
+ attr_reader :recursion
11
+
12
+ before(:each) do
13
+ @result = mock('result')
14
+ @test_file = mock('test file')
15
+ @recursion = mock('recursion')
16
+ @erb = build_erb("lib/templates/detail_row.html.erb")
17
+
18
+ @result.should_receive(:test_file).
19
+ any_number_of_times.and_return(@test_file)
20
+ end
21
+
22
+ it "should work with no subresults" do
23
+ @result.should_receive(:subresults).at_least(:once).and_return([])
24
+
25
+ doc = process_erb
26
+ doc.should have_colspan(1)
27
+ end
28
+
29
+ it "should work with one processor" do
30
+ subresult = mock('subresult')
31
+
32
+ @result.should_receive(:subresults).
33
+ any_number_of_times.and_return([subresult])
34
+ expect_red_or_green(subresult, "The Processor", "fake elements")
35
+
36
+ doc = process_erb
37
+ doc.should have_description("h3", "Results from The Processor")
38
+ doc.should have_fake(:elements, "fake elements")
39
+ end
40
+
41
+ it "should work with many processors" do
42
+ subresults = [mock('subresult 0'), mock('subresult 1'), mock('subresult 2')]
43
+
44
+ @result.should_receive(:subresults).
45
+ any_number_of_times.and_return(subresults)
46
+ expect_red_or_green(subresults[0], "Processor 0", "fake elements 0")
47
+ expect_red_or_green(subresults[1], "Processor 1", "fake elements 1")
48
+ expect_red_or_green(subresults[2], "Processor 2", "fake elements 2")
49
+
50
+ doc = process_erb
51
+ doc.should have_description("h3", "Results from Processor 0")
52
+ doc.should have_fake(:elements, "fake elements 0")
53
+ doc.should have_description("h3", "Results from Processor 1")
54
+ doc.should have_fake(:elements, "fake elements 1")
55
+ doc.should have_description("h3", "Results from Processor 2")
56
+ doc.should have_fake(:elements, "fake elements 2")
57
+ end
58
+
59
+ def expect_red_or_green(subresult, description, rendered_elements)
60
+ processor, elements = mock('processor'), mock('elements')
61
+
62
+ subresult.should_receive(:processor).and_return(processor)
63
+ processor.should_receive(:describe).with().and_return(description)
64
+ subresult.should_receive(:relevant_elements).and_return(elements)
65
+ @recursion.should_receive(:render).
66
+ with("detail_row/elements", :elements => elements).
67
+ and_return(fake(:elements, rendered_elements))
68
+ end
69
+
70
+ def result
71
+ @result
72
+ end
73
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'hpricot'
4
+
5
+ describe "checked-files output in detail row" do
6
+ include ERBHelpers
7
+ include CustomDetailRowMatchers
8
+
9
+ attr_reader :erb
10
+ attr_reader :element
11
+
12
+ before(:each) do
13
+ @erb = ERB.new(File.read("lib/templates/elements/diff.html.erb"))
14
+ end
15
+
16
+ it "should process one checked file" do
17
+ @element = mock("element")
18
+
19
+ @element.should_receive(:name).and_return(:element)
20
+ @element.should_receive(:filename).and_return("the filename")
21
+ @element.should_receive(:describe).at_least(:once).and_return("the description")
22
+ @element.should_receive(:content).and_return("the diff")
23
+
24
+ doc = process_erb
25
+ doc.should have_description("h4", "the description")
26
+ doc.should have_diff_table("the diff")
27
+ end
28
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'hpricot'
4
+
5
+ describe "element output in detail row" do
6
+ include ERBHelpers
7
+ include CustomDetailRowMatchers
8
+
9
+ attr_reader :erb
10
+ attr_reader :element
11
+
12
+ before(:each) do
13
+ @erb = ERB.new(File.read("lib/templates/elements/plain.html.erb"))
14
+ end
15
+
16
+ it "should process a plain element" do
17
+ @element = mock("element")
18
+
19
+ @element.should_receive(:name).and_return(:the_name)
20
+ @element.should_receive(:filename).and_return("the filename")
21
+ @element.should_receive(:describe).at_least(:once).and_return("the description")
22
+ @element.should_receive(:content).and_return("the content")
23
+
24
+ doc = process_erb
25
+ doc.should have_element_description(:the_name, "the description")
26
+ doc.should have_element_content(:the_name, "the content")
27
+ end
28
+
29
+ def have_element_description(element, expected_description)
30
+ have_inner_html("div.#{element} h4", expected_description)
31
+ end
32
+
33
+ def have_element_content(element, expected_content)
34
+ have_inner_html("div.#{element} pre", expected_content)
35
+ end
36
+ end
@@ -0,0 +1,85 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'hpricot'
4
+
5
+ describe "report" do
6
+ include ERBHelpers
7
+
8
+ before(:each) do
9
+ @elements = mock("elements")
10
+ @recursion = mock("recursion")
11
+
12
+ @processors = []
13
+ @results = []
14
+ @report_title = "CIAT Report"
15
+ @counter = mock("counter")
16
+ @size = mock("size")
17
+
18
+ @recursion.stub!(:render).with("test_numbers", :counter => @counter, :size => @size)
19
+ @recursion.stub!(:new_grouping?).with(:anything).and_return(false)
20
+
21
+ @erb = ERB.new(File.read("lib/templates/report.html.erb"))
22
+ end
23
+
24
+ it "should have test numbers" do
25
+ @recursion.should_receive(:render).
26
+ with("test_numbers", :counter => @counter, :size => @size).
27
+ and_return("<h6>The Test Numbers</h6>")
28
+
29
+ (process_erb/"h6").inner_text.should == "The Test Numbers"
30
+ end
31
+
32
+ describe "writing table header" do
33
+ it "should work with no processors" do
34
+ @processors = []
35
+
36
+ (process_erb/"tr#header th").inner_text.should == "Description"
37
+ end
38
+
39
+ it "should work with several processors" do
40
+ @processors = [mock("p 0"), mock("p 1"), mock("p 2")]
41
+
42
+ @processors[0].should_receive(:describe).and_return("d0")
43
+ @processors[1].should_receive(:describe).and_return("d1")
44
+ @processors[2].should_receive(:describe).and_return("d2")
45
+
46
+ (process_erb/"tr#header th").inner_text.should == "Description" + "d0" + "d1" + "d2"
47
+ end
48
+ end
49
+
50
+ describe "writing table rows" do
51
+ def new_grouping?(result)
52
+ false
53
+ end
54
+
55
+ it "should write summary rows" do
56
+ @results = [mock("r 0"), mock("r 1"), mock("r 2")]
57
+
58
+ @recursion.should_receive(:render).
59
+ with("summary_row", :result => @results[0])
60
+ @recursion.should_receive(:render).
61
+ with("summary_row", :result => @results[1])
62
+ @recursion.should_receive(:render).
63
+ with("summary_row", :result => @results[2])
64
+ @recursion.should_receive(:render).
65
+ with("detail_row", :result => @results[0])
66
+ @recursion.should_receive(:render).
67
+ with("detail_row", :result => @results[1])
68
+ @recursion.should_receive(:render).
69
+ with("detail_row", :result => @results[2])
70
+
71
+ process_erb
72
+ end
73
+ end
74
+
75
+ def process_erb
76
+ Hpricot(@erb.result(binding))
77
+ end
78
+
79
+ attr_reader :processors
80
+ attr_reader :results
81
+ attr_reader :report_title
82
+ attr_reader :counter
83
+ attr_reader :size
84
+
85
+ end