README.rdoc in assay-0.3.0 vs README.rdoc in assay-0.4.0
- old
+ new
@@ -1,50 +1,173 @@
= Assay
+{Website}[http://rubyworks.github.com/assay] /
+{Report Issue}[http://github.com/rubyworks/assay/issues] /
+{Source Code}[http://github.com/rubyworks/assay] /
+{Mailing List}[http://groups.google.com/group/rubyworks-mailinglist]
+
+
== DESCRIPTION
Assay defines assertions in the same way that Ruby defines
exceptions. An assertion then is nothing more that an
extended Exception class. Assay provides a complete set
of these assertion classes for the most common assertion types.
It also provides both TestUnit-style assertion methods and
RSpec-compatiable matchers built from these assertion classes
-for use in your preferred test harness. Assay works with
+for use in your preferred test harness. Assay is compatible with
TestUnit, MiniTest, RSpec and other test frameworks.
== FEATURES
-* Mirrors the Ruby Exception system.
-* Assertions get their own specialized error messages.
+* Patterned after the Ruby exception system.
+* Allows assertions specialized error messages.
+* Supports any variety of assertion "grammers".
+* Can be used with almost any test framework.
-== RESOURCES
+== LIMITATIONS
-* home: http://rubyworks.github.com/assay
-* code: http://github.com/rubyworks/assay
-* mail: http://groups.google.com/group/rubyworks-mailinglist
+* Assay is Ruby 1.9+ only!
-== SYNOPSIS
-
-See QED documentation.
-
-
== INSTALLATION
To install with RubyGems simply open a console and type:
$ gem install assay
Site installation with the tarball can be done with Ruby Setup
(gem install setup). See http://rubyworks.github.com/setup.
-== COPYING
+== UTILIZATION
-Copyright (c) 2009 Thomas Sawyer
+=== Assay Classes
-This program is ditributed under the terms of the Apache 2.0 license.
+Assay consists of a set of Assertion subclasses known as *assays*. They
+are akin to Ruby's Exception subclasses, indeed the +Assertion+ base class
+is a subclass of Exception. But assays have special class methods that are
+used to make assertions.
-See NOTICE.rdoc and APACHE2.txt file for details.
+Consider the +EqualityAssay+ class. It defines methods for asserting equality
+via the `#==` method.
+
+ EqualityAssay.assert!(1,1)
+
+Additionally, we can check the assertion's test without actually raising the
+assertion if it fails using the query method.
+
+ EqualityAssay.pass?(1,1) #=> true
+
+Assays also provide the opposite method `#refute!` along with `#fail?`.
+
+ EqualityAssay.refute!(1,2)
+
+ EqualityAssay.fail?(1,2) #=> true
+
+Assay instances are test matchers, which can be conveniently defined with `#[]`.
+
+ EqualityAssay[1] =~ 1
+
+Notice in the example we have used `#=~` to apply the matcher which makes
+the `#assert!` call to the Assay object. Likewise `#!~` can be used to
+call `#refute!` instead. And note that `#===` is also an alias for `#=~`.
+
+ EqualityAssay[1] === 1
+
+Which means assay matchers can be used in case statments.
+
+ case 10
+ when InstanceAssay[Fixnum]
+ when EqualityAssay[10.0]
+ end
+
+Pretty neat.
+
+=== Framework Adapters
+
+Assay follows a standard practice of defining assertion error classes with
+an `#assertion?` method that returns +true+. This can be used by any test
+framework to easily detect when a raised error is an assertion rather than
+an ordinary error. To add support for this to common test frameworks Assay
+provides adapters.
+
+For example, to use assay with MiniTest framework add to your test helper
+script:
+
+ require 'assay/adapter/minitest'
+
+Likewise for TestUnit.
+
+ require 'assay/adapter/testunit'
+
+An RSpec adadpter is in the works, and should be out with the next release.
+
+Note that even without the adapter, you can still use Assay with other test
+frameworks. They will simply count Assay's assertions as regular errors.
+
+=== Customized Grammars
+
+Of course the classes are interesting and clearly make for a sound foundation,
+but in the end we want to write assertions more easily and concisely. For this
+we turn to separate "grammar" projects that depend on Assay's classes. The
+first of these, created as a spin-off project to demonstrate Assay's prowess,
+is {Fluidity}[http://rubyworks.github.com/fluidity]. Here is a quick taste of
+that gem's functionality.
+
+ require 'fluidity'
+
+ 10.should.be.kind_of(Integer)
+
+But is you are acustom to MiniTest's spec methods, you might prefer `must`.
+
+ 10.must.be.kind_of(Integer)
+
+And to satisfy all those technical aficionados (like yours truly) there is `assert`.
+
+ 10.assert.kind_of(Integer)
+
+Thre are also compatibility grammar projects available, spun-off from Assay, that
+provide compatability with legacy test frameworks which can serve as transition
+to Assay from these other frameworks. Follow the links below for each:
+
+* {Assay TestUnit}[http://github.com/rubyworks/assay-testunit]
+* {Assay MiniTest}[http://github.com/rubyworks/assay-minitest]
+* {Assay RSpec}[http://github.com/rubyworks/assay-rspec]
+
+Usage is essentially the same for any one of them. For example,
+
+ require 'assay/rspec'
+
+ include Assay::Matchers
+
+ 10.should be_kind_of(Integer)
+
+Note that the compatibility modules are not yet 100% compatable, lacking some
+of the more esoteric and complex features. But they are very nearly so, and
+will become more so in time.
+
+These are just a few possible grammars. There is no reason not to build
+your own grammar on top of Assay's classes if you have another approach in mind.
+Indeed, please do! That, after all, is the main purpose of having such
+a set of reusable assertion classes!
+
+=== Learning More
+
+There's more learn about Assay, mainly the variety of assay classes available,
+but also a few other bits of functionality not comvered here. To learn
+about these check out the {QED documentation}[http://github.com/rubyworks/assay]
+which provides an overiew of functionality with working examples, and the
+the {API documentation}[http://rubydoc.info/gems/asasy] for a more in depth look
+under the hood.
+
+
+== COPYRIGHTS
+
+Copyright (c) 2009 Rubyworks
+
+This program is ditributed under the terms of the *BSD-2-Cluase* license.
+
+See COPYING.rdoc file for details.