Skip to content

Commit

Permalink
Add shared specs for the interface of Random::Formatter
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
herwinw committed Dec 13, 2024
1 parent 4fc244c commit c701cc3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions library/random/formatter/alphanumeric_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require_relative '../../../spec_helper'
require_relative 'shared/interface'

ruby_version_is "3.1" do
require 'random/formatter'
Expand Down Expand Up @@ -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
33 changes: 33 additions & 0 deletions library/random/formatter/shared/interface.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit c701cc3

Please sign in to comment.