ciat 0.4.9 → 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/lib/ciat.rb +1 -2
  2. data/lib/ciat/{test_file.rb → ciat_file.rb} +21 -9
  3. data/lib/ciat/erb_helpers.rb +6 -1
  4. data/lib/ciat/feedback/feedback_counter.rb +11 -19
  5. data/lib/ciat/feedback/return_status.rb +6 -2
  6. data/lib/ciat/feedback/standard_output.rb +7 -2
  7. data/lib/ciat/processors/compilation_interpreter.rb +20 -7
  8. data/lib/ciat/processors/compiler.rb +38 -15
  9. data/lib/ciat/processors/interpreter.rb +28 -7
  10. data/lib/ciat/processors/java.rb +2 -8
  11. data/lib/ciat/processors/parrot.rb +0 -3
  12. data/lib/ciat/subresult.rb +14 -4
  13. data/lib/ciat/subtest.rb +83 -0
  14. data/lib/ciat/suite.rb +9 -9
  15. data/lib/ciat/suite_builder.rb +5 -5
  16. data/lib/ciat/test.rb +36 -28
  17. data/lib/ciat/test_result.rb +2 -2
  18. data/lib/ciat/traffic_light.rb +5 -14
  19. data/lib/data/ciat.css +14 -2
  20. data/lib/data/elements.yml +8 -2
  21. data/lib/templates/detail_row.html.erb +10 -4
  22. data/lib/templates/report.html.erb +5 -5
  23. data/lib/templates/summary_row.html.erb +5 -3
  24. data/spec/ciat/{test_file_spec.rb → ciat_file_spec.rb} +51 -19
  25. data/spec/ciat/erb_helpers_spec.rb +8 -13
  26. data/spec/ciat/feedback/feedback_counter_spec.rb +37 -57
  27. data/spec/ciat/feedback/return_status_spec.rb +67 -61
  28. data/spec/ciat/feedback/standard_output_spec.rb +21 -15
  29. data/spec/ciat/processors/compilation_interpreter_spec.rb +12 -0
  30. data/spec/ciat/processors/compiler_spec.rb +12 -0
  31. data/spec/ciat/processors/interpreter_spec.rb +12 -0
  32. data/spec/ciat/processors/java_spec.rb +0 -10
  33. data/spec/ciat/processors/parrot_spec.rb +0 -10
  34. data/spec/ciat/processors/shared_examples_for_element_names.rb +27 -0
  35. data/spec/ciat/rake_task_spec.rb +65 -0
  36. data/spec/ciat/subresult_spec.rb +13 -12
  37. data/spec/ciat/subtest_spec.rb +199 -0
  38. data/spec/ciat/suite_builder_spec.rb +17 -17
  39. data/spec/ciat/suite_spec.rb +13 -13
  40. data/spec/ciat/test_result_spec.rb +36 -0
  41. data/spec/ciat/test_spec.rb +73 -83
  42. data/spec/ciat/traffic_light_spec.rb +21 -31
  43. data/spec/spec_helper.rb +16 -53
  44. data/spec/templates/detail_row/elements_html_erb_spec.rb +3 -4
  45. data/spec/templates/detail_row_html_erb_spec.rb +84 -23
  46. data/spec/templates/elements/diff_html_erb_spec.rb +5 -3
  47. data/spec/templates/summary_row_html_erb_spec.rb +21 -14
  48. metadata +13 -7
  49. data/lib/ciat/processors/basic_processing.rb +0 -55
  50. data/spec/ciat/processors/basic_processing_spec.rb +0 -146
@@ -5,6 +5,7 @@ require 'hpricot'
5
5
  describe "checked-files output in detail row" do
6
6
  include ERBHelpers
7
7
  include CustomDetailRowMatchers
8
+ include Webrat::Matchers
8
9
 
9
10
  attr_reader :erb
10
11
  attr_reader :element
@@ -21,8 +22,9 @@ describe "checked-files output in detail row" do
21
22
  @element.should_receive(:describe).at_least(:once).and_return("the description")
22
23
  @element.should_receive(:content).and_return("the diff")
23
24
 
24
- doc = process_erb
25
- doc.should have_description("h4", "the description")
26
- doc.should have_diff_table("the diff")
25
+ process_erb.should have_selector("body") do |body|
26
+ body.should have_selector("h4", :content => "the description")
27
+ body.should have_diff_table("the diff")
28
+ end
27
29
  end
28
30
  end
@@ -1,10 +1,12 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper.rb'
2
2
 
3
3
  require 'hpricot'
4
+ require 'webrat'
4
5
 
5
6
  describe "summary row of test report" do
6
7
  include ERBHelpers
7
8
  include CustomDetailRowMatchers
9
+ include Webrat::Matchers
8
10
 
9
11
  attr_reader :erb
10
12
  attr_reader :recursion
@@ -20,9 +22,10 @@ describe "summary row of test report" do
20
22
  expect_description("the description")
21
23
  @result.should_receive(:subresults).at_least(:once).and_return([])
22
24
 
23
- doc = process_erb
24
- doc.should have_description("the description")
25
- doc.should have_none("/tr/td[2]")
25
+ process_erb.should have_selector("body") do |body|
26
+ body.should have_selector("a", :content => "the description")
27
+ body.should have_selector("td", :count => 1)
28
+ end
26
29
  end
27
30
 
28
31
  it "should work with one processor" do
@@ -35,9 +38,11 @@ describe "summary row of test report" do
35
38
  expect_light(subresult, :light_setting, "the light")
36
39
 
37
40
  doc = process_erb
38
- doc.should have_description("one proc description")
39
- doc.should have_light(:light_setting, "the light")
40
- doc.should have_none("/tr/td[3]")
41
+ doc.should have_selector("body") do |body|
42
+ body.should have_selector("a", :content => "one proc description")
43
+ body.should have_selector(".light_setting", :content => "the light")
44
+ body.should have_selector("td", :count => 2)
45
+ end
41
46
  end
42
47
 
43
48
  it "should work with many processors" do
@@ -50,24 +55,26 @@ describe "summary row of test report" do
50
55
  expect_light(subresults[1], :light1, "word 1")
51
56
  expect_light(subresults[2], :light2, "word 2")
52
57
 
53
- doc = process_erb
54
- doc.should have_description("description three")
55
- doc.should have_light(:light0, "word 0")
56
- doc.should have_light(:light1, "word 1")
57
- doc.should have_light(:light2, "word 2")
58
- doc.should have_none("/tr/td[5]")
58
+ process_erb.should have_selector("body") do |body|
59
+ body.should have_selector("a", :content => "description three")
60
+ body.should have_light(:light0, "word 0")
61
+ body.should have_light(:light1, "word 1")
62
+ body.should have_light(:light2, "word 2")
63
+ body.should have_selector("td", :count => 4)
64
+ end
59
65
  end
60
66
 
61
67
  def expect_light(subresult, setting, word)
62
68
  light = mock("mock #{setting}")
63
69
  subresult.should_receive(:light).at_least(:once).and_return(light)
64
- light.should_receive(:setting).and_return(setting)
70
+ light.should_receive(:color).and_return(setting)
65
71
  light.should_receive(:text).and_return(word)
66
72
  end
67
73
 
68
74
  def expect_description(text)
69
75
  description = mock("description")
70
- @result.should_receive(:element).with(:description).and_return(description)
76
+ @result.should_receive(:element).
77
+ with(:description).and_return(description)
71
78
  description.should_receive(:content).and_return(text)
72
79
  end
73
80
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ciat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy D. Frens
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-10-30 00:00:00 -05:00
13
+ date: 2009-11-21 00:00:00 -06:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -24,6 +24,7 @@ extra_rdoc_files:
24
24
  - README.rdoc
25
25
  files:
26
26
  - lib/ciat.rb
27
+ - lib/ciat/ciat_file.rb
27
28
  - lib/ciat/differs/html_differ.rb
28
29
  - lib/ciat/erb_helpers.rb
29
30
  - lib/ciat/feedback/composite.rb
@@ -33,7 +34,6 @@ files:
33
34
  - lib/ciat/feedback/return_status.rb
34
35
  - lib/ciat/feedback/standard_output.rb
35
36
  - lib/ciat/io.rb
36
- - lib/ciat/processors/basic_processing.rb
37
37
  - lib/ciat/processors/compilation_interpreter.rb
38
38
  - lib/ciat/processors/compiler.rb
39
39
  - lib/ciat/processors/interpreter.rb
@@ -41,11 +41,11 @@ files:
41
41
  - lib/ciat/processors/parrot.rb
42
42
  - lib/ciat/rake_task.rb
43
43
  - lib/ciat/subresult.rb
44
+ - lib/ciat/subtest.rb
44
45
  - lib/ciat/suite.rb
45
46
  - lib/ciat/suite_builder.rb
46
47
  - lib/ciat/test.rb
47
48
  - lib/ciat/test_element.rb
48
- - lib/ciat/test_file.rb
49
49
  - lib/ciat/test_result.rb
50
50
  - lib/ciat/traffic_light.rb
51
51
  - lib/data/ciat.css
@@ -70,7 +70,7 @@ rdoc_options:
70
70
  - --title
71
71
  - CIAT -- Compiler and Interpreter Acceptance Tester
72
72
  - --main
73
- - README.txt
73
+ - README.rdoc
74
74
  - --line-numbers
75
75
  require_paths:
76
76
  - lib
@@ -94,20 +94,26 @@ signing_key:
94
94
  specification_version: 3
95
95
  summary: Acceptance tester for compilers and interpreters
96
96
  test_files:
97
+ - spec/ciat/ciat_file_spec.rb
97
98
  - spec/ciat/erb_helpers_spec.rb
98
99
  - spec/ciat/feedback/composite_spec.rb
99
100
  - spec/ciat/feedback/feedback_counter_spec.rb
100
101
  - spec/ciat/feedback/html_feedback_spec.rb
101
102
  - spec/ciat/feedback/return_status_spec.rb
102
103
  - spec/ciat/feedback/standard_output_spec.rb
103
- - spec/ciat/processors/basic_processing_spec.rb
104
+ - spec/ciat/processors/compilation_interpreter_spec.rb
105
+ - spec/ciat/processors/compiler_spec.rb
106
+ - spec/ciat/processors/interpreter_spec.rb
104
107
  - spec/ciat/processors/java_spec.rb
105
108
  - spec/ciat/processors/parrot_spec.rb
109
+ - spec/ciat/processors/shared_examples_for_element_names.rb
110
+ - spec/ciat/rake_task_spec.rb
106
111
  - spec/ciat/subresult_spec.rb
112
+ - spec/ciat/subtest_spec.rb
107
113
  - spec/ciat/suite_builder_spec.rb
108
114
  - spec/ciat/suite_spec.rb
109
115
  - spec/ciat/test_element_spec.rb
110
- - spec/ciat/test_file_spec.rb
116
+ - spec/ciat/test_result_spec.rb
111
117
  - spec/ciat/test_spec.rb
112
118
  - spec/ciat/traffic_light_spec.rb
113
119
  - spec/ciat_spec.rb
@@ -1,55 +0,0 @@
1
- require 'rake'
2
- require 'ciat/differs/html_differ'
3
-
4
- module CIAT::Processors
5
- module BasicProcessing
6
- include CIAT::Differs::HtmlDiffer
7
-
8
- # Executes the program, and diffs the output.
9
- def process(test)
10
- # TODO: verify required elements
11
- # TODO: handle optional element
12
- if execute(test)
13
- if diff(test)
14
- CIAT::TrafficLight::GREEN
15
- else
16
- CIAT::TrafficLight::RED
17
- end
18
- else
19
- CIAT::TrafficLight::YELLOW
20
- end
21
- end
22
-
23
- def execute(test)
24
- RakeFileUtils.verbose(false) do
25
- sh "#{executable} '#{input_file(test)}' #{command_line_args(test)} > '#{output_file(test)}' 2> '#{error_file(test)}'" do |ok, result|
26
- return ok
27
- end
28
- end
29
- end
30
-
31
- def command_line_args(test) #:nodoc:
32
- test.element?(:command_line) ? test.element(:command_line).content.strip : ''
33
- end
34
-
35
- # Compares the expected and generated executions.
36
- def diff(test)
37
- html_diff(
38
- test.element(kind.output_name).as_file,
39
- test.element(kind.output_name, :generated).as_file,
40
- test.element(kind.output_name, :diff).as_file)
41
- end
42
-
43
- def input_file(test)
44
- test.element(kind.input_name).as_file
45
- end
46
-
47
- def output_file(test)
48
- test.element(kind.output_name, :generated).as_file
49
- end
50
-
51
- def error_file(test)
52
- test.element(kind.output_name, :error).as_file
53
- end
54
- end
55
- end
@@ -1,146 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- describe CIAT::Processors::BasicProcessing do
4
- class Processor
5
- include CIAT::Processors::BasicProcessing
6
- end
7
-
8
- before(:each) do
9
- @processor = Processor.new
10
- end
11
-
12
- describe "processing" do
13
- before(:each) do
14
- @test = mock("test")
15
- end
16
-
17
- it "should execute and diff normally" do
18
- @processor.should_receive(:execute).with(@test).and_return(true)
19
- @processor.should_receive(:diff).with(@test).and_return(true)
20
-
21
- @processor.process(@test).should == CIAT::TrafficLight::GREEN
22
- end
23
-
24
- it "should execute with an error" do
25
- @processor.should_receive(:execute).with(@test).and_return(false)
26
-
27
- @processor.process(@test).should == CIAT::TrafficLight::YELLOW
28
- end
29
-
30
- it "should execute normally and diff with a failure" do
31
- @processor.should_receive(:execute).with(@test).and_return(true)
32
- @processor.should_receive(:diff).with(@test).and_return(false)
33
-
34
- @processor.process(@test).should == CIAT::TrafficLight::RED
35
- end
36
- end
37
-
38
- describe "executing a processor for a test" do
39
- it "should put together and execute a shell command" do
40
- test, ok, result = mock("test"), mock("ok"), mock("result")
41
-
42
- @processor.should_receive(:executable).and_return("[executable]")
43
- @processor.should_receive(:input_file).with(test).
44
- and_return("[input]")
45
- @processor.should_receive(:command_line_args).with(test).
46
- and_return("[args]")
47
- @processor.should_receive(:output_file).with(test).
48
- and_return("[output]")
49
- @processor.should_receive(:error_file).with(test).
50
- and_return("[error]")
51
- @processor.should_receive(:sh).
52
- with("[executable] '[input]' [args] > '[output]' 2> '[error]'").
53
- and_yield(ok, result)
54
-
55
- @processor.execute(test).should == ok
56
- end
57
- end
58
-
59
- describe "handling command-line arguments" do
60
- it "should strip command-line arguments" do
61
- test = mock("test")
62
- command_line = mock("command_line")
63
-
64
- test.should_receive(:element?).with(:command_line).and_return(true)
65
- test.should_receive(:element).with(:command_line).
66
- and_return(command_line)
67
- command_line.should_receive(:content).
68
- and_return(" argument1 \t argument2 \n\n")
69
-
70
- @processor.command_line_args(test).should == "argument1 \t argument2"
71
- end
72
-
73
- it "should return empty string if none provided" do
74
- test = mock("test")
75
-
76
- test.should_receive(:element?).with(:command_line).and_return(false)
77
-
78
- @processor.command_line_args(test).should == ''
79
- end
80
- end
81
-
82
- describe "computing a diff" do
83
- it "should compute a diff in HTML" do
84
- test, kind, result =
85
- mock("test"), mock("processor kind"), mock("result")
86
- output_name = mock("output name")
87
-
88
- @processor.should_receive(:kind).any_number_of_times.and_return(kind)
89
- kind.should_receive(:output_name).any_number_of_times.
90
- and_return(output_name)
91
- original_file = expect_element_as_file(test, output_name)
92
- generated_file = expect_element_as_file(test, output_name, :generated)
93
- diff_file = expect_element_as_file(test, output_name, :diff)
94
- @processor.should_receive(:html_diff).
95
- with(original_file, generated_file, diff_file).and_return(result)
96
-
97
- @processor.diff(test).should eql(result)
98
- end
99
-
100
- def expect_element_as_file(test, *names)
101
- element, filename = mock("#{names} element"), mock("#{names} filename")
102
- test.should_receive(:element).with(*names).and_return(element)
103
- element.should_receive(:as_file).and_return(filename)
104
- filename
105
- end
106
- end
107
-
108
- it "should get filename of input" do
109
- test = mock("test")
110
- kind, element, name = mock("kind"), mock("element"), mock("name")
111
- filename = mock("filename")
112
-
113
- @processor.should_receive(:kind).and_return(kind)
114
- kind.should_receive(:input_name).and_return(name)
115
- test.should_receive(:element).with(name).and_return(element)
116
- element.should_receive(:as_file).and_return(filename)
117
-
118
- @processor.input_file(test).should eql(filename)
119
- end
120
-
121
- it "should get filename of input" do
122
- test = mock("test")
123
- kind, element, name = mock("kind"), mock("element"), mock("name")
124
- filename = mock("filename")
125
-
126
- @processor.should_receive(:kind).and_return(kind)
127
- kind.should_receive(:output_name).and_return(name)
128
- test.should_receive(:element).with(name, :generated).and_return(element)
129
- element.should_receive(:as_file).and_return(filename)
130
-
131
- @processor.output_file(test).should eql(filename)
132
- end
133
-
134
- it "should get filename of input" do
135
- test = mock("test")
136
- kind, element, name = mock("kind"), mock("element"), mock("name")
137
- filename = mock("filename")
138
-
139
- @processor.should_receive(:kind).and_return(kind)
140
- kind.should_receive(:output_name).and_return(name)
141
- test.should_receive(:element).with(name, :error).and_return(element)
142
- element.should_receive(:as_file).and_return(filename)
143
-
144
- @processor.error_file(test).should eql(filename)
145
- end
146
- end