mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Test value types
This commit is contained in:
parent
8b5fd099bb
commit
35946dc993
3 changed files with 97 additions and 0 deletions
34
spec/spectator/block_spec.cr
Normal file
34
spec/spectator/block_spec.cr
Normal 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
|
28
spec/spectator/lazy_wrapper_spec.cr
Normal file
28
spec/spectator/lazy_wrapper_spec.cr
Normal 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
|
35
spec/spectator/value_spec.cr
Normal file
35
spec/spectator/value_spec.cr
Normal 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
|
Loading…
Reference in a new issue