From 99662b8bf22d6196a4fddccd221bf484ef217c33 Mon Sep 17 00:00:00 2001 From: Herwin Date: Sat, 30 Nov 2024 16:31:30 +0100 Subject: [PATCH] Add specs for Random::Formatter#alphanumeric --- library/random/alphanumeric_spec.rb | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 library/random/alphanumeric_spec.rb diff --git a/library/random/alphanumeric_spec.rb b/library/random/alphanumeric_spec.rb new file mode 100644 index 000000000..51358fab4 --- /dev/null +++ b/library/random/alphanumeric_spec.rb @@ -0,0 +1,54 @@ +require_relative '../../spec_helper' +require 'random/formatter' + +describe "Random.alphanumeric" do + it "generates a random alphanumeric string" do + Random.alphanumeric.should =~ /\A[A-Za-z0-9]+\z/ + end + + it "has a default size of 16 characters" do + Random.alphanumeric.size.should == 16 + end + + it "accepts a 'size' argument" do + Random.alphanumeric(10).size.should == 10 + end + + it "uses the default size if 'nil' is given as size argument" do + Random.alphanumeric(nil).size.should == 16 + end + + it "raises an ArgumentError if the size is not numeric" do + -> { + Random.alphanumeric("10") + }.should raise_error(ArgumentError) + end + + it "does not coerce the size argument with #to_int" do + size = mock("size") + size.should_not_receive(:to_int) + -> { + Random.alphanumeric(size) + }.should raise_error(ArgumentError) + end + + it "can be used by any object that responds to #random_number" do + random = mock("random") + random.should_receive(:random_number).and_return(42) + random.extend(Random::Formatter) + random.alphanumeric(2).should == "qA" + end + + ruby_version_is "3.3" do + it "accepts a 'chars' argument with the output alphabet" do + Random.alphanumeric(chars: ['a', 'b']).should =~ /\A[ab]+\z/ + end + + it "converts the elements of chars using #to_s" do + to_s = mock("to_s") + to_s.should_receive(:to_s).and_return("[mock to_s]") + # Using 1 value in chars results in an infinite loop + Random.alphanumeric(1, chars: [to_s, to_s]).should == "[mock to_s]" + end + end +end