devcreek 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,3 +14,7 @@
14
14
  == 0.4 / 2008-01-02
15
15
 
16
16
  * DevCreek gem now compresses it's payload and uses basic authentication over https.
17
+
18
+ == 0.5 / 2008-01-17
19
+
20
+ * This release includes improvements to the precision of the timing metrics.
@@ -4,17 +4,24 @@ README.txt
4
4
  Rakefile
5
5
  lib/devcreek.rb
6
6
  lib/devcreek_core.rb
7
+ lib/devcreek_logger.rb
8
+ lib/devcreek_metriccollector.rb
7
9
  lib/devcreek_record_template.rb
8
10
  lib/devcreek_specreporter.rb
9
11
  lib/devcreek_testresult.rb
10
12
  lib/devcreek_testrunnermediator.rb
11
13
  lib/devcreek_testsuite.rb
12
14
  lib/devcreek_transmitter.rb
15
+ lib/time/conversions/timeconversions.rb
16
+ lib/time/time.rb
13
17
  test/load_devcreek.rb
14
18
  test/load_devcreek_for_specs.rb
15
19
  test/test_fiction_testunit.rb
16
- test/testfiction_spec.rb
17
20
  test/testcore_spec.rb
21
+ test/testfiction_spec.rb
18
22
  test/testresult_spec.rb
23
+ test/testrspecadapter_spec.rb
19
24
  test/testsuite_spec.rb
25
+ test/testtestunitadapter_spec.rb
26
+ test/testtimeconversions_spec.rb
20
27
  test/testtransmitter_spec.rb
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ Hoe.new('devcreek', DevCreek::VERSION) do |p|
14
14
  p.url = 'http://rubyforge.org/projects/devcreek/'
15
15
  p.summary = 'The DevCreek gem enables programmers to collect and transmit metrics from their Ruby test framework to a DevCreek server.'
16
16
  p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
17
- p.changes = p.paragraphs_of('History.txt', 0..10).join("\n\n")
17
+ p.changes = p.paragraphs_of('History.txt', 0..20).join("\n\n")
18
18
  p.extra_deps << ["uuidtools", ">= 1.0.1"]
19
19
  end
20
20
 
@@ -5,15 +5,13 @@
5
5
  # Licensed under the LGPL, see the file README.txt in the distribution
6
6
 
7
7
  require 'logger'
8
+ require 'time/time.rb'
8
9
  require 'devcreek_testrunnermediator.rb' #for test/unit library
9
10
  begin
10
11
  require 'devcreek_specreporter.rb' #for rspec library
11
12
  rescue Gem::LoadError
12
13
  end
13
14
 
14
- $DEV_CREEK_LOG = Logger.new($stderr)
15
- $DEV_CREEK_LOG.level = Logger::INFO
16
-
17
15
  module DevCreek
18
- VERSION = "0.4"
16
+ VERSION = "0.5"
19
17
  end
@@ -0,0 +1,17 @@
1
+ # devcreek_logger.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ require 'logger'
8
+
9
+ module DevCreek
10
+ module Log
11
+ DEV_CREEK_LOG = Logger.new($stderr)
12
+ DEV_CREEK_LOG.level = Logger::INFO
13
+ def logger
14
+ return DEV_CREEK_LOG
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,100 @@
1
+ # devcreek_metriccollector.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ require 'devcreek_testresult'
8
+ require 'devcreek_testsuite'
9
+ require 'devcreek_transmitter'
10
+ require 'devcreek_core'
11
+ require 'devcreek_logger'
12
+ require 'rubygems'
13
+ require 'uuidtools'
14
+ require 'singleton'
15
+
16
+ module DevCreek
17
+ class MetricCollector
18
+ include DevCreek::Log
19
+ def start(framework)
20
+ logger.debug "Started collecting metrics from #{framework} framework"
21
+ @framework = framework
22
+ @dev_creek_test_suite = DevCreek::TestSuite.new(framework)
23
+ end
24
+
25
+ def test_started(test_id, test_name, test_class)
26
+ logger.debug "#{@framework} test_started: #{test_id}"
27
+ @dev_creek_test_suite.test_results[test_id] = DevCreek::TestResult.new(test_name, test_class)
28
+ end
29
+
30
+ def test_finished(test_id)
31
+ logger.debug "#{@framework} test_finished: #{test_id}"
32
+ @dev_creek_test_suite.test_results[test_id].has_finished
33
+ end
34
+
35
+ def test_failed(test_id, due_to_a_failure)
36
+ logger.debug "#{@framework} test_failed: #{test_id}"
37
+
38
+ if due_to_a_failure
39
+ @dev_creek_test_suite.test_results[test_id].has_a_failure
40
+ else
41
+ @dev_creek_test_suite.test_results[test_id].has_an_error
42
+ end
43
+ end
44
+
45
+ def end
46
+ @dev_creek_test_suite.has_finished
47
+ if @dev_creek_test_suite.has_test_results?
48
+ payload = @dev_creek_test_suite.to_xml(UUID.timestamp_create().to_s)
49
+ logger.debug "Submitting body: \n #{payload}"
50
+
51
+ if DevCreek::Core.instance().enabled != false
52
+ logger.info "Attempting DevCreek transmission..."
53
+ response = DevCreek::Transmitter.submit(payload)
54
+ case response
55
+ when Net::HTTPSuccess
56
+ logger.info "...transmission successful."
57
+ else
58
+ logger.error "...failure transmiting #{@dev_creek_test_suite.framework} results to DevCreek - HTTPResponse with Code # #{response.code}, HTTPResponse message \"#{response.message}\""
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ class TestUnitAdapter < MetricCollector
66
+ include Singleton
67
+
68
+ @@dev_creek_reg = /([\w]*)\(([\w]*)\)/
69
+
70
+ def start
71
+ super "Test::Unit"
72
+ end
73
+
74
+ def test_started(name)
75
+ super(name, name.match(@@dev_creek_reg)[1], name.match(@@dev_creek_reg)[2])
76
+ end
77
+
78
+ end
79
+
80
+ class RSpecAdapter < MetricCollector
81
+ include Singleton
82
+
83
+ def start
84
+ super "RSpec"
85
+ end
86
+
87
+ def example_started(example, behaviour)
88
+ test_started("#{behaviour}_#{example}", example, behaviour)
89
+ end
90
+
91
+ def example_finished(example, behaviour)
92
+ test_finished("#{behaviour}_#{example}")
93
+ end
94
+
95
+ def example_failed(example, behaviour, due_to_a_failure)
96
+ test_failed("#{behaviour}_#{example}", due_to_a_failure)
97
+ end
98
+
99
+ end
100
+ end
@@ -11,7 +11,7 @@ module DevCreek
11
11
  <core.principal><%= DevCreek::Core.instance.principal %></core.principal>
12
12
  <core.project><%= DevCreek::Core.instance.project %></core.project>
13
13
  <core.sessionId><%= session_id %></core.sessionId>
14
- <core.timeStamp><%= start.localtime.to_i * 1000 %></core.timeStamp>
14
+ <core.timeStamp><%= start.localtime.to_millis %></core.timeStamp>
15
15
  <core.timeZoneOffset><%= start.localtime.gmt_offset * 1000 %></core.timeZoneOffset>
16
16
  <core.type>unittest.TestRunStarted</core.type>
17
17
  <unittest.testCount><%= run_count %></unittest.testCount>
@@ -24,7 +24,7 @@ module DevCreek
24
24
  <core.principal><%= DevCreek::Core.instance.principal %></core.principal>
25
25
  <core.project><%= DevCreek::Core.instance.project %></core.project>
26
26
  <core.sessionId><%= session_id %></core.sessionId>
27
- <core.timeStamp><%= test_result.start.localtime.to_i * 1000 %></core.timeStamp>
27
+ <core.timeStamp><%= test_result.start.localtime.to_millis %></core.timeStamp>
28
28
  <core.timeZoneOffset><%= test_result.start.localtime.gmt_offset * 1000 %></core.timeZoneOffset>
29
29
  <core.type>unittest.TestStarted</core.type>
30
30
  <unittest.testClass><%= test_result.test_class %></unittest.testClass>
@@ -37,7 +37,7 @@ module DevCreek
37
37
  <core.principal><%= DevCreek::Core.instance.principal %></core.principal>
38
38
  <core.project><%= DevCreek::Core.instance.project %></core.project>
39
39
  <core.sessionId><%= session_id %></core.sessionId>
40
- <core.timeStamp><%= test_result.finish.localtime.to_i * 1000 %></core.timeStamp>
40
+ <core.timeStamp><%= test_result.finish.localtime.to_millis %></core.timeStamp>
41
41
  <core.timeZoneOffset><%= test_result.finish.localtime.gmt_offset * 1000 %></core.timeZoneOffset>
42
42
  <core.type>unittest.TestEnded</core.type>
43
43
  <unittest.testClass><%= test_result.test_class %></unittest.testClass>
@@ -53,7 +53,7 @@ module DevCreek
53
53
  <core.principal><%= DevCreek::Core.instance.principal %></core.principal>
54
54
  <core.project><%= DevCreek::Core.instance.project %></core.project>
55
55
  <core.sessionId><%= session_id %></core.sessionId>
56
- <core.timeStamp><%= finish.localtime.to_i * 1000 %></core.timeStamp>
56
+ <core.timeStamp><%= finish.localtime.to_millis %></core.timeStamp>
57
57
  <core.timeZoneOffset><%= finish.localtime.gmt_offset * 1000 %></core.timeZoneOffset>
58
58
  <core.type>unittest.TestRunEnded</core.type>
59
59
  <unittest.errorTotal><%= error_count %></unittest.errorTotal>
@@ -4,12 +4,7 @@
4
4
  #
5
5
  # Licensed under the LGPL, see the file README.txt in the distribution
6
6
 
7
- require 'devcreek_testresult'
8
- require 'devcreek_testsuite'
9
- require 'devcreek_transmitter'
10
- require 'devcreek_core'
11
- require 'rubygems'
12
- require 'uuidtools'
7
+ require 'devcreek_metriccollector'
13
8
  require 'spec/runner/reporter'
14
9
 
15
10
  class Spec::Runner::Reporter
@@ -18,75 +13,34 @@ class Spec::Runner::Reporter
18
13
  alias_method :old_example_finished, :example_finished
19
14
  alias_method :old_example_failed, :example_failed
20
15
  alias_method :old_end, :end
21
-
16
+
22
17
  def start(*args)
23
18
  result = old_start(*args)
24
-
25
- $DEV_CREEK_LOG.debug "rspec started"
26
- @dev_creek_test_suite = DevCreek::TestSuite.new("RSpec")
27
-
19
+ DevCreek::RSpecAdapter.instance().start
28
20
  return result
29
21
  end
30
22
 
31
23
  def example_started(*args)
32
24
  result = old_example_started(*args)
33
-
34
- behaviour = @example_groups.last.description
35
- example = args[0].description
36
- $DEV_CREEK_LOG.debug "Spec::Runner.example_started: #{behaviour}_#{example}"
37
- @dev_creek_test_suite.test_results["#{behaviour}_#{example}"] = DevCreek::TestResult.new(example, behaviour)
38
-
25
+ DevCreek::RSpecAdapter.instance().example_started(args[0].description, @example_groups.last.description)
39
26
  return result
40
27
  end
41
28
 
42
29
  def example_finished(*args)
43
30
  result = old_example_finished(*args)
44
-
45
- behaviour = @example_groups.last.description
46
- example = args[0].description
47
- $DEV_CREEK_LOG.debug "Spec::Runner.example_finished: #{behaviour}_#{example}"
48
- @dev_creek_test_suite.test_results["#{behaviour}_#{example}"].has_finished
49
-
31
+ DevCreek::RSpecAdapter.instance().example_finished(args[0].description, @example_groups.last.description)
50
32
  return result
51
33
  end
52
34
 
53
35
  def example_failed(*args)
54
36
  result = old_example_failed(*args)
55
-
56
- behaviour = @example_groups.last.description
57
- example = args[0].description
58
- $DEV_CREEK_LOG.debug "Spec::Runner.example_failed: #{behaviour}_#{example}"
59
-
60
- dc_test_result = @dev_creek_test_suite.test_results["#{behaviour}_#{example}"]
61
- if @failures.last.expectation_not_met?
62
- dc_test_result.has_a_failure
63
- else
64
- dc_test_result.has_an_error
65
- end
66
-
37
+ DevCreek::RSpecAdapter.instance().example_failed(args[0].description, @example_groups.last.description, @failures.last.expectation_not_met?)
67
38
  return result
68
39
  end
69
40
 
70
41
  def end(*args)
71
42
  result = old_end(*args)
72
- @dev_creek_test_suite.has_finished
73
- if @dev_creek_test_suite.has_test_results?
74
- session_id = UUID.timestamp_create().to_s
75
- xml_data = @dev_creek_test_suite.to_xml(session_id)
76
- $DEV_CREEK_LOG.debug "Submitting body: \n #{xml_data}"
77
-
78
- if DevCreek::Core.instance().enabled != false
79
- $DEV_CREEK_LOG.info "Attempting DevCreek transmission..."
80
- response = DevCreek::Transmitter.submit(session_id, xml_data)
81
- case response
82
- when Net::HTTPSuccess
83
- $DEV_CREEK_LOG.info "...transmission successful."
84
- else
85
- $DEV_CREEK_LOG.error "...failure transmiting TestUnit results to DevCreek - HTTPResponse with Code # #{response.code}, HTTPResponse message \"#{response.message}\""
86
- end
87
- end
88
- end
89
-
43
+ DevCreek::RSpecAdapter.instance().end
90
44
  return result
91
45
  end
92
46
 
@@ -4,13 +4,8 @@
4
4
  #
5
5
  # Licensed under the LGPL, see the file README.txt in the distribution
6
6
 
7
- require 'devcreek_testresult'
8
- require 'devcreek_testsuite'
9
- require 'devcreek_transmitter'
10
- require 'devcreek_core'
11
- require 'rubygems'
12
- require 'uuidtools'
13
7
  require 'test/unit/ui/testrunnermediator'
8
+ require 'devcreek_metriccollector'
14
9
 
15
10
  class Test::Unit::UI::TestRunnerMediator
16
11
  alias_method :old_initialize, :initialize
@@ -18,54 +13,24 @@ class Test::Unit::UI::TestRunnerMediator
18
13
  def initialize(*args)
19
14
  result = old_initialize(*args)
20
15
 
21
- #DevCreek Modifications
22
- @@dev_creek_test_suite = nil
23
- @@dev_creek_reg = /([\w]*)\(([\w]*)\)/
24
-
25
16
  add_listener(Test::Unit::UI::TestRunnerMediator::STARTED) do |test_result|
26
- $DEV_CREEK_LOG.debug "Test::Unit::TestRunnerMediator::STARTED: #{test_result}"
27
- @@dev_creek_test_suite = DevCreek::TestSuite.new("Test::Unit")
17
+ DevCreek::TestUnitAdapter.instance().start
28
18
  end
29
19
 
30
20
  add_listener(Test::Unit::TestCase::STARTED) do |name|
31
- $DEV_CREEK_LOG.debug "Test::Unit::TestCase::STARTED: #{name}"
32
- test_name = name.match(@@dev_creek_reg)[1]
33
- test_class = name.match(@@dev_creek_reg)[2]
34
- @@dev_creek_test_suite.test_results[name] = DevCreek::TestResult.new(test_name, test_class)
21
+ DevCreek::TestUnitAdapter.instance().test_started(name)
35
22
  end
36
23
 
37
24
  add_listener(Test::Unit::TestResult::FAULT) do |fault|
38
- $DEV_CREEK_LOG.debug "Test::Unit::TestResult::FAULT: #{fault}"
39
- dc_test_result = @@dev_creek_test_suite.test_results[fault.test_name]
40
- if fault.instance_of? Test::Unit::Failure
41
- dc_test_result.has_a_failure
42
- else
43
- dc_test_result.has_an_error
44
- end
25
+ DevCreek::TestUnitAdapter.instance().test_failed(fault.test_name, (fault.instance_of? Test::Unit::Failure))
45
26
  end
46
27
 
47
- add_listener(Test::Unit::TestCase::FINISHED) do |test_name|
48
- $DEV_CREEK_LOG.debug "Test::Unit::TestCase::FINISHED: #{test_name}"
49
- @@dev_creek_test_suite.test_results[test_name].has_finished
28
+ add_listener(Test::Unit::TestCase::FINISHED) do |name|
29
+ DevCreek::TestUnitAdapter.instance().test_finished(name)
50
30
  end
51
31
 
52
32
  add_listener(Test::Unit::UI::TestRunnerMediator::FINISHED) do |elapsed_time|
53
- @@dev_creek_test_suite.has_finished
54
- if @@dev_creek_test_suite.has_test_results?
55
- session_id = UUID.timestamp_create().to_s
56
- xml_data = @@dev_creek_test_suite.to_xml(session_id)
57
- $DEV_CREEK_LOG.debug "Submitting body: \n #{xml_data}"
58
- if DevCreek::Core.instance().enabled != false
59
- $DEV_CREEK_LOG.info "Attempting DevCreek transmission..."
60
- response = DevCreek::Transmitter.submit(session_id, xml_data)
61
- case response
62
- when Net::HTTPSuccess
63
- $DEV_CREEK_LOG.info "...transmission successful."
64
- else
65
- $DEV_CREEK_LOG.error "...failure transmiting TestUnit results to DevCreek - HTTPResponse with Code # #{response.code}, HTTPResponse message \"#{response.message}\""
66
- end
67
- end
68
- end
33
+ DevCreek::TestUnitAdapter.instance().end
69
34
  end
70
35
 
71
36
  return result
@@ -13,9 +13,9 @@ module DevCreek
13
13
 
14
14
  SUBMIT_URL = "https://devcreek.com/submitData2/"
15
15
 
16
- def Transmitter.submit(session_id, xml_data)
16
+ def Transmitter.submit(the_payload)
17
17
 
18
- raise Exception.new("Invalid argument: session_id and xml_data cannot be nil") if session_id.nil? or xml_data.nil?
18
+ raise Exception.new("Invalid argument: payload cannot be nil") if the_payload.nil?
19
19
  raise Exception.new("Core data not initialized") if DevCreek::Core.instance().project.nil? or
20
20
  DevCreek::Core.instance().user.nil? or
21
21
  DevCreek::Core.instance().password.nil?
@@ -23,16 +23,17 @@ module DevCreek
23
23
  url = URI.parse("#{SUBMIT_URL}#{DevCreek::Core.instance().project}")
24
24
  response = nil
25
25
  Net::HTTP.start(url.host) do |http|
26
- res = http.head(url.request_uri)
26
+ http.head(url.request_uri)
27
27
  req = Net::HTTP::Post.new(url.path)
28
28
 
29
29
  #gzip the request_data
30
30
  strio = StringIO.new('', 'w')
31
31
  gz = Zlib::GzipWriter.new(strio)
32
- gz.write xml_data
32
+ gz.write the_payload
33
33
  gz.close
34
34
  req.body= strio.string
35
35
  req.add_field('Content-Encoding', 'gzip')
36
+ req.add_field('Content-Type', 'application/xml')
36
37
  req.basic_auth(DevCreek::Core.instance().user, DevCreek::Core.instance().password)
37
38
  response = http.request(req)
38
39
  end
@@ -0,0 +1,13 @@
1
+ # timeconversions.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ module DevCreek
8
+ module TimeConversions
9
+ def to_millis
10
+ return (self.to_i * 1000) + self.usec
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # devcreek_time.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+ require 'time'
7
+ require File.dirname(__FILE__) + '/conversions/timeconversions.rb'
8
+
9
+ class Time#:nodoc:
10
+ include DevCreek::TimeConversions
11
+ end
@@ -1,6 +1,6 @@
1
1
  puts "Loading DevCreek.rb"
2
2
  require 'fileutils'
3
3
  $LOAD_PATH.push(FileUtils::pwd + '/lib')
4
- require 'devcreek'
4
+ require 'devcreek_core.rb'
5
5
  DevCreek::Core.instance().load(
6
6
  :enabled => false)
@@ -6,7 +6,7 @@
6
6
 
7
7
  require 'fileutils'
8
8
  $LOAD_PATH.push(FileUtils::pwd + '/lib')
9
- require 'devcreek'
9
+ require 'devcreek_core.rb'
10
10
  require 'socket'
11
11
 
12
12
  describe DevCreek::Core do
@@ -5,7 +5,7 @@
5
5
  # Licensed under the LGPL, see the file README.txt in the distribution
6
6
 
7
7
  $LOAD_PATH.push(FileUtils::pwd + '/lib')
8
- require 'devcreek'
8
+ require 'devcreek_testresult.rb'
9
9
 
10
10
  describe DevCreek::TestResult do
11
11
 
@@ -0,0 +1,76 @@
1
+ # testsuite_spec.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ $LOAD_PATH.push(FileUtils::pwd + '/lib')
8
+ require 'devcreek_metriccollector'
9
+ require 'rexml/document'
10
+
11
+ describe DevCreek::RSpecAdapter do
12
+
13
+ before :each do
14
+ @adapter = DevCreek::RSpecAdapter.instance
15
+ @adapter.start
16
+ def @adapter.test_suite
17
+ return self.instance_variable_get(:@dev_creek_test_suite)
18
+ end
19
+ end
20
+
21
+ after :each do
22
+ @adapter = nil
23
+ end
24
+
25
+ it "should be initialized with a test_suite when start is invoked" do
26
+ @adapter.test_suite.should_not be_nil
27
+ @adapter.test_suite.should be_an_instance_of(DevCreek::TestSuite)
28
+ @adapter.test_suite.framework.should eql('RSpec')
29
+ end
30
+
31
+ it "should record the correct info when an example is started" do
32
+ example = 'an example'
33
+ behaviour = 'a behaviour'
34
+ @adapter.example_started example, behaviour
35
+ @adapter.test_suite.test_results.size.should eql(1)
36
+ @adapter.test_suite.test_results.values[0].should be_an_instance_of(DevCreek::TestResult)
37
+ @adapter.test_suite.test_results.values[0].test_name.should eql(example)
38
+ @adapter.test_suite.test_results.values[0].test_class.should eql(behaviour)
39
+ end
40
+
41
+ it "should record the correct info when an example is finished" do
42
+ example = 'an example'
43
+ behaviour = 'a behaviour'
44
+ @adapter.example_started 'othe_example', behaviour
45
+ @adapter.example_started example, behaviour
46
+ @adapter.test_suite.test_results.values[0].finish.should be_nil
47
+ @adapter.test_suite.test_results.values[1].finish.should be_nil
48
+ @adapter.example_finished example, behaviour
49
+ @adapter.test_suite.test_results.values[0].finish.should be_nil
50
+ @adapter.test_suite.test_results.values[1].finish.should_not be_nil
51
+ end
52
+
53
+ it "should record the correct info when an example fails" do
54
+ example = 'an example'
55
+ behaviour = 'a behaviour'
56
+
57
+ @adapter.example_started example, behaviour
58
+ @adapter.example_finished example, behaviour
59
+
60
+ due_to_a_failure = true
61
+ @adapter.example_failed example, behaviour, due_to_a_failure
62
+ @adapter.test_suite.test_results.values[0].status.should eql(DevCreek::TestResult::FAILURE)
63
+
64
+ due_to_an_error = false
65
+ @adapter.example_failed example, behaviour, due_to_an_error
66
+ @adapter.test_suite.test_results.values[0].status.should eql(DevCreek::TestResult::ERROR)
67
+ end
68
+
69
+ it "should record the fact that is has finished when end is invoked" do
70
+ @adapter.test_suite.finish.should be_nil
71
+ @adapter.end
72
+ @adapter.test_suite.finish.should_not be_nil
73
+ end
74
+
75
+
76
+ end
@@ -5,7 +5,7 @@
5
5
  # Licensed under the LGPL, see the file README.txt in the distribution
6
6
 
7
7
  $LOAD_PATH.push(FileUtils::pwd + '/lib')
8
- require 'devcreek'
8
+ require 'devcreek_testsuite.rb'
9
9
  require 'rexml/document'
10
10
 
11
11
  describe DevCreek::TestSuite do
@@ -94,7 +94,7 @@ describe DevCreek::TestSuite do
94
94
  doc.get_elements('//core.principal').each {|tag| tag.text.should eql("Skinnard") }
95
95
  doc.get_elements('//core.project').each {|tag| tag.text.should eql("Foo") }
96
96
  doc.get_elements('//core.sessionId').each {|tag| tag.text.should eql("unique") }
97
- doc.get_elements('//core.timeStamp')[0].text.to_i.should eql(@suite.start.localtime.to_i * 1000)
97
+ doc.get_elements('//core.timeStamp')[0].text.to_i.should eql(@suite.start.to_millis)
98
98
 
99
99
 
100
100
  doc.get_elements('//unittest.testCount')[0].text.should eql("1")
@@ -0,0 +1,80 @@
1
+ # testsuite_spec.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ $LOAD_PATH.push(FileUtils::pwd + '/lib')
8
+ require 'devcreek_metriccollector.rb'
9
+ require 'rexml/document'
10
+
11
+ describe DevCreek::TestUnitAdapter do
12
+
13
+ before :each do
14
+ @adapter = DevCreek::TestUnitAdapter.instance
15
+ @adapter.start
16
+ def @adapter.test_suite
17
+ return self.instance_variable_get(:@dev_creek_test_suite)
18
+ end
19
+ end
20
+
21
+ after :each do
22
+ @adapter = nil
23
+ end
24
+
25
+ it "should be initialized with a test_suite when start is invoked" do
26
+ @adapter.test_suite.should_not be_nil
27
+ @adapter.test_suite.should be_an_instance_of(DevCreek::TestSuite)
28
+ @adapter.test_suite.framework.should eql('Test::Unit')
29
+ end
30
+
31
+ it "should record the correct info when a test is started" do
32
+ test_name = 'test_name'
33
+ test_class = 'test_class'
34
+ test = "#{test_name}(#{test_class})"
35
+ @adapter.test_started test
36
+ @adapter.test_suite.test_results.size.should eql(1)
37
+ @adapter.test_suite.test_results.values[0].should be_an_instance_of(DevCreek::TestResult)
38
+ @adapter.test_suite.test_results.values[0].test_name.should eql(test_name)
39
+ @adapter.test_suite.test_results.values[0].test_class.should eql(test_class)
40
+ end
41
+
42
+ it "should record the correct info when a test is finished" do
43
+ test_name = 'test_name'
44
+ test_class = 'test_class'
45
+ test = "#{test_name}(#{test_class})"
46
+ other_test = "otherTestName(#{test_class})"
47
+ @adapter.test_started other_test
48
+ @adapter.test_started test
49
+ @adapter.test_suite.test_results[test].finish.should be_nil
50
+ @adapter.test_suite.test_results[other_test].finish.should be_nil
51
+ @adapter.test_finished test
52
+ @adapter.test_suite.test_results[test].finish.should_not be_nil
53
+ @adapter.test_suite.test_results[other_test].finish.should be_nil
54
+ end
55
+
56
+ it "should record the correct info when an test fails" do
57
+ test_name = 'test_name'
58
+ test_class = 'test_class'
59
+ test = "#{test_name}(#{test_class})"
60
+
61
+ @adapter.test_started test
62
+ @adapter.test_finished test
63
+
64
+ due_to_a_failure = true
65
+ @adapter.test_failed test, due_to_a_failure
66
+ @adapter.test_suite.test_results.values[0].status.should eql(DevCreek::TestResult::FAILURE)
67
+
68
+ due_to_an_error = false
69
+ @adapter.test_failed test, due_to_an_error
70
+ @adapter.test_suite.test_results.values[0].status.should eql(DevCreek::TestResult::ERROR)
71
+ end
72
+
73
+ it "should record the fact that is has finished when end is invoked" do
74
+ @adapter.test_suite.finish.should be_nil
75
+ @adapter.end
76
+ @adapter.test_suite.finish.should_not be_nil
77
+ end
78
+
79
+
80
+ end
@@ -0,0 +1,31 @@
1
+ # testsuite_spec.rb
2
+ #
3
+ # Copyright Caleb Powell 2007
4
+ #
5
+ # Licensed under the LGPL, see the file README.txt in the distribution
6
+
7
+ require 'fileutils'
8
+ $LOAD_PATH.push(FileUtils::pwd + '/lib')
9
+
10
+ require 'time/time.rb'
11
+
12
+ describe "The to_millis method on the class", Time do
13
+
14
+ before :each do
15
+ @time = Time.new
16
+ end
17
+
18
+ it "should exist" do
19
+ @time.should respond_to(:to_millis)
20
+ end
21
+
22
+ it "should return an Integer value" do
23
+ @time.to_millis.should_not be_nil
24
+ @time.to_millis.should be_a_kind_of(Integer)
25
+ end
26
+
27
+ it "should return the correct number of milliseconds " do
28
+ @time.to_millis.should eql((@time.to_i * 1000) + @time.usec)
29
+ end
30
+
31
+ end
@@ -17,23 +17,21 @@ describe DevCreek::Transmitter do
17
17
  )
18
18
  end
19
19
 
20
- it "submit method should raise an error if either arguments are invalid" do
21
- lambda{DevCreek::Transmitter.submit(nil, nil)}.should raise_error(Exception, "Invalid argument: session_id and xml_data cannot be nil")
22
- lambda{DevCreek::Transmitter.submit('a_session_id', nil)}.should raise_error(Exception, "Invalid argument: session_id and xml_data cannot be nil")
23
- lambda{DevCreek::Transmitter.submit(nil, '<somexml/>')}.should raise_error(Exception, "Invalid argument: session_id and xml_data cannot be nil")
20
+ it "submit method should raise an error if the payload is nil" do
21
+ lambda{DevCreek::Transmitter.submit(nil)}.should raise_error(Exception, "Invalid argument: payload cannot be nil")
24
22
  end
25
23
 
26
24
  it "submit method should raise an error if the Core data has not been initialized" do
27
- lambda{DevCreek::Transmitter.submit('a_session_id', '<somexml/>')}.should raise_error(Exception, "Core data not initialized")
25
+ lambda{DevCreek::Transmitter.submit('<somexml/>')}.should raise_error(Exception, "Core data not initialized")
28
26
 
29
27
  DevCreek::Core.instance().project= 'FooProject'
30
- lambda{DevCreek::Transmitter.submit('a_session_id', '<somexml/>')}.should raise_error(Exception, "Core data not initialized")
28
+ lambda{DevCreek::Transmitter.submit('<somexml/>')}.should raise_error(Exception, "Core data not initialized")
31
29
 
32
30
  DevCreek::Core.instance().user= 'Fred Flintstone'
33
- lambda{DevCreek::Transmitter.submit('a_session_id', '<somexml/>')}.should raise_error(Exception, "Core data not initialized")
31
+ lambda{DevCreek::Transmitter.submit('<somexml/>')}.should raise_error(Exception, "Core data not initialized")
34
32
 
35
33
  DevCreek::Core.instance().password= 'Foobar'
36
- lambda{DevCreek::Transmitter.submit('a_session_id', '<somexml/>')}.should_not raise_error(Exception, "Core data not initialized")
34
+ lambda{DevCreek::Transmitter.submit('<somexml/>')}.should_not raise_error(Exception, "Core data not initialized")
37
35
  end
38
36
 
39
37
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: devcreek
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.4"
7
- date: 2008-01-02 00:00:00 -05:00
6
+ version: "0.5"
7
+ date: 2008-01-20 00:00:00 -05:00
8
8
  summary: The DevCreek gem enables programmers to collect and transmit metrics from their Ruby test framework to a DevCreek server.
9
9
  require_paths:
10
10
  - lib
@@ -35,19 +35,26 @@ files:
35
35
  - Rakefile
36
36
  - lib/devcreek.rb
37
37
  - lib/devcreek_core.rb
38
+ - lib/devcreek_logger.rb
39
+ - lib/devcreek_metriccollector.rb
38
40
  - lib/devcreek_record_template.rb
39
41
  - lib/devcreek_specreporter.rb
40
42
  - lib/devcreek_testresult.rb
41
43
  - lib/devcreek_testrunnermediator.rb
42
44
  - lib/devcreek_testsuite.rb
43
45
  - lib/devcreek_transmitter.rb
46
+ - lib/time/conversions/timeconversions.rb
47
+ - lib/time/time.rb
44
48
  - test/load_devcreek.rb
45
49
  - test/load_devcreek_for_specs.rb
46
50
  - test/test_fiction_testunit.rb
47
- - test/testfiction_spec.rb
48
51
  - test/testcore_spec.rb
52
+ - test/testfiction_spec.rb
49
53
  - test/testresult_spec.rb
54
+ - test/testrspecadapter_spec.rb
50
55
  - test/testsuite_spec.rb
56
+ - test/testtestunitadapter_spec.rb
57
+ - test/testtimeconversions_spec.rb
51
58
  - test/testtransmitter_spec.rb
52
59
  test_files:
53
60
  - test/test_fiction_testunit.rb