diff --git a/spec/matchers/equality_matcher_spec.cr b/spec/matchers/equality_matcher_spec.cr new file mode 100644 index 0000000..3b6b83b --- /dev/null +++ b/spec/matchers/equality_matcher_spec.cr @@ -0,0 +1,32 @@ +require "../spec_helper" + +Spectator.describe "eq matcher" do + it "is true for equal values" do + expect(42).to eq(42) + end + + it "is false for inequal values" do + expect(42).to_not eq(24) + end + + it "is true for identical references" do + string = "foobar" + expect(string).to eq(string) + end + + it "is false for different references" do + string1 = "foo" + string2 = "bar" + expect(string1).to_not eq(string2) + end + + double(:fake) do + stub instance.==(other) { true } + end + + it "uses the == operator" do + dbl = double(:fake) + expect(42).to eq(dbl) + expect(dbl).to have_received(:==).with(42).once + end +end diff --git a/spec/rspec/expectations/equality_matchers_spec.cr b/spec/rspec/expectations/equality_matchers_spec.cr new file mode 100644 index 0000000..9aa923c --- /dev/null +++ b/spec/rspec/expectations/equality_matchers_spec.cr @@ -0,0 +1,64 @@ +require "../../spec_helper" + +# Examples taken from: +# https://relishapp.com/rspec/rspec-expectations/v/3-8/docs/built-in-matchers/equality-matchers +# and modified to fit Spectator and Crystal. +Spectator.describe "Equality matchers" do + context "compare using eq (==)" do + describe "a string" do + it "is equal to another string of the same value" do + expect("this string").to eq("this string") + end + + it "is not equal to another string of a different value" do + expect("this string").not_to eq("a different string") + end + end + + describe "an integer" do + it "is equal to a float for the same value" do + expect(5).to eq(5.0) + end + end + end + + context "compare using ==" do + describe "a string" do + it "is equal to another string of the same value" do + expect("this string").to be == "this string" + end + + it "is not equal to another string of a different value" do + expect("this string").not_to be == "a different string" + end + end + + describe "an integer" do + it "is equal to a float of the same value" do + expect(5).to be == 5.0 + end + end + end + + # There are no #eql? and #equal? methods in Crystal, so these tests are skipped. + + context "compare using be (same?)" do + it "is equal to itself" do + string = "this string" + expect(string).to be(string) + end + + it "is not equal to another reference of the same value" do + # Strings with identical contents are the same reference in Crystal. + # This test is modified to reflect that. + # expect("this string").not_to be("this string") + box1 = Box.new("this string") + box2 = Box.new("this string") + expect(box1).not_to be(box2) + end + + it "is not equal to another string of a different value" do + expect("this string").not_to be("a different string") + end + end +end