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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
require "spec_helper"
describe "expect(...).to start_with" do
it_behaves_like "an RSpec matcher", :valid_value => "ab", :invalid_value => "bc" do
let(:matcher) { start_with("a") }
end
context "with a string" do
it "passes if it matches the start of the actual string" do
expect("this string").to start_with "this str"
end
it "fails if it does not match the start of the actual string" do
expect {
expect("this string").to start_with "that str"
}.to fail_with("expected \"this string\" to start with \"that str\"")
end
end
context "with an array" do
it "passes if it is the first element of the array" do
expect([0, 1, 2]).to start_with 0
end
it "passes if the first elements of the array match" do
expect([0, 1, 2]).to start_with 0, 1
end
it "fails if it does not match the first element of the array" do
expect {
expect([0, 1, 2]).to start_with 2
}.to fail_with("expected [0, 1, 2] to start with 2")
end
it "fails if it the first elements of the array do not match" do
expect {
expect([0, 1, 2]).to start_with 1, 2
}.to fail_with("expected [0, 1, 2] to start with [1, 2]")
end
end
context "with an object that does not respond to :[]" do
it "raises an ArgumentError" do
expect {
expect(Object.new).to start_with 0
}.to raise_error(ArgumentError, /does not respond to :\[\]/)
end
end
context "with a hash" do
it "raises an ArgumentError if trying to match more than one element" do
expect{
expect({:a => 'b', :b => 'b', :c => 'c'}).to start_with({:a => 'b', :b => 'b'})
}.to raise_error(ArgumentError, /does not have ordered elements/)
end
end
end
describe "expect(...).not_to start_with" do
context "with a string" do
it "passes if it does not match the start of the actual string" do
expect("this string").not_to start_with "that str"
end
it "fails if it does match the start of the actual string" do
expect {
expect("this string").not_to start_with "this str"
}.to fail_with("expected \"this string\" not to start with \"this str\"")
end
end
context "with an array" do
it "passes if it is not the first element of the array" do
expect([0, 1, 2]).not_to start_with 2
end
it "passes if the first elements of the array do not match" do
expect([0, 1, 2]).not_to start_with 1, 2
end
it "fails if it matches the first element of the array" do
expect {
expect([0, 1, 2]).not_to start_with 0
}.to fail_with("expected [0, 1, 2] not to start with 0")
end
it "fails if it the first elements of the array match" do
expect {
expect([0, 1, 2]).not_to start_with 0, 1
}.to fail_with("expected [0, 1, 2] not to start with [0, 1]")
end
end
end
describe "expect(...).to end_with" do
it_behaves_like "an RSpec matcher", :valid_value => "ab", :invalid_value => "bc" do
let(:matcher) { end_with("b") }
end
context "with a string" do
it "passes if it matches the end of the actual string" do
expect("this string").to end_with "is string"
end
it "fails if it does not match the end of the actual string" do
expect {
expect("this string").to end_with "is stringy"
}.to fail_with("expected \"this string\" to end with \"is stringy\"")
end
end
context "with an array" do
it "passes if it is the last element of the array" do
expect([0, 1, 2]).to end_with 2
end
it "passes if the last elements of the array match" do
expect([0, 1, 2]).to end_with [1, 2]
end
it "fails if it does not match the last element of the array" do
expect {
expect([0, 1, 2]).to end_with 1
}.to fail_with("expected [0, 1, 2] to end with 1")
end
it "fails if it the last elements of the array do not match" do
expect {
expect([0, 1, 2]).to end_with [0, 1]
}.to fail_with("expected [0, 1, 2] to end with [0, 1]")
end
end
context "with an object that does not respond to :[]" do
it "raises an error if expected value can't be indexed'" do
expect {
expect(Object.new).to end_with 0
}.to raise_error(ArgumentError, /does not respond to :\[\]/)
end
end
context "with a hash" do
it "raises an ArgumentError if trying to match more than one element" do
expect{
expect({:a => 'b', :b => 'b', :c => 'c'}).to end_with({:a => 'b', :b =>'b'})
}.to raise_error(ArgumentError, /does not have ordered elements/)
end
end
end
describe "expect(...).not_to end_with" do
context "with a sting" do
it "passes if it does not match the end of the actual string" do
expect("this string").not_to end_with "stringy"
end
it "fails if it matches the end of the actual string" do
expect {
expect("this string").not_to end_with "string"
}.to fail_with("expected \"this string\" not to end with \"string\"")
end
end
context "an array" do
it "passes if it is not the last element of the array" do
expect([0, 1, 2]).not_to end_with 1
end
it "passes if the last elements of the array do not match" do
expect([0, 1, 2]).not_to end_with [0, 1]
end
it "fails if it matches the last element of the array" do
expect {
expect([0, 1, 2]).not_to end_with 2
}.to fail_with("expected [0, 1, 2] not to end with 2")
end
it "fails if it the last elements of the array match" do
expect {
expect([0, 1, 2]).not_to end_with [1, 2]
}.to fail_with("expected [0, 1, 2] not to end with [1, 2]")
end
end
end
|