ciat 0.4.9 → 0.4.10

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 (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