ciat 0.4.8 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
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