Hi there! This is something I've been looking for for a while, but
unfortunately i can't seem to get your code working. I had to replace
YNOT::YNOTE::TestUnitFailure with Test::Unit::Failure because it was
not recognizing your code, and it's added the "passed' attribute
correctly, but it is always set to 1, even if the suite fails. Also, I
still get multiple xml files created. Could you give me an example of
how you call it that only results in one file? Thanks!

-Dylan

On Jul 15, 11:50 pm, Tony <ynot...@gmail.com> wrote:
> Hi Marlon,
>
> Have modified the ci_reporter to include passed/failed/error in
> ci_reporter.
> Also have modified the code to create one xml file instead of multiple
> files when you try to run  testcases present in different classes.
>
> Modify the TestSuite and TestCase present in Ci_reporter --
> (ci_reporter\lib\ci\reporter\test_suite.rb)
> # Basic structure representing the running of a test suite.  Used to
> time tests and store results.
>     class TestSuite < Struct.new
> (:name, :tests, :time, :failures, :errors, :assertions, :passed)
>       attr_accessor :testcases
>       attr_accessor :stdout, :stderr
>       def initialize(name)
>         super(name.to_s) # RSpec passes a "description" object instead
> of a string
>         @testcases = []
>       end
>
>       # Starts timing the test suite.
>       def start
>         @start = Time.now
>         unless ENV['CI_CAPTURE'] == "off"
>           @capture_out = OutputCapture.new($stdout) {|io| $stdout =
> io }
>           @capture_err = OutputCapture.new($stderr) {|io| $stderr =
> io }
>         end
>       end
>
>       # Finishes timing the test suite.
>       def finish
>         self.tests = testcases.size
>         self.time = Time.now - @start
>         #self.failures = testcases.inject(0) {|sum,tc| sum +=
> tc.failures.select{|f| f.failure? }.size }
>         self.failures = 0
>         testcases.each { |tc|
>           self.failures += 1 if tc.failure?
>         }
>         self.errors = testcases.inject(0) {|sum,tc| sum +=
> tc.failures.select{|f| f.error? }.size }
>         ####
>         self.passed =0
>         testcases.each { |tc|
>           self.passed += 1 if !(tc.failure? || tc.error?)
>         }
>         #puts "PASSED WAS - #{self.passed}"
>         ####
>         self.stdout = @capture_out.finish if @capture_out
>         self.stderr = @capture_err.finish if @capture_err
>       end
>
>       # Creates the xml builder instance used to create the report xml
> document.
>       def create_builder
>         require 'rubygems'
>         gem 'builder'
>         require 'builder'
>         # :escape_attrs is obsolete in a newer version, but should do
> no harm
>         Builder::XmlMarkup.new(:indent => 2, :escape_attrs => true)
>       end
>
>       # Creates an xml string containing the test suite results.
>       def to_xml
>         builder = create_builder
>         # more recent version of Builder doesn't need the escaping
>         def builder.trunc!(txt)
>           txt.sub(/\n.*/m, '...')
>         end
>         #builder.instruct!
>         attrs = {}
>         each_pair {|k,v| attrs[k] = builder.trunc!(v.to_s) unless
> v.nil? || v.to_s.empty? }
>         builder.testsuite(attrs) do
>           @testcases.each do |tc|
>             tc.to_xml(builder)
>           end
>           builder.tag! "system-out" do
>             builder.cdata! self.stdout
>           end
>           builder.tag! "system-err" do
>             builder.cdata! self.stderr
>           end
>         end
>       end
>
>     end
>
> class TestCase < Struct.new(:name, :time, :assertions)
>       attr_accessor :failures
>
>       def initialize(*args)
>         super
>         @failures = []
>       end
>
>       # Starts timing the test.
>       def start
>         @start = Time.now
>       end
>
>       # Finishes timing the test.
>       def finish
>         #self.time = Time.now - @start
>         self.time = (Time.now - @start).to_i # roundoff the time to an
> integer
>       end
>
>       # Returns non-nil if the test failed.
>       def failure?
>         !failures.empty? && failures.detect {|f| f.failure? }
>       end
>
>       # Returns non-nil if the test had an error.
>       def error?
>         !failures.empty? && failures.detect {|f| f.error? }
>       end
>
>       # Writes xml representing the test result to the provided
> builder.
>       def to_xml(builder)
>         attrs = {}
>         each_pair {|k,v| attrs[k] = builder.trunc!(v.to_s) unless
> v.nil? || v.to_s.empty?}
>         builder.testcase(attrs) do
>           failures.each do |failure|
>
>             # - This is where the type of failure is checked .. error
> or failure
>             if failure.kind_of?(YNOT::YNOTE::TestUnitFailure)
>               builder.failure(:type => builder.trunc!
> (failure.name), :message => builder.trunc!(failure.message)) do
>                 builder.text!(failure.message + " (#{failure.name})
> \n")
>                 builder.text!(failure.location)
>               end
>             else
>
>               builder.error(:type => builder.trunc!
> (failure.name), :message => builder.trunc!(failure.message)) do
>                 builder.text!(failure.message + " (#{failure.name})
> \n")
>                 builder.text!(failure.location)
>               end
>             end
>
>           end
>         end
>       end
>
>     end
>
> Hope this helps ...
>
> Thanks,
> Paul
>
> On Jul 15, 4:28 pm, Marlon <marlonmoja...@gmail.com> wrote:
>
> > Hi, anybody here knows how to customize xml report generated by
> > ci_reports addon. I would like to add more attributes. Example, I want
> > to add <testsuite result> PASS/FAIL </testsuite result>.
>
> > In addition to this I'm planning to create some kind of a dashboard in
> > html form where i can select/check the testcase I want to run.
>
> > thanks!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Watir General" group.
To post to this group, send email to watir-general@googlegroups.com
Before posting, please read the following guidelines: 
http://wiki.openqa.org/display/WTR/Support
To unsubscribe from this group, send email to 
watir-general-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/watir-general
-~----------~----~----~----~------~----~------~--~---

Reply via email to