From c701cc31568df50e436bb32229d8d2e8383e48ea Mon Sep 17 00:00:00 2001 From: Herwin Date: Fri, 13 Dec 2024 09:37:06 +0100 Subject: [PATCH] Add shared specs for the interface of Random::Formatter * Depend on the instance method `bytes` * Ensure the output is the same if the input bytes are the same * Ensure the output is not the same if the input bytes are not the same Right now, this is only used in the specs for `alphanumeric`, since this is the only method of Random::Formatter with specs, but this should be used in every other spec we add to this folder, since the specs have no dependency on the exact format that is being used. --- library/random/formatter/alphanumeric_spec.rb | 3 ++ library/random/formatter/shared/interface.rb | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 library/random/formatter/shared/interface.rb diff --git a/library/random/formatter/alphanumeric_spec.rb b/library/random/formatter/alphanumeric_spec.rb index 8e3141302..bb50c6bb0 100644 --- a/library/random/formatter/alphanumeric_spec.rb +++ b/library/random/formatter/alphanumeric_spec.rb @@ -1,4 +1,5 @@ require_relative '../../../spec_helper' +require_relative 'shared/interface' ruby_version_is "3.1" do require 'random/formatter' @@ -58,4 +59,6 @@ def @object.bytes(n) @object.alphanumeric(1, chars: [to_s, to_s]).should == "[mock to_s]" end end + + it_behaves_like :random_formatter_interface, :alphanumeric end diff --git a/library/random/formatter/shared/interface.rb b/library/random/formatter/shared/interface.rb new file mode 100644 index 000000000..6b4738f6a --- /dev/null +++ b/library/random/formatter/shared/interface.rb @@ -0,0 +1,33 @@ +require_relative '../../../../spec_helper' + +describe :random_formatter_interface, shared: true do + it "calls the method #bytes for 4 blocks of 4 bytes" do + bytes = mock('bytes') + bytes.extend(Random::Formatter) + bytes.should_receive(:bytes).with(4).exactly(4).and_return("\x00".b * 4) + bytes.send(@method) + end + + it "has the same output if the random byte streams are the same" do + bytes = Object.new + bytes.extend(Random::Formatter) + def bytes.bytes(n) + "\x00".b * n + end + bytes.send(@method).should == bytes.send(@method) + end + + it "has different output if the random byte streams are not the same" do + lhs = Object.new + lhs.extend(Random::Formatter) + def lhs.bytes(n) + "\x00".b * n + end + rhs = Object.new + rhs.extend(Random::Formatter) + def rhs.bytes(n) + "\x01".b * n + end + lhs.send(@method).should != rhs.send(@method) + end +end