Test value types

This commit is contained in:
Michael Miller 2021-02-09 22:50:21 -07:00
parent 8b5fd099bb
commit 35946dc993
No known key found for this signature in database
GPG key ID: FB9F12F7C646A4AD
3 changed files with 97 additions and 0 deletions

View file

@ -0,0 +1,34 @@
require "../spec_helper"
Spectator.describe Spectator::Block do
describe "#value" do
it "calls the block" do
called = false
block = described_class.new { called = true }
expect { block.value }.to change { called }.to(true)
end
it "can be called multiple times (doesn't cache the value)" do
count = 0
block = described_class.new { count += 1 }
block.value # Call once, count should be 1.
expect { block.value }.to change { count }.from(1).to(2)
end
end
describe "#to_s" do
let(block) do
described_class.new("Test Label") { 42 }
end
subject { block.to_s }
it "contains the label" do
is_expected.to contain("Test Label")
end
it "contains the value" do
is_expected.to contain("42")
end
end
end

View file

@ -0,0 +1,28 @@
require "../spec_helper"
Spectator.describe Spectator::LazyWrapper do
it "returns the value of the block" do
expect { subject.get { 42 } }.to eq(42)
end
it "caches the value" do
wrapper = described_class.new
count = 0
expect { wrapper.get { count += 1 } }.to change { count }.from(0).to(1)
expect { wrapper.get { count += 1 } }.to_not change { count }
end
# This type of nesting is used when `super` is called in a subject block.
# ```
# subject { super.to_s }
# ```
it "works with nested wrappers" do
outer = described_class.new
inner = described_class.new
value = outer.get do
inner.get { 42 }.to_s
end
expect(value).to eq("42")
expect(value).to be_a(String)
end
end

View file

@ -0,0 +1,35 @@
require "../spec_helper"
Spectator.describe Spectator::Value do
subject { described_class.new(42, "Test Label") }
it "stores the value" do
expect(&.value).to eq(42)
end
# TODO: Fix issue with compile-time type of `subject` being a union.
# describe "#to_s" do
# subject { super.to_s }
#
# it "contains the label" do
# is_expected.to contain("Test Label")
# end
#
# it "contains the value" do
# is_expected.to contain("42")
# end
# end
#
# describe "#inspect" do
# let(value) { described_class.new([42], "Test Label") }
# subject { value.inspect }
#
# it "contains the label" do
# is_expected.to contain("Test Label")
# end
#
# it "contains the value" do
# is_expected.to contain("[42]")
# end
# end
end