examples/general/SRL/spec/regex/character_spec.rb in rley-0.6.00 vs examples/general/SRL/spec/regex/character_spec.rb in rley-0.6.01
- old
+ new
@@ -1,159 +1,166 @@
# File: character_spec.rb
-require_relative '../spec_helper' # Use the RSpec test framework
+require_relative '../spec_helper' # Use the RSpec test framework
require_relative '../../lib/regex/character'
-module Regex # Open this namespace, to get rid of scope qualifiers
+module Regex # Open this namespace, to get rid of scope qualifiers
+ describe Character do
+ # This constant holds an arbitrary selection of characters
+ SampleChars = [?a, ?\0, ?\u0107].freeze
-describe Character do
- # This constant holds an arbitrary selection of characters
- SampleChars = [?a, ?\0, ?\u0107]
-
- # This constant holds the codepoints of the character selection
- SampleInts = [0x61, 0, 0x0107]
+ # This constant holds the codepoints of the character selection
+ SampleInts = [0x61, 0, 0x0107].freeze
- # This constant holds an arbitrary selection of two characters (digrams) escape sequences
- SampleDigrams = %w[ \n \e \0 \6 \k]
-
- # This constant holds an arbitrary selection of escaped octal or hexadecimal literals
- SampleNumEscs = %w[ \0 \07 \x07 \xa \x0F \u03a3 \u{a}]
+ # This constant holds an arbitrary selection of two characters (digrams)
+ # escape sequences
+ SampleDigrams = %w[\n \e \0 \6 \k].freeze
- before(:all) do
- # Ensure that the set of codepoints is mapping the set of chars...
- expect(SampleChars.map(&:ord)).to eq(SampleInts)
- end
-
- context 'Creation & initialization' do
- it 'should be created with a with an integer value (codepoint) or...' do
- SampleInts.each do |aCodepoint|
- expect { Character.new(aCodepoint) }.not_to raise_error
- end
- end
-
- it '...could be created with a single character String or...' do
- SampleChars.each do |aChar|
- expect { Character.new(aChar) }.not_to raise_error
- end
- end
-
- it '...could be created with an escape sequence' do
- # Case 1: escape sequence is a digram
- SampleDigrams.each do |anEscapeSeq|
- expect { Character.new(anEscapeSeq) }.not_to raise_error
- end
-
- # Case 2: escape sequence is an escaped octal or hexadecimal literal
- SampleNumEscs.each do |anEscapeSeq|
- expect { Character.new(anEscapeSeq) }.not_to raise_error
- end
- end
-
- end # context
-
- context 'Provided services' do
- it 'Should know its lexeme if created from a string' do
- # Lexeme is defined when the character was initialised from a text
- SampleChars.each do |aChar|
- ch = Character.new(aChar)
- expect(ch.lexeme).to eq(aChar)
- end
- end
-
- it 'Should not know its lexeme representation if created from a codepoint' do
- SampleInts.each do |aChar|
- ch = Character.new(aChar)
- expect(ch.lexeme).to be_nil
- end
- end
-
- it 'should know its String representation' do
- # Try for one character
- newOne = Character.new(?\u03a3)
- expect(newOne.char).to eq('Σ')
- expect(newOne.to_str).to eq("\u03A3")
-
- # Try with our chars sample
- SampleChars.each { |aChar| Character.new(aChar).to_str == aChar }
-
- # Try with our codepoint sample
- mapped_chars = SampleInts.map { |aCodepoint| Character.new(aCodepoint).char }
- expect(mapped_chars).to eq(SampleChars)
-
- # Try with our escape sequence samples
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
- Character.new(anEscSeq).to_str == String::class_eval(%Q|"#{anEscSeq}"|)
- end
- end
-
- it 'should know its codepoint' do
- # Try for one character
- newOne = Character.new(?\u03a3)
- expect(newOne.codepoint).to eq(0x03a3)
-
- # Try with our chars sample
- allCodepoints = SampleChars.map { |aChar| Character.new(aChar).codepoint }
- expect(allCodepoints).to eq(SampleInts)
-
- # Try with our codepoint sample
- mapped_chars = SampleInts.each { |aCodepoint| expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint) }
-
- # Try with our escape sequence samples
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
- expect(Character.new(anEscSeq).codepoint).to eq(String::class_eval(%Q|"#{anEscSeq}".ord()|))
- end
- end
-
- it 'should known whether it is equal to another Object' do
- newOne = Character.new(?\u03a3)
-
- # Case 1: test equality with itself
- expect(newOne).to eq(newOne)
-
- # Case 2: test equality with another Character
- expect(newOne).to eq(Character.new(?\u03a3))
- expect(newOne).not_to eq(Character.new(?\u0333))
-
- # Case 3: test equality with an integer value (equality based on codepoint value)
- expect(newOne).to eq(0x03a3)
- expect(newOne).not_to eq(0x0333)
-
- # Case 4: test equality with a single-character String
- expect(newOne).to eq(?\u03a3)
- expect(newOne).not_to eq(?\u0333)
-
- # Case 5: test fails with multiple character strings
- expect(newOne).not_to eq('03a3')
-
- # Case 6: equality testing with arbitray object
- expect(newOne).not_to eq(nil)
- expect(newOne).not_to eq(Object.new)
-
- # In case 6, equality is based on to_s method.
- simulator = double('fake')
- expect(simulator).to receive(:to_s).and_return(?\u03a3)
- expect(newOne).to eq(simulator)
-
- # Create a module that re-defines the existing to_s method
- module Tweak_to_s
- def to_s() # Overwrite the existing to_s method
- return ?\u03a3
- end
- end # module
- weird = Object.new
- weird.extend(Tweak_to_s)
- expect(newOne).to eq(weird)
- end
-
- it "should know its readable description" do
- ch1 = Character.new('a')
- expect(ch1.explain).to eq("the character 'a'")
-
- ch2 = Character.new(?\u03a3)
- expect(ch2.explain).to eq("the character '\u03a3'")
- end
- end # context
+ # This constant holds an arbitrary selection of escaped octal
+ # or hexadecimal literals
+ SampleNumEscs = %w[\0 \07 \x07 \xa \x0F \u03a3 \u{a}].freeze
-end # describe
+ before(:all) do
+ # Ensure that the set of codepoints is mapping the set of chars...
+ expect(SampleChars.map(&:ord)).to eq(SampleInts)
+ end
+ context 'Creation & initialization' do
+ it 'should be created with a with an integer value (codepoint) or...' do
+ SampleInts.each do |aCodepoint|
+ expect { Character.new(aCodepoint) }.not_to raise_error
+ end
+ end
+
+ it '...could be created with a single character String or...' do
+ SampleChars.each do |aChar|
+ expect { Character.new(aChar) }.not_to raise_error
+ end
+ end
+
+ it '...could be created with an escape sequence' do
+ # Case 1: escape sequence is a digram
+ SampleDigrams.each do |anEscapeSeq|
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
+ end
+
+ # Case 2: escape sequence is an escaped octal or hexadecimal literal
+ SampleNumEscs.each do |anEscapeSeq|
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
+ end
+ end
+ end # context
+
+ context 'Provided services' do
+ it 'Should know its lexeme if created from a string' do
+ # Lexeme is defined when the character was initialised from a text
+ SampleChars.each do |aChar|
+ ch = Character.new(aChar)
+ expect(ch.lexeme).to eq(aChar)
+ end
+ end
+
+ it 'Should not know its lexeme representation from a codepoint' do
+ SampleInts.each do |aChar|
+ ch = Character.new(aChar)
+ expect(ch.lexeme).to be_nil
+ end
+ end
+
+ it 'should know its String representation' do
+ # Try for one character
+ newOne = Character.new(?\u03a3)
+ expect(newOne.char).to eq('Σ')
+ expect(newOne.to_str).to eq("\u03A3")
+
+ # Try with our chars sample
+ SampleChars.each { |aChar| Character.new(aChar).to_str == aChar }
+
+ # Try with our codepoint sample
+ mapped_chars = SampleInts.map do |aCodepoint|
+ Character.new(aCodepoint).char
+ end
+ expect(mapped_chars).to eq(SampleChars)
+
+ # Try with our escape sequence samples
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
+ expectation = String.class_eval(%Q|"#{anEscSeq}"|, __FILE__, __LINE__)
+ Character.new(anEscSeq).to_str == expectation
+ end
+ end
+
+ it 'should know its codepoint' do
+ # Try for one character
+ newOne = Character.new(?\u03a3)
+ expect(newOne.codepoint).to eq(0x03a3)
+
+ # Try with our chars sample
+ allCodepoints = SampleChars.map do |aChar|
+ Character.new(aChar).codepoint
+ end
+ expect(allCodepoints).to eq(SampleInts)
+
+ # Try with our codepoint sample
+ mapped_chars = SampleInts.each do |aCodepoint|
+ expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint)
+ end
+
+ # Try with our escape sequence samples
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
+ expectation = String.class_eval(%Q|"#{anEscSeq}".ord()|, __FILE__, __LINE__)
+ expect(Character.new(anEscSeq).codepoint).to eq(expectation)
+ end
+ end
+
+ it 'should known whether it is equal to another Object' do
+ newOne = Character.new(?\u03a3)
+
+ # Case 1: test equality with itself
+ expect(newOne).to eq(newOne)
+
+ # Case 2: test equality with another Character
+ expect(newOne).to eq(Character.new(?\u03a3))
+ expect(newOne).not_to eq(Character.new(?\u0333))
+
+ # Case 3: test equality with an integer value
+ # (equality based on codepoint value)
+ expect(newOne).to eq(0x03a3)
+ expect(newOne).not_to eq(0x0333)
+
+ # Case 4: test equality with a single-character String
+ expect(newOne).to eq(?\u03a3)
+ expect(newOne).not_to eq(?\u0333)
+
+ # Case 5: test fails with multiple character strings
+ expect(newOne).not_to eq('03a3')
+
+ # Case 6: equality testing with arbitray object
+ expect(newOne).not_to eq(nil)
+ expect(newOne).not_to eq(Object.new)
+
+ # In case 6, equality is based on to_s method.
+ simulator = double('fake')
+ expect(simulator).to receive(:to_s).and_return(?\u03a3)
+ expect(newOne).to eq(simulator)
+
+ # Create a module that re-defines the existing to_s method
+ module Tweak_to_s
+ def to_s() # Overwrite the existing to_s method
+ return ?\u03a3
+ end
+ end # module
+ weird = Object.new
+ weird.extend(Tweak_to_s)
+ expect(newOne).to eq(weird)
+ end
+
+ it 'should know its readable description' do
+ ch1 = Character.new('a')
+ expect(ch1.explain).to eq("the character 'a'")
+
+ ch2 = Character.new(?\u03a3)
+ expect(ch2.explain).to eq("the character '\u03a3'")
+ end
+ end # context
+ end # describe
end # module
-# End of file
\ No newline at end of file
+# End of file