#!/usr/bin/env ruby # # This test implementation is directly derived from its Python counterpart. # require 'swig_assert' require 'contract' def swig_assert_runtime_error(msg, type, &block) begin yield(block) raise SwigRubyError.new("#{msg} failed") rescue RuntimeError => e reason = e.to_s if reason =~ /\bcontract violation\b/i && reason =~ /\b#{type}\b/i # OK else raise e end end end Contract::test_preassert(1, 2) swig_assert_runtime_error("Preassertions", "require") { Contract::test_preassert(-1, 3) } Contract::test_postassert(3) swig_assert_runtime_error("Postassertions", "ensure") { Contract::test_postassert(-3) } Contract::test_prepost(2, 3) Contract::test_prepost(5, -4) swig_assert_runtime_error("Preassertions", "require") { Contract::test_prepost(-3, 4) } swig_assert_runtime_error("Postassertions", "ensure") { Contract::test_prepost(4, -10) } f = Contract::Foo.new f.test_preassert(4, 5) swig_assert_runtime_error("Method preassertion", "require") { f.test_preassert(-2, 3) } f.test_postassert(4) swig_assert_runtime_error("Method postassertion", "ensure") { f.test_postassert(-4) } f.test_prepost(3, 4) f.test_prepost(4, -3) swig_assert_runtime_error("Method preassertion", "require") { f.test_prepost(-4, 2) } swig_assert_runtime_error("Method postassertion", "ensure") { f.test_prepost(4, -10) } Contract::Foo.stest_prepost(4, 0) swig_assert_runtime_error("Static method preassertion", "require") { Contract::Foo.stest_prepost(-4, 2) } swig_assert_runtime_error("Static method postassertion", "ensure") { Contract::Foo.stest_prepost(4, -10) } b = Contract::Bar.new swig_assert_runtime_error("Inherited preassertion", "require") { b.test_prepost(2, -4) } d = Contract::D.new swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.foo(-1, 1, 1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.foo(1, -1, 1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.foo(1, 1, -1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.foo(1, 1, 1, -1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.foo(1, 1, 1, 1, -1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.bar(-1, 1, 1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.bar(1, -1, 1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.bar(1, 1, -1, 1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.bar(1, 1, 1, -1, 1) } swig_assert_runtime_error("Inherited preassertion (D)", "require") { d.bar(1, 1, 1, 1, -1) } # namespace Contract::MyClass.new(1) swig_assert_runtime_error("Constructor preassertion", "require") { Contract::MyClass.new(0) }