1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
require "spec"
private class SpecException < Exception
getter value : Int32
def initialize(@value, msg)
super(msg)
end
end
private class NilMimicker
def ==(a_nil : Nil)
true
end
end
describe "Spec matchers" do
describe "should be_truthy" do
it "passes for true" do
true.should be_truthy
end
it "passes for some non-nil, non-false value" do
42.should be_truthy
end
end
describe "should_not be_truthy" do
it "passes for false" do
false.should_not be_truthy
end
it "passes for nil" do
nil.should_not be_truthy
end
end
describe "should be_falsey" do
it "passes for false" do
false.should be_falsey
end
it "passes for nil" do
nil.should be_falsey
end
end
describe "should_not be_falsey" do
it "passes for true" do
true.should_not be_falsey
end
it "passes for some non-nil, non-false value" do
42.should_not be_falsey
end
end
describe "be_nil" do
it "passes for nil" do
nil.should be_nil
end
it "does not pass for overwritten `==`" do
NilMimicker.new.should_not be_nil
end
end
describe "should contain" do
it "passes when string includes? specified substring" do
"hello world!".should contain("hello")
end
it "works with array" do
[1, 2, 3, 5, 8].should contain(5)
end
it "works with set" do
[1, 2, 3, 5, 8].to_set.should contain(8)
end
it "works with range" do
(50..55).should contain(53)
end
it "does not pass when string does not includes? specified substring" do
expect_raises Spec::AssertionFailed, %{Expected: "hello world!"\nto include: "crystal"} do
"hello world!".should contain("crystal")
end
end
end
describe "should_not contain" do
it "passes when string does not includes? specified substring" do
"hello world!".should_not contain("crystal")
end
it "does not pass when string does not includes? specified substring" do
expect_raises Spec::AssertionFailed, %{Expected: value "hello world!"\nto not include: "world"} do
"hello world!".should_not contain("world")
end
end
end
describe "expect_raises" do
it "return exception" do
ex = expect_raises(SpecException) { raise SpecException.new(11, "O_o") }
ex.value.should eq 11
ex.message.should eq "O_o"
end
end
context "should work like describe" do
it "is true" do
true.should be_truthy
end
end
it "detects a nesting `it`" do
ex = expect_raises(Spec::NestingSpecError) { it { } }
ex.message.should eq "Can't nest `it` or `pending`"
ex.file.should eq __FILE__
end
it "detects a nesting `pending`" do
ex = expect_raises(Spec::NestingSpecError) { pending }
ex.message.should eq "Can't nest `it` or `pending`"
ex.file.should eq __FILE__
end
describe "pending block is not compiled" do
pending "pending has block with valid syntax, but invalid semantics" do
UndefinedConstant.undefined_method
end
end
end
|