rutema 2.0.0.pre3 → 2.0.0.pre4

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