any-spec 0.0.1 → 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 @@
1
+ *.gem
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{any-spec}
8
- s.version = "0.0.1"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aaron Gough"]
12
- s.date = %q{2010-10-09}
12
+ s.date = %q{2011-03-05}
13
13
  s.description = %q{AnySpec is a framework for writing executable language specifications and automated black-box functional tests for programming languages.}
14
14
  s.email = %q{aaron@aarongough.com}
15
15
  s.executables = ["any-spec", "any-spec"]
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  "README.rdoc"
19
19
  ]
20
20
  s.files = [
21
- "MIT-LICENSE",
21
+ ".gitignore",
22
+ "MIT-LICENSE",
22
23
  "README.rdoc",
23
24
  "Rakefile",
24
25
  "VERSION",
@@ -26,6 +27,7 @@ Gem::Specification.new do |s|
26
27
  "bin/any-spec",
27
28
  "lib/any-spec.rb",
28
29
  "lib/any-spec/assertions.rb",
30
+ "lib/any-spec/string_extensions.rb",
29
31
  "lib/any-spec/test-case.rb",
30
32
  "lib/any-spec/test-runner.rb",
31
33
  "test/fixtures/example_test_specification.yml",
@@ -6,29 +6,29 @@ module AnySpec
6
6
  end
7
7
 
8
8
  def flunk
9
- message = "Flunked."
9
+ message = "Flunked.".indent(3).red
10
10
  assert_block(message) { false }
11
11
  end
12
12
 
13
13
  def assert( expression )
14
- message = "#{expression.inspect} is not true"
14
+ message = "#{expression.inspect} is not true".indent(3).red
15
15
  assert_block(message) { expression == true }
16
16
  end
17
17
 
18
18
  def assert_output(expected, output = @test_case.test_output)
19
- message = "Expected output to be:\n<#{expected.inspect}> but was:\n<#{output.inspect}>"
19
+ message = "Expected output to be:\n<#{expected.inspect}> but was:\n<#{output.inspect}>".indent(3).red
20
20
  assert_block(message) { output == expected }
21
21
  end
22
22
 
23
23
  def assert_execution_success
24
- message = "Execution of test case failed when it was expected to succeed:\n"
25
- message += @test_case.test_output
24
+ message = "Execution of test case failed when it was expected to succeed:\n".indent(3).red
25
+ message += @test_case.test_output.prefix_each_line_with("# ").indent(4).grey
26
26
  assert_block(message) { @test_case.exit_status == 0 }
27
27
  end
28
28
 
29
29
  def assert_execution_failure
30
- message = "Execution of test case succeeded when it was expected to fail:\n"
31
- message += @test_case.test_output
30
+ message = " Execution of test case succeeded when it was expected to fail:\n"
31
+ message += @test_case.test_output.prefix_each_line_with("# ").indent(4).grey
32
32
  assert_block(message) { @test_case.exit_status != 0 }
33
33
  end
34
34
 
@@ -0,0 +1,42 @@
1
+ class String
2
+
3
+ def indent(level)
4
+ return self.lines.map {|line|
5
+ (" " * level) + line
6
+ }.join
7
+ end
8
+
9
+ def prefix_each_line_with(string)
10
+ return self.lines.map {|line|
11
+ string + line
12
+ }.join
13
+ end
14
+
15
+ def red
16
+ self.colorize(:red)
17
+ end
18
+
19
+ def green
20
+ self.colorize(:green)
21
+ end
22
+
23
+ def white
24
+ self.colorize(:white)
25
+ end
26
+
27
+ def grey
28
+ self.colorize(:grey)
29
+ end
30
+
31
+ def colorize(color)
32
+ reset_string = "\e[0m"
33
+ case color
34
+ when :white then color_string = "\e[37m"
35
+ when :red then color_string = "\e[31m"
36
+ when :green then color_string = "\e[32m"
37
+ when :grey then color_string = "\e[90m"
38
+ end
39
+ return color_string + self + reset_string
40
+ end
41
+
42
+ end
@@ -30,36 +30,42 @@ module AnySpec
30
30
  def run_tests(silence = false)
31
31
  @report = ""
32
32
  @silence = silence
33
- message "\nLoaded suite: #{@test_specification_file}\n"
34
- message "Targeting: #{@target_executable}\n"
35
33
  message "\nStarted\n"
36
34
  start_time = Time.now
37
35
  assertions = 0
38
36
  failed_tests = []
39
37
  @test_cases.each do |test_case|
40
38
  result = test_case.run
41
- message "." if(result)
42
- message "F" if(!result)
39
+ message ".", :green if(result)
40
+ message "F", :red if(!result)
43
41
  assertions += test_case.assertions
44
42
  failed_tests << test_case if(!result)
45
43
  end
46
- message "\nFinished in #{(Time.now - start_time).to_f} seconds.\n\n"
44
+ message "\n\n"
45
+ message "Failures:\n\n" unless failed_tests.empty?
47
46
  failed_tests.each_index do |x|
48
47
  test_case = failed_tests[x]
49
- message " #{x + 1}) Failure:\n"
50
- message "In file: " + test_case.path.gsub(File.split(@test_specification_file)[0], "") + "\n"
48
+ message " #{x + 1}) " + test_case.path.gsub(File.split(@test_specification_file)[0], "") + "\n"
51
49
  message test_case.message + "\n\n"
52
50
  end
53
- pass_rate = format("%.2f",((failed_tests.length.to_f) / @test_cases.length) * 100)
54
- message "#{@test_cases.length} tests, #{assertions} assertions, #{failed_tests.count} failures, #{pass_rate}% pass rate\n\n"
51
+ message "\n\nFinished in #{(Time.now - start_time).to_f} seconds.\n"
52
+ pass_rate = format("%.2f",(100.0 - ((failed_tests.length.to_f) / @test_cases.length) * 100))
53
+ result_color = failed_tests.count == 0 ? :green : :red
54
+ message "#{@test_cases.length} tests, #{assertions} assertions, #{failed_tests.count} failures, #{pass_rate}% pass rate\n", result_color
55
55
  return @test_cases
56
56
  end
57
57
 
58
- def message(string)
58
+ def message(string, color = :white)
59
59
  if(@silence)
60
60
  @report << string
61
61
  else
62
- print string
62
+ case color
63
+ when :white then print( "\e[37m" )
64
+ when :red then print( "\e[31m" )
65
+ when :green then print( "\e[32m" )
66
+ when :grey then print( "\e[90m")
67
+ end
68
+ print string + "\e[0m"
63
69
  $stdout.flush
64
70
  end
65
71
  end
@@ -33,7 +33,7 @@ class AssertionsTest < Test::Unit::TestCase
33
33
  test "flunk should flunk" do
34
34
  AnySpec::Assertions.new(@test_case).flunk
35
35
  assert_equal false, @test_case.last_assertion_result
36
- assert_equal "Flunked.", @test_case.message
36
+ assert @test_case.message.include? "Flunked."
37
37
  end
38
38
 
39
39
  test "assert should assert truthiness" do
@@ -45,13 +45,13 @@ class AssertionsTest < Test::Unit::TestCase
45
45
  test "assert should fail on false" do
46
46
  AnySpec::Assertions.new(@test_case).assert(false)
47
47
  assert_equal false, @test_case.last_assertion_result
48
- assert_equal "false is not true", @test_case.message
48
+ assert @test_case.message.include? "false is not true"
49
49
  end
50
50
 
51
51
  test "assert should fail on nil" do
52
52
  AnySpec::Assertions.new(@test_case).assert(nil)
53
53
  assert_equal false, @test_case.last_assertion_result
54
- assert_equal "nil is not true", @test_case.message
54
+ assert @test_case.message.include? "nil is not true"
55
55
  end
56
56
 
57
57
  test "assert_output should pass when output matches" do
@@ -65,7 +65,10 @@ class AssertionsTest < Test::Unit::TestCase
65
65
  @test_case.test_output = "test2"
66
66
  AnySpec::Assertions.new(@test_case).assert_output("test")
67
67
  assert_equal false, @test_case.last_assertion_result
68
- assert_equal "Expected output to be:\n<\"test\"> but was:\n<\"test2\">", @test_case.message
68
+ assert @test_case.message.include? "Expected output to be:"
69
+ assert @test_case.message.include? '<"test">'
70
+ assert @test_case.message.include? 'but was:'
71
+ assert @test_case.message.include? '<"test2">'
69
72
  end
70
73
 
71
74
  test "assert_execution_success should pass when exit_status == 0" do
@@ -81,7 +84,8 @@ class AssertionsTest < Test::Unit::TestCase
81
84
  @test_case.exit_status = 1
82
85
  AnySpec::Assertions.new(@test_case).assert_execution_success
83
86
  assert_equal false, @test_case.last_assertion_result
84
- assert_equal "Execution of test case failed when it was expected to succeed:\ntest2", @test_case.message
87
+ assert @test_case.message.include? "Execution of test case failed when it was expected to succeed:"
88
+ assert @test_case.message.include? "test2"
85
89
  end
86
90
 
87
91
  test "assert_execution_failure should fail when exit_status == 0" do
@@ -89,7 +93,8 @@ class AssertionsTest < Test::Unit::TestCase
89
93
  @test_case.exit_status = 0
90
94
  AnySpec::Assertions.new(@test_case).assert_execution_failure
91
95
  assert_equal false, @test_case.last_assertion_result
92
- assert_equal "Execution of test case succeeded when it was expected to fail:\ntest2", @test_case.message
96
+ assert @test_case.message.include? "Execution of test case succeeded when it was expected to fail:"
97
+ assert @test_case.message.include? "test2"
93
98
  end
94
99
 
95
100
  test "assert_execution_failure should pass when exit_status != 0" do
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 0
8
7
  - 1
9
- version: 0.0.1
8
+ - 0
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aaron Gough
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-09 00:00:00 -04:00
17
+ date: 2011-03-05 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -29,6 +29,7 @@ extra_rdoc_files:
29
29
  - MIT-LICENSE
30
30
  - README.rdoc
31
31
  files:
32
+ - .gitignore
32
33
  - MIT-LICENSE
33
34
  - README.rdoc
34
35
  - Rakefile
@@ -37,6 +38,7 @@ files:
37
38
  - bin/any-spec
38
39
  - lib/any-spec.rb
39
40
  - lib/any-spec/assertions.rb
41
+ - lib/any-spec/string_extensions.rb
40
42
  - lib/any-spec/test-case.rb
41
43
  - lib/any-spec/test-runner.rb
42
44
  - test/fixtures/example_test_specification.yml