teresa 0.1.0

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