= power_assert
== About
Power Assert for Ruby.

Power Assert shows each value of variables and method calls in the expression.
It is useful for testing, providing which value wasn't correct when the condition is not satisfied.

    Failure:
       assert { 3.times.to_a.include?(3) }
                  |     |    |
                  |     |    false
                  |     [0, 1, 2]
                  #<Enumerator: 3:times>

== Related Projects
In general, you don't need to use this library directly.
Use following test frameworks or extensions instead.

* {test-unit}[https://github.com/test-unit/test-unit](>= 3.0.0)
  * {Document}[http://test-unit.github.io/test-unit/en/Test/Unit/Assertions.html#assert-instance_method]
* {minitest-power_assert}[https://github.com/hsbt/minitest-power_assert]
* {rspec-power_assert}[https://github.com/joker1007/rspec-power_assert]
* {pry-power_assert}[https://github.com/yui-knk/pry-power_assert]
* {pry-byebug-power_assert}[https://github.com/k-tsj/pry-byebug-power_assert]
* {power_p}[https://github.com/k-tsj/power_p]

== Requirement
* CRuby 2.0.0 or later

== Reference
* {Power Assert in Ruby (at RubyKaigi 2014) // Speaker Deck}[https://speakerdeck.com/k_tsj/power-assert-in-ruby]

== Known Limitations
* Expressions must be put in one line. Expressions with folded long lines produce nothing report, e.g.:
    assert do
      # reported
      func(foo: 0123456789, bar: "abcdefg")
    end

    assert do
      # won't be reported
      func(foo: 0123456789,
           bar: "abcdefg")
    end
* Expressions must have one or more method call. Expressions with no method call produce nothing report, e.g.:
    val = false
    assert do
      # reported
      val == true
    end

    assert do
      # won't be reported
      val
    end
* Returned values from accessor methods, method missing, or "super" produce nothing report, e.g:
    class Foo
      attr_accessor :val
    end
    foo = Foo.new
    foo.val = false

    assert do
      # reported (only the value of "foo" and the literal "true")
      foo.val == true
    end

    assert do
      # won't be reported
      foo.val
    end
* Expressions should not have conditional branches. Expressions with such conditional codes may produce nothing report, e.g.:
    condition = true
    expected = false
    actual = true
    assert do
      # this will fail but nothing reported
      condition ? expected == actual : expected == actual
    end

== Travis Build Status {<img src="https://secure.travis-ci.org/ruby/power_assert.png?branch=master"/>}[http://travis-ci.org/ruby/power_assert]
