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