teresa 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 645edf57af00f68055fc5488cbb05921cff9ec1e
4
+ data.tar.gz: 7664b58152731bec25704e264cee249d60e60605
5
+ SHA512:
6
+ metadata.gz: 95e8b4b2d31d2811d7748c42f6faf4e2ed647c8015e2f5e2672629a46fab0bb4133b0e853f6ab1bd260f6789eb74a0ab7d75e9ddbfa17e6e027eabf2384b70fa
7
+ data.tar.gz: daab3e0251200a0410e15680199872b85ff4cf2a9017585715c714fbf1fd7cdc12228763ae5a09d70b41b48d1ec469ed7b0b15116e690f730b868e3b8a123b8d
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Konstantin Haase
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,25 @@
1
+ # Teresa
2
+
3
+ Teresa is a Test Result Analyzer. Well, it's more of a Test Output Parser, but that doesn't make a great name.
4
+ It takes the output from a test run and parses it into Ruby objects.
5
+
6
+ Supported formats:
7
+
8
+ * [Test Anywhere Protocol](http://en.wikipedia.org/wiki/Test_Anything_Protocol) (version 12 and 13)
9
+ * [Knock](https://github.com/chneukirchen/knock#readme)
10
+ * [xUnit XML](http://en.wikipedia.org/wiki/XUnit), as produced by [JUnit](http://junit.org/) and other frameworks
11
+
12
+ ## Usage
13
+
14
+ ``` ruby
15
+ require 'teresa'
16
+
17
+ # parse a string of test output
18
+ Teresa.parse(some_input) do |test|
19
+ puts "#{test.name}: #{test.state}"
20
+ end
21
+
22
+ # parse a file
23
+ tests = Teresa.parse_file("result.xml")
24
+ puts "#{tests.size} tests found"
25
+ ```
@@ -0,0 +1,27 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+
3
+ desc "run specs"
4
+ task :spec do
5
+ ruby '-S rspec'
6
+ end
7
+
8
+ desc "generate gemspec"
9
+ task :gemspec do
10
+ require 'teresa/version'
11
+ content = File.read('teresa.gemspec')
12
+ fields = {
13
+ authors: `git shortlog -sn`.b.scan(/[^\d\s].*/), email: `git shortlog -sne`.b.scan(/[^<]+@[^>]+/),
14
+ files: `git ls-files`.b.split("\n").reject { |f| f =~ /^(\.|Gemfile)/ }
15
+ }
16
+
17
+ fields.each do |field, values|
18
+ updated = " s.#{field} = [" << values.map { |v| "\n %p" % v }.join(',') << "\n ]"
19
+ content.sub!(/ s\.#{field} = \[\n( .*\n)* \]/, updated)
20
+ end
21
+
22
+ content.sub!(/(s\.version.*=\s+).*/, "\\1\"#{Teresa::VERSION}\"")
23
+ content.gsub!(/./) { |c| c.bytesize > 1 ? "\\u{#{c.codepoints.first.to_s(16)}}" : c }
24
+ File.open('teresa.gemspec', 'w') { |f| f << content }
25
+ end
26
+
27
+ task default: [:spec, :gemspec]
@@ -0,0 +1,16 @@
1
+ require 'teresa/error'
2
+ require 'teresa/parser'
3
+ require 'teresa/test'
4
+ require 'teresa/version'
5
+
6
+ module Teresa
7
+ extend self
8
+
9
+ def parse(string, options = {}, &block)
10
+ Parser.parse(string, options, &block)
11
+ end
12
+
13
+ def parse_file(string, options = {}, &block)
14
+ Parser.parse_file(string, options, &block)
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module Teresa
2
+ Error ||= Class.new(StandardError)
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'teresa/parser/tap'
2
+ require 'teresa/parser/xunit'
3
+
4
+ module Teresa
5
+ module Parser
6
+ extend self
7
+
8
+ def detect(string)
9
+ constant = constants.sort.reverse.map { |c| const_get(c) }.detect { |c| c.matches? string }
10
+ constant or raise Teresa::Error, "cannot detect test format"
11
+ end
12
+
13
+ def get(type)
14
+ return type if type.respond_to? :new
15
+ raise Teresa::Error, "unknown test format #{type}" unless name = constants.detect { |c| c.to_s.downcase == type.to_s }
16
+ const_get(name)
17
+ end
18
+
19
+ def parse(string, options = {}, &block)
20
+ parser = get(options[:type] || detect(string)).new(string)
21
+ block ? parser.parse(&block) : parser.enum_for(:parse).to_a
22
+ end
23
+
24
+ def parse_file(file, options = {}, &block)
25
+ encoding = options.fetch(:encoding) { Encoding::UTF_8 }
26
+ parse(File.read(file, encoding: encoding), options)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module Teresa
2
+ module Parser
3
+ class Generic
4
+ def self.matches(regexp)
5
+ define_singleton_method(:matches?) { |s| s =~ regexp }
6
+ end
7
+
8
+ def self.matches?(string)
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,61 @@
1
+ require 'teresa/parser/generic'
2
+ require 'strscan'
3
+
4
+ module Teresa
5
+ module Parser
6
+ # Implements Test Anything Protocol and Knock test output format.
7
+ class TAP < Generic
8
+ matches /^(?:not )?ok\b|\A\s*1\.\.0/
9
+
10
+ def initialize(string)
11
+ @string = string
12
+ end
13
+
14
+ def parse
15
+ scanner = StringScanner.new(@string)
16
+ version = scanner.scan(/TAP version (\d+)\n/) ? scanner[1].to_i : 12
17
+ maximum = scanner.scan(/1\.\.(\d+)\n/) && scanner[1]
18
+ expected = 0
19
+
20
+ raise "TAP #{version} is not supported" unless version.between? 12, 13
21
+
22
+ while scanner.scan_until(/^(not )?ok\b/)
23
+ expected += 1
24
+ test = Test.new
25
+ test.state = :failed if scanner[1]
26
+ test.id = scanner.scan(/ +(\d+)/) ? scanner[1].to_i : expected
27
+ test.message = scanner.scan(/ +.+/).to_s.gsub(/^\s*-|-\s*$/, '').strip
28
+ test.name = test.message.gsub(/(\: FAILED)?(#.*)?$/, '')
29
+ test.state = :skipped if test.message =~ /# *(SKIP|TODO)/i
30
+ expected = test.id
31
+ test.name = "Test ##{test.id}" if test.name.empty?
32
+ test.message = nil if test.message.empty?
33
+
34
+ if version >= 13 and scanner.scan(/^([ \t]+)---\n$/)
35
+ test.output = "meta data:\n\n\t---\n"
36
+ prefix = scanner[1]
37
+
38
+ while scanner.scan(/^#{prefix}(.*)\n/)
39
+ test.output << scanner[1]
40
+ test.message = scanner[1][/message: *"?(.*)"?/, 1] if scanner[1].start_with? "message:"
41
+ end
42
+
43
+ test.output << "\n"
44
+ end
45
+
46
+ while scanner.scan(/^# ?(.*\n)/)
47
+ test.output ||= ""
48
+ test.output << scanner[1]
49
+ end
50
+
51
+ yield test
52
+ end
53
+
54
+ unless scanner.scan_until(/^Bail out!\b/)
55
+ maximum ||= scanner.scan_until(/1\.\.(\d+)\n/) && scanner[1]
56
+ expected.upto(maximum.to_i) { |i| yield Test.new(state: :failed, id: i, name: "Test ##{i}") }
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,33 @@
1
+ require 'teresa/parser/generic'
2
+ require 'nokogiri'
3
+
4
+ module Teresa
5
+ module Parser
6
+ # Implements xUnit (like JUnit) output format.
7
+ class XUnit < Generic
8
+ matches /<\?xml.*<testsuite/m
9
+
10
+ def initialize(string)
11
+ @document = Nokogiri::XML(string)
12
+ end
13
+
14
+ def parse
15
+ @document.xpath("testsuite").each do |suite|
16
+ suite.xpath("testcase").each do |node|
17
+ test = Test.new(name: node["name"], id: [suite["name"], node["classname"], node["name"]].compact.join(" "))
18
+ test.time = node["time"].to_f if node["time"]
19
+ test.name = node["classname"] + " " + node["name"] unless test.name.include?(" ") or node["name"].to_s.empty?
20
+
21
+ node.xpath("failure|error|skipped").each do |failure|
22
+ test.state = failure.node_name == "skipped" ? :skipped : :failed
23
+ test.message = failure["message"]
24
+ test.output = failure.text
25
+ end
26
+
27
+ yield test
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ module Teresa
2
+ class Test
3
+ attr_accessor :state, :name, :id, :time, :message, :output
4
+
5
+ def initialize(options = {})
6
+ @state = :passed
7
+ options.each { |k,v| send("#{k}=", v) if respond_to? "#{k}=" }
8
+ end
9
+
10
+ def failed?
11
+ state == :failed
12
+ end
13
+
14
+ def passed?
15
+ state == :passed
16
+ end
17
+
18
+ def skipped?
19
+ state == :skipped
20
+ end
21
+
22
+ def inspect
23
+ "#<%p:%p>" % [self.class, name]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Teresa
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,10 @@
1
+ ok - should be empty
2
+ ok - should have zero size
3
+ ok - should raise on trying fetch any index
4
+ ok - should have an object identity
5
+ ok - should be a palindrome
6
+ not ok - should have super powers: FAILED
7
+ # Bacon::Error: no super powers found
8
+ # ./whirlwind.rb:39: A new array - should have super powers
9
+ # ./whirlwind.rb:38
10
+ # ./whirlwind.rb:3
@@ -0,0 +1,12 @@
1
+ ok 1 - should be empty
2
+ ok 2 - should have zero size
3
+ ok 3 - should raise on trying fetch any index
4
+ ok 4 - should have an object identity
5
+ ok 5 - should be a palindrome
6
+ not ok 6 - should have super powers: FAILED
7
+ # Bacon::Error: no super powers found
8
+ # ./whirlwind.rb:39: A new array - should have super powers
9
+ # ./whirlwind.rb:38
10
+ # ./whirlwind.rb:3
11
+ 1..6
12
+ # 6 tests, 9 assertions, 1 failures, 0 errors
@@ -0,0 +1,65 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuites disabled="" errors="" failures="" name="" tests="" time="">
3
+ <testsuite disabled="" errors="" failures="" hostname="" id=""
4
+ name="" package="" skipped="" tests="" time="" timestamp="">
5
+ <properties>
6
+ <property name="" value=""/>
7
+ <property name="" value=""/>
8
+ </properties>
9
+ <testcase assertions="" classname="" name="" status="" time="">
10
+ <skipped/>
11
+ <error message="" type=""/>
12
+ <error message="" type=""/>
13
+ <failure message="" type=""/>
14
+ <failure message="" type=""/>
15
+ <system-out/>
16
+ <system-out/>
17
+ <system-err/>
18
+ <system-err/>
19
+ </testcase>
20
+ <testcase assertions="" classname="" name="" status="" time="">
21
+ <skipped/>
22
+ <error message="" type=""/>
23
+ <error message="" type=""/>
24
+ <failure message="" type=""/>
25
+ <failure message="" type=""/>
26
+ <system-out/>
27
+ <system-out/>
28
+ <system-err/>
29
+ <system-err/>
30
+ </testcase>
31
+ <system-out/>
32
+ <system-err/>
33
+ </testsuite>
34
+ <testsuite disabled="" errors="" failures="" hostname="" id=""
35
+ name="" package="" skipped="" tests="" time="" timestamp="">
36
+ <properties>
37
+ <property name="" value=""/>
38
+ <property name="" value=""/>
39
+ </properties>
40
+ <testcase assertions="" classname="" name="" status="" time="">
41
+ <skipped/>
42
+ <error message="" type=""/>
43
+ <error message="" type=""/>
44
+ <failure message="" type=""/>
45
+ <failure message="" type=""/>
46
+ <system-out/>
47
+ <system-out/>
48
+ <system-err/>
49
+ <system-err/>
50
+ </testcase>
51
+ <testcase assertions="" classname="" name="" status="" time="">
52
+ <skipped/>
53
+ <error message="" type=""/>
54
+ <error message="" type=""/>
55
+ <failure message="" type=""/>
56
+ <failure message="" type=""/>
57
+ <system-out/>
58
+ <system-out/>
59
+ <system-err/>
60
+ <system-err/>
61
+ </testcase>
62
+ <system-out/>
63
+ <system-err/>
64
+ </testsuite>
65
+ </testsuites>
@@ -0,0 +1,11 @@
1
+ 1..6
2
+ #
3
+ # Create a new Board and Tile, then place
4
+ # the Tile onto the board.
5
+ #
6
+ ok 1 - The object isa Board
7
+ ok 2 - Board size is zero
8
+ ok 3 - The object isa Tile
9
+ ok 4 - Get possible places to put the Tile
10
+ ok 5 - Placing the tile produces no error
11
+ ok 6 - Board size is 1
@@ -0,0 +1,111 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <testsuite failures="1" time="0.114" errors="0" skipped="0" tests="5" name="fizzbuzz.FizzBuzzTest">
3
+ <properties>
4
+ <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
5
+ <property name="sun.boot.library.path" value="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib"/>
6
+ <property name="java.vm.version" value="23.0-b16"/>
7
+ <property name="user.country.format" value="DE"/>
8
+ <property name="gopherProxySet" value="false"/>
9
+ <property name="java.vm.vendor" value="Oracle Corporation"/>
10
+ <property name="java.vendor.url" value="http://java.oracle.com/"/>
11
+ <property name="path.separator" value=":"/>
12
+ <property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
13
+ <property name="file.encoding.pkg" value="sun.io"/>
14
+ <property name="user.country" value="US"/>
15
+ <property name="sun.java.launcher" value="SUN_STANDARD"/>
16
+ <property name="sun.os.patch.level" value="unknown"/>
17
+ <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
18
+ <property name="user.dir" value="/Users/konstantin/Workspace/FizzBuzz"/>
19
+ <property name="java.runtime.version" value="1.7.0_04-ea-b15"/>
20
+ <property name="java.awt.graphicsenv" value="sun.awt.CGraphicsEnvironment"/>
21
+ <property name="basedir" value="/Users/konstantin/Workspace/FizzBuzz"/>
22
+ <property name="java.endorsed.dirs" value="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/endorsed"/>
23
+ <property name="os.arch" value="amd64"/>
24
+ <property name="surefire.real.class.path" value="/Users/konstantin/Workspace/FizzBuzz/target/surefire/surefirebooter6134039262581307326.jar"/>
25
+ <property name="java.io.tmpdir" value="/var/folders/wt/qxh50jgs33q2_cszt32tg8140000gn/T/"/>
26
+ <property name="line.separator" value="
27
+ "/>
28
+ <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
29
+ <property name="os.name" value="Mac OS X"/>
30
+ <property name="sun.jnu.encoding" value="US-ASCII"/>
31
+ <property name="java.library.path" value="/Users/konstantin/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java"/>
32
+ <property name="surefire.test.class.path" value="/Users/konstantin/Workspace/FizzBuzz/target/test-classes:/Users/konstantin/Workspace/FizzBuzz/target/classes:/Users/konstantin/.m2/repository/junit/junit/4.4/junit-4.4.jar:"/>
33
+ <property name="java.specification.name" value="Java Platform API Specification"/>
34
+ <property name="java.class.version" value="51.0"/>
35
+ <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
36
+ <property name="os.version" value="10.8.4"/>
37
+ <property name="http.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
38
+ <property name="user.home" value="/Users/konstantin"/>
39
+ <property name="user.timezone" value=""/>
40
+ <property name="java.awt.printerjob" value="sun.lwawt.macosx.CPrinterJob"/>
41
+ <property name="java.specification.version" value="1.7"/>
42
+ <property name="file.encoding" value="US-ASCII"/>
43
+ <property name="user.name" value="konstantin"/>
44
+ <property name="java.class.path" value="/Users/konstantin/Workspace/FizzBuzz/target/test-classes:/Users/konstantin/Workspace/FizzBuzz/target/classes:/Users/konstantin/.m2/repository/junit/junit/4.4/junit-4.4.jar:"/>
45
+ <property name="java.vm.specification.version" value="1.7"/>
46
+ <property name="sun.arch.data.model" value="64"/>
47
+ <property name="java.home" value="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre"/>
48
+ <property name="sun.java.command" value="/Users/konstantin/Workspace/FizzBuzz/target/surefire/surefirebooter6134039262581307326.jar /Users/konstantin/Workspace/FizzBuzz/target/surefire/surefire4030486674810092790tmp /Users/konstantin/Workspace/FizzBuzz/target/surefire/surefire6864216330091954051tmp"/>
49
+ <property name="java.specification.vendor" value="Oracle Corporation"/>
50
+ <property name="user.language" value="en"/>
51
+ <property name="awt.toolkit" value="sun.lwawt.macosx.LWCToolkit"/>
52
+ <property name="java.vm.info" value="mixed mode"/>
53
+ <property name="java.version" value="1.7.0_04-ea"/>
54
+ <property name="java.ext.dirs" value="/Users/konstantin/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java"/>
55
+ <property name="sun.boot.class.path" value="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/JObjC.jar:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/classes"/>
56
+ <property name="java.vendor" value="Oracle Corporation"/>
57
+ <property name="localRepository" value="/Users/konstantin/.m2/repository"/>
58
+ <property name="file.separator" value="/"/>
59
+ <property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/>
60
+ <property name="sun.cpu.endian" value="little"/>
61
+ <property name="sun.io.unicode.encoding" value="UnicodeBig"/>
62
+ <property name="socksNonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
63
+ <property name="ftp.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
64
+ <property name="sun.cpu.isalist" value=""/>
65
+ </properties>
66
+ <testcase time="0.025" classname="fizzbuzz.FizzBuzzTest" name="imprimeElMismoNumeroSiNoEs3">
67
+ <failure message="expected:&lt;[5]&gt; but was:&lt;[4]&gt;" type="org.junit.ComparisonFailure">org.junit.ComparisonFailure: expected:&lt;[5]&gt; but was:&lt;[4]&gt;
68
+ at org.junit.Assert.assertEquals(Assert.java:99)
69
+ at org.junit.Assert.assertEquals(Assert.java:117)
70
+ at fizzbuzz.FizzBuzzTest.imprimeElMismoNumeroSiNoEs3(FizzBuzzTest.java:24)
71
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
72
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
73
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
74
+ at java.lang.reflect.Method.invoke(Method.java:601)
75
+ at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
76
+ at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
77
+ at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
78
+ at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
79
+ at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
80
+ at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
81
+ at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
82
+ at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
83
+ at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
84
+ at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
85
+ at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
86
+ at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
87
+ at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
88
+ at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115)
89
+ at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
90
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
91
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
92
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
93
+ at java.lang.reflect.Method.invoke(Method.java:601)
94
+ at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
95
+ at $Proxy0.invoke(Unknown Source)
96
+ at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)
97
+ at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91)
98
+ at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
99
+ </failure>
100
+ <system-out>@HL
101
+ @HL-------------------------------------------------------
102
+ @HL T E S T S
103
+ @HL-------------------------------------------------------
104
+ @SLRunning fizzbuzz.FizzBuzzTest
105
+ </system-out>
106
+ </testcase>
107
+ <testcase time="0.001" classname="fizzbuzz.FizzBuzzTest" name="imprimeFizzSiEsMultiploDe3"/>
108
+ <testcase time="0.002" classname="fizzbuzz.FizzBuzzTest" name="imprimeBuzzSiNumero5"/>
109
+ <testcase time="0.002" classname="fizzbuzz.FizzBuzzTest" name="imprimeBuzzSiEsMultiplo5"/>
110
+ <testcase time="0.001" classname="fizzbuzz.FizzBuzzTest" name="imprimeFizzSiNumeroEs3"/>
111
+ </testsuite>