Test and improve "Anything"

This commit is contained in:
Michael Miller 2021-02-09 19:10:11 -07:00
parent 4e3cb5d25f
commit a20f2d4f98
No known key found for this signature in database
GPG key ID: FB9F12F7C646A4AD
2 changed files with 70 additions and 0 deletions

View file

@ -0,0 +1,49 @@
require "../spec_helper"
Spectator.describe Spectator::Anything do
it "equals everything" do
expect(true).to eq(subject)
expect(false).to eq(subject)
expect(nil).to eq(subject)
expect(42).to eq(subject)
expect(42.as(Int32 | String)).to eq(subject)
expect(["foo", "bar"]).to eq(subject)
end
it "matches everything" do
expect(true).to match(subject)
expect(false).to match(subject)
expect(nil).to match(subject)
expect(42).to match(subject)
expect(42.as(Int32 | String)).to match(subject)
expect(["foo", "bar"]).to match(subject)
end
context "nested in a container" do
it "equals everything" do
expect(["foo", "bar"]).to eq(["foo", subject])
expect({"foo", "bar"}).to eq({"foo", subject})
expect({foo: "bar"}).to eq({foo: subject})
expect({"foo" => "bar"}).to eq({"foo" => subject})
end
it "matches everything" do
expect(["foo", "bar"]).to match(["foo", subject])
expect({"foo", "bar"}).to match({"foo", subject})
expect({foo: "bar"}).to match({foo: subject})
expect({"foo" => "bar"}).to match({"foo" => subject})
end
end
describe "#to_s" do
subject { super.to_s }
it { is_expected.to contain("anything") }
end
describe "#inspect" do
subject { super.inspect }
it { is_expected.to contain("anything") }
end
end

View file

@ -1,15 +1,36 @@
module Spectator
# Type dedicated to matching everything.
# This is intended to be used as a value to compare against when the value doesn't matter.
# Can be used like so:
# ```
# anything = Spectator::Anything.new
# array = ["foo", anything]
# expect(["foo", "bar"]).to eq(array)
# ```
struct Anything
# Always returns true.
def ==(other)
true
end
# Always returns true.
def ===(other)
true
end
# Always returns true.
def =~(other)
true
end
# Displays "anything".
def to_s(io)
io << "anything"
end
# Displays "<anything>".
def inspect(io)
io << "<anything>"
end
end
end