rutema 2.0.0.pre3 → 2.0.0.pre4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cabf538e86ed2673ac5431cc178ff853bd2742c8
4
- data.tar.gz: e4a8b0b000d079df30bf627e2a111ce2a8636a62
3
+ metadata.gz: f5900ddbc48f9339395a6fd2fe1b462b1e77eeca
4
+ data.tar.gz: 631736e8566668e737b05e3ac167960d8e7914d7
5
5
  SHA512:
6
- metadata.gz: ffd874f95b6f362387125c2e41eb778a7f5246ffb5e5fff69edd260e37b10fe1feda42c6538f226b55f6f22cdcbef1fc7902f0c68dbc0da986990b23840523c1
7
- data.tar.gz: 9b50992cba646e69ecb0a600f2c9972a8aa00f3b37a80a719a70e934fba344efdfcf6b857105c6a9fbc31bb19ceba4f6f1abe4484d65fccc7041ccc68e7a3d87
6
+ metadata.gz: 1e4226db18b42a03673e1db03621409b0ff00ad64d6f94a489d7fdf03bd015fbdfb0b12333b38bf1c6f24e1cf697f4f571e9a195449fb24b2db0c5d1892154bf
7
+ data.tar.gz: c45f4a04267190e0c6573b1076f31eb92a5b90e8f79f62f8c94a07c565a4d602d5ce950816bfa259e2aa5164e27ba0d7cacd3a79a8722b8b82073652cfb12281
data/History.txt CHANGED
@@ -9,6 +9,9 @@
9
9
  * pre3:
10
10
  * errors now affect the rutema exit code (before it was only test failures)
11
11
  * single test execution works with expected relative paths
12
+ * pre4:
13
+ * NUnit-style XML reporter
14
+ * JSON reporter
12
15
 
13
16
  == 1.3.0 /2012-11-28
14
17
  * remove most of the gem dependencies by not requiring parsers and reporters in the core
data/Manifest.txt CHANGED
@@ -12,4 +12,6 @@ lib/rutema/core/reporter.rb
12
12
  lib/rutema/core/runner.rb
13
13
  lib/rutema/elements/minimal.rb
14
14
  lib/rutema/parsers/xml.rb
15
+ lib/rutema/reporters/json.rb
16
+ lib/rutema/reporters/nunit.rb
15
17
  lib/rutema/version.rb
@@ -9,7 +9,9 @@ module Rutema
9
9
  parse_command_line(command_line_args)
10
10
  @configuration=Rutema::Configuration.new(@config_file)
11
11
  @configuration.context||={}
12
- @configuration.context[:config_file]=File.basename(@config_file)
12
+ @configuration.context[:config_file]=File.expand_path(@config_file)
13
+ @configuration.context[:config_name]=File.basename(@config_file)
14
+ @configuration.context[:start_time]=Time.now
13
15
  @configuration.reporters||={}
14
16
  @configuration.reporters[Rutema::Reporters::Console]||={:class=>Rutema::Reporters::Console, "silent"=>@silent} unless @bare
15
17
  @configuration.reporters[Rutema::Reporters::Summary]||={:class=>Rutema::Reporters::Summary, "silent"=>(@silent||@bare)}
@@ -57,8 +57,16 @@ module Rutema
57
57
  if data[:error]
58
58
  @errors<<data
59
59
  elsif data[:test] && data['status']
60
- @states[data[:test]]||=[]
61
- @states[data[:test]]<<data
60
+ test_state=@states.fetch(data[:test],{})
61
+ test_state["timestamp"]||=data[:timestamp]
62
+ duration=test_state.fetch("duration",0)+data["duration"]
63
+ test_state["duration"]=duration
64
+ test_state["status"]= data["status"]
65
+ steps=test_state.fetch("steps",[])
66
+ steps<<data
67
+ test_state["steps"]=steps
68
+
69
+ @states[data[:test]]=test_state
62
70
  end
63
71
  end
64
72
  end
@@ -97,7 +105,7 @@ module Rutema
97
105
  def report specs,states,errors
98
106
  failures=[]
99
107
  states.each do |k,v|
100
- failures<<k if v.last['status']==:error
108
+ failures<<k if v.fetch("steps",[]).last['status']==:error
101
109
  end
102
110
  unless @silent
103
111
  puts "#{errors.size} errors. #{states.size} test cases executed. #{failures.size} failed"
@@ -110,4 +118,12 @@ module Rutema
110
118
  end
111
119
  end
112
120
  end
121
+
122
+ module Utilities
123
+ require "fileutils"
124
+ def self.write_file filename,content
125
+ FileUtils.mkdir_p(File.dirname(filename),:verbose=>false)
126
+ File.open(filename, 'wb') {|f| f.write(content) }
127
+ end
128
+ end
113
129
  end
@@ -17,9 +17,9 @@ module Rutema
17
17
  end
18
18
 
19
19
  def run spec
20
- state={'start_time'=>Time.now, "sequence_id"=>@number_of_runs,:test=>spec.name}
21
20
  steps=[]
22
21
  status=:success
22
+ state={'start_time'=>Time.now, "sequence_id"=>@number_of_runs,:test=>spec.name}
23
23
  message(:test=>spec.name,'phase'=>'started')
24
24
  if @setup
25
25
  message(:test=>spec.name,'phase'=>'setup')
@@ -0,0 +1,34 @@
1
+ # Copyright (c) 2007-2010 Vassilis Rizopoulos. All rights reserved.
2
+ require 'json'
3
+ require_relative "../core/reporter"
4
+
5
+ module Rutema
6
+ module Reporters
7
+ #Experimental reporter used to dump the data of a run on disk
8
+ #
9
+ #The following configuration keys are used by Rutema::Reporters::JSON
10
+ #
11
+ # filename - the filename to use to save the YAML dump. Default is 'rutema.results.json'
12
+ class JSON<Rutema::Reporters::BlockReporter
13
+ #Default report filename
14
+ DEFAULT_FILENAME="rutema.results.json"
15
+
16
+ def initialize configuration,dispatcher
17
+ super(configuration,dispatcher)
18
+ @filename=configuration.reporters.fetch(self.class,{}).fetch("filename",DEFAULT_FILENAME)
19
+ end
20
+ #We get all the data from a test run in here.
21
+ def report specs,states,errors
22
+ run_entry={}
23
+ run_entry["specs"]=specs.size
24
+ if @configuration && @configuration.context
25
+ run_entry["context"]=@configuration.context
26
+ end
27
+ run_entry["errors"]=errors
28
+ run_entry["states"]=states
29
+
30
+ Rutema::Utilities.write_file(@filename,::JSON.dump(run_entry))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,96 @@
1
+ # Copyright (c) 2015 Vassilis Rizopoulos. All rights reserved.
2
+ require 'rexml/document'
3
+ require_relative "../core/reporter"
4
+
5
+ module Rutema
6
+ module Reporters
7
+ #This reporter generates an NUnit style XML result file based on http://nunit.org/files/testresult_30.txt
8
+ #
9
+ #The following configuration keys are used by Rutema::Reporters::NUnit
10
+ #
11
+ # filename - the filename to use to save the report. Default is 'rutema.results.nunit.xml'
12
+ class NUnit<BlockReporter
13
+ DEFAULT_FILENAME="rutema.results.nunit.xml"
14
+
15
+ def initialize configuration,dispatcher
16
+ super(configuration,dispatcher)
17
+ @filename=configuration.reporters.fetch(self.class,{}).fetch("filename",DEFAULT_FILENAME)
18
+ end
19
+ #We get all the data from a test run in here.
20
+ def report specs,states,errors
21
+ tests=[]
22
+ run_status=:success
23
+ number_of_failed=0
24
+ states.each do |k,v|
25
+ tests<<test_case(k,v)
26
+ number_of_failed+=1 if v['status']!=:success
27
+ end
28
+
29
+ run_status=:error if number_of_failed>0
30
+ failures=errors.map{|error| failure("In #{error[:test]}\n#{error[:error]}")}
31
+ run_status=:error unless failures.empty?
32
+
33
+ attributes={"name"=>@configuration.context["config_name"],
34
+ "fullname"=>@configuration.context["config_file"],
35
+ "testcasecount"=>specs.size,
36
+ "result"=>nunit_result(run_status),
37
+ "total"=>specs.size,
38
+ "passed"=>specs.size-number_of_failed-failures.size,
39
+ "failed"=>number_of_failed,
40
+ "skipped"=>failures.size
41
+ }
42
+ #<test-run id="" name="" fullname="" testcasecount=""
43
+ #result="" time="" run-date="YYYY-MM-DD" start-time="HH:MM:SS">
44
+ #total="18" passed="12" failed="2" inconclusive="1" skipped="3"
45
+ element_run=REXML::Element.new("test-run")
46
+ element_run.add_attributes(attributes)
47
+
48
+ #<test-suite type="rutema" id="" name="" fullname="" testcasecount="" result="" time="">
49
+ #<failure>
50
+ # <message></message>
51
+ #</failure>
52
+ element_suite=REXML::Element.new("test-suite")
53
+ element_suite.add_attributes(attributes)
54
+
55
+ failures.each{|t| element_suite.add_element(t)}
56
+ tests.each{|t| element_suite.add_element(t)}
57
+ element_run.add_element(element_suite)
58
+ xmldoc=REXML::Document.new
59
+ xmldoc<<REXML::XMLDecl.new
60
+ xmldoc.add_element(element_run)
61
+
62
+ Rutema::Utilities.write_file(@filename,xmldoc.to_s)
63
+ end
64
+ private
65
+ def test_case name,state
66
+ #<test-case id="" name="" result="" time="">
67
+ #<failure>
68
+ # <message></message>
69
+ #</failure>
70
+ #</test-case>
71
+ element_test=REXML::Element.new("test-case")
72
+ element_test.add_attributes( "id"=>name,"name"=>name,"result"=>nunit_result(state['status']),"time"=>state["duration"])
73
+ if state['status']!=:success
74
+ msg="Step #{state["steps"].last["number"]} failed."
75
+ msg<<"\nOut:\n#{state["steps"].last["out"]}" unless state["steps"].last["out"].empty?
76
+ msg<<"\nErr:\n#{state["steps"].last["err"]}"
77
+ element_test.add_element(failure(msg))
78
+ end
79
+ return element_test
80
+ end
81
+
82
+ def nunit_result status
83
+ return "Passed" unless status!=:success
84
+ return "Failed"
85
+ end
86
+
87
+ def failure message
88
+ failed=REXML::Element.new("failure")
89
+ msg=REXML::Element.new("message")
90
+ msg.text=message
91
+ failed.add_element(msg)
92
+ return failed
93
+ end
94
+ end
95
+ end
96
+ end
@@ -3,7 +3,7 @@ module Rutema
3
3
  module Version
4
4
  MAJOR=2
5
5
  MINOR=0
6
- TINY="0.pre3"
6
+ TINY="0.pre4"
7
7
  STRING=[ MAJOR, MINOR, TINY ].join( "." )
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rutema
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre3
4
+ version: 2.0.0.pre4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vassilis Rizopoulos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-10 00:00:00.000000000 Z
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: patir
@@ -98,6 +98,8 @@ files:
98
98
  - lib/rutema/core/runner.rb
99
99
  - lib/rutema/elements/minimal.rb
100
100
  - lib/rutema/parsers/xml.rb
101
+ - lib/rutema/reporters/json.rb
102
+ - lib/rutema/reporters/nunit.rb
101
103
  - lib/rutema/version.rb
102
104
  homepage: http://github.com/damphyr/rutema
103
105
  licenses: