brass 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.ruby ADDED
@@ -0,0 +1,53 @@
1
+ ---
2
+ source:
3
+ - meta
4
+ authors:
5
+ - name: Thomas Sawyer
6
+ email: transfire@gmail.com
7
+ copyrights:
8
+ - holder: Rubyworks
9
+ year: '2012'
10
+ license: BSD-2-Clause
11
+ replacements: []
12
+ alternatives: []
13
+ requirements:
14
+ - name: detroit
15
+ groups:
16
+ - build
17
+ development: true
18
+ - name: lemon
19
+ groups:
20
+ - test
21
+ development: true
22
+ - name: rubytest
23
+ groups:
24
+ - test
25
+ development: true
26
+ dependencies: []
27
+ conflicts: []
28
+ repositories:
29
+ - uri: git@github.com:rubyworks/brass.git
30
+ scm: git
31
+ name: upstream
32
+ resources:
33
+ home: http://rubyworks.github.com/brass
34
+ docs: http://rubydoc.info/gems/brass
35
+ code: http://github.com/rubyworks/brass
36
+ mail: http://groups.google.com/groups/rubyworks-mailinglist
37
+ extra: {}
38
+ load_path:
39
+ - lib
40
+ revision: 0
41
+ created: '2012-01-24'
42
+ summary: Bare-Metal Ruby Assertion System Standard
43
+ title: BRASS
44
+ version: 1.0.0
45
+ name: brass
46
+ description: ! 'BRASS stands for Bare-Metal Ruby Assertion System Standard. It is
47
+ a very basic
48
+
49
+ foundational assertions framework for other assertion and test frameworks
50
+
51
+ to make use so they can all work together harmoniously.'
52
+ organization: Rubyworks
53
+ date: '2012-01-24'
@@ -0,0 +1,38 @@
1
+ = COPYRIGHT
2
+
3
+ == NOTICES
4
+
5
+ === Brass
6
+
7
+ Copyright:: (c) 2012 RubyWorks
8
+ License:: (r) BSD-2-Clause
9
+ Website:: http://rubyworks.github.com/brass
10
+
11
+ == LICENSES
12
+
13
+ === BSD-2-Clause License
14
+
15
+ Brass
16
+
17
+ Copyright (c) 2012 Rubyworks. All rights reserved.
18
+
19
+ Redistribution and use in source and binary forms, with or without
20
+ modification, are permitted provided that the following conditions are met:
21
+
22
+ 1. Redistributions of source code must retain the above copyright notice,
23
+ this list of conditions and the following disclaimer.
24
+
25
+ 2. Redistributions in binary form must reproduce the above copyright
26
+ notice, this list of conditions and the following disclaimer in the
27
+ documentation and/or other materials provided with the distribution.
28
+
29
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
30
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32
+ COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
34
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
36
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
37
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
38
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,12 @@
1
+ = HISTORY
2
+
3
+ == 1.0.0 | 2012-01-24
4
+
5
+ This is the initial release of BRASS. It is given a 1.0.0 version
6
+ despite being such a new project because it is very simple and
7
+ the code is derived from other system that have used it for some time.
8
+
9
+ Changes:
10
+
11
+ * Happy Birthday!
12
+
@@ -0,0 +1,71 @@
1
+ # BRASS
2
+
3
+ [Website](http://rubyworks.github.com/brass) /
4
+ [Report Issue](http://github.com/rubyworks/brass/issues) /
5
+ [Development](http://github.com/rubyworks/brass)
6
+
7
+ [![Build Status](https://secure.travis-ci.org/rubyworks/brass.png)](http://travis-ci.org/rubyworks/brass)
8
+
9
+
10
+ # DESCRIPTION
11
+
12
+ BRASS is a standard assertions framework, framework's framework, or even
13
+ a framework's framework's framework, depending on where you're staking
14
+ out your assertions keister.
15
+
16
+ In other words, BRASS provides a standard rudimentary assertions framework
17
+ that all other assertion and/or test framework can use, or at least comply
18
+ with, and then everyone gets on swell.
19
+
20
+ Now, you may be thinking, "No thanks, I do it my way." But when you see
21
+ how stupid simple BRASS is, you'll realize that, "Yea, that actually
22
+ make sense." And feel a bit like a ass yourself for jumping to
23
+ quick judgment.
24
+
25
+ Now, enough fluffery.
26
+
27
+ BRASS defines two Kernel methods: `assert` and `refute`
28
+
29
+ assert(truthiness, *fail_arguments)
30
+ refute(truthiness, *fail_arguments)
31
+
32
+ Where `truthiness` is any object evaluated for it's truth value (`false` and `nil`
33
+ are `false`, everything else is `true`), and `fail_arguments` are exactly the same
34
+ as those we would pass to the `fail` or `raise` methods.
35
+
36
+ The `assert` and `refute` methods do three things. First they test the `truthiness`,
37
+ then they tick up the counts in the global assertions counter, and if truthiness fails,
38
+ they raise an error. This error is either `StandardError` or the one specified
39
+ by the `fail_arguments`.
40
+
41
+ The global assertions counter is `$ASSERTION_COUNTS`. If is simply a Hash formally
42
+ defined as:
43
+
44
+ $ASSERTIONS_COUNTS = Hash.new{|h,k| h[k] = 0}
45
+
46
+ And though it is open to any key, they should be symbols and three in particular
47
+ and standard `:pass`, `:fail` and `:total`. Whenever an assertion passes,
48
+ the `:total` and `:pass` counts are incremented, and whenever an assertion
49
+ fails the `:total` and `:fail` counts are incremented. You might wonder why
50
+ there is a total entry when the sum of the other two would do just as well.
51
+ Well, other frameworks might want to add some other counts, e.g. a `:skip`
52
+ count, and to ensure we still get the proper total despite this, we keep
53
+ a separate tally. Moving on....
54
+
55
+ Okay, last thing. When `assert` or `refute` raises an error, it marks the error
56
+ as an assertion via the `Exception#set_assertion` method. This is a method extension
57
+ to the Exception class along with the `Exception#assertion?` method which any
58
+ test framework can use to distinguish an assertion error from an ordinarily error.
59
+
60
+ That's all, bro. Consider your brass ass informed.
61
+
62
+
63
+ ## COPYING
64
+
65
+ Copyright (c) 2010 Rubyworks
66
+
67
+ All rights reserved.
68
+
69
+ Distribute in accordance with the **BSD-2-Clause** license.
70
+
71
+ See COPYING.md file for details.
@@ -0,0 +1,78 @@
1
+ class Exception
2
+
3
+ # Is the exception an assertion error?
4
+ def assertion?
5
+ @assertion
6
+ end
7
+
8
+ # Set the the exception's assertion flag.
9
+ def set_assertion(boolean)
10
+ @assertion = boolean # ? true : false
11
+ end
12
+
13
+ end
14
+
15
+ module Kernel
16
+
17
+ # Track assertions counts.
18
+ $ASSERTION_COUNTS ||= Hash.new{ |h,k| h[k] = 0 }
19
+
20
+ #
21
+ # Universal assertion method.
22
+ #
23
+ def assert(truth, *raise_arguments)
24
+ $ASSERTION_COUNTS[:total] += 1
25
+ if truth
26
+ $ASSERTION_COUNTS[:pass] += 1
27
+ else
28
+ $ASSERTION_COUNTS[:fail] += 1
29
+ # if fail set assertion=true then just,
30
+ # fail *raise_arguments
31
+ # but alas ...
32
+ if Exception === raise_arguments.first
33
+ error = raise_arguments.shift
34
+ else
35
+ if Exception > raise_arguments.first
36
+ error_class = raise_arguments.shift
37
+ else
38
+ error_class = StandardError
39
+ end
40
+ error = error_class.new(*raise_arguments)
41
+ end
42
+ error.set_assertion(true)
43
+ raise error
44
+ end
45
+ end
46
+
47
+ module_function :assert
48
+
49
+ #
50
+ # Universal refutation method (opposite of `#assert`).
51
+ #
52
+ def refute(truth, *raise_arguments)
53
+ $ASSERTION_COUNTS[:total] += 1
54
+ if truth
55
+ $ASSERTION_COUNTS[:fail] += 1
56
+ # if fail set assertion=true then just,
57
+ # fail *raise_arguments
58
+ # but alas ...
59
+ if Exception === raise_arguments.first
60
+ error = raise_arguments.shift
61
+ else
62
+ if Exception > raise_arguments.first
63
+ error_class = raise_arguments.shift
64
+ else
65
+ error_class = StandardError
66
+ end
67
+ error = error_class.new(*raise_arguments)
68
+ end
69
+ error.set_assertion(true)
70
+ raise error
71
+ else
72
+ $ASSERTION_COUNTS[:pass] += 1
73
+ end
74
+ end
75
+
76
+ module_function :refute
77
+
78
+ end
@@ -0,0 +1,24 @@
1
+ module Kernel
2
+
3
+ # TODO: Should `#expect` method be part of standard?
4
+
5
+ # Executate a block asserting that a type of error will be raised.
6
+ #
7
+ # Presently this is not part of brass by default, as whether it should
8
+ # be is under debate. So this file must be required separately:
9
+ #
10
+ # require 'brass/expect'
11
+ #
12
+ def expect(error_class) #:yield:
13
+ begin
14
+ yield
15
+ assert(false, error_class, "#{error_class} expected but none thrown")
16
+ rescue error_class
17
+ assert(true)
18
+ rescue Exception => err
19
+ assert(false, error_class, "#{error_class} expected but #{err} was thrown")
20
+ end
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,22 @@
1
+ covers 'brass'
2
+
3
+ testcase Kernel do
4
+
5
+ method :assert do
6
+
7
+ test do
8
+ assert(true)
9
+ end
10
+
11
+ end
12
+
13
+ method :refute do
14
+
15
+ test do
16
+ refute(false)
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brass
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Thomas Sawyer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: detroit
16
+ requirement: &26437340 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *26437340
25
+ - !ruby/object:Gem::Dependency
26
+ name: lemon
27
+ requirement: &26436120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *26436120
36
+ - !ruby/object:Gem::Dependency
37
+ name: rubytest
38
+ requirement: &26460580 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *26460580
47
+ description: ! 'BRASS stands for Bare-Metal Ruby Assertion System Standard. It is
48
+ a very basic
49
+
50
+ foundational assertions framework for other assertion and test frameworks
51
+
52
+ to make use so they can all work together harmoniously.'
53
+ email:
54
+ - transfire@gmail.com
55
+ executables: []
56
+ extensions: []
57
+ extra_rdoc_files:
58
+ - HISTORY.rdoc
59
+ - COPYING.rdoc
60
+ - README.md
61
+ files:
62
+ - .ruby
63
+ - lib/brass/expect.rb
64
+ - lib/brass.rb
65
+ - test/case_brass.rb
66
+ - HISTORY.rdoc
67
+ - README.md
68
+ - COPYING.rdoc
69
+ homepage: http://rubyworks.github.com/brass
70
+ licenses:
71
+ - BSD-2-Clause
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 1.8.10
91
+ signing_key:
92
+ specification_version: 3
93
+ summary: Bare-Metal Ruby Assertion System Standard
94
+ test_files: []