1
0
Fork 0
mirror of https://github.com/awesome-print/awesome_print synced 2023-03-27 23:22:34 -04:00
awesome_print/spec/objects_spec.rb
Gerard Caulfield c5e8669e9c
Simplify matching logic in tests
Simplify matching logic by adding a custom matcher which
handles the task of normalisation of object IDs instead of
calling gsub many times throughout the test code.

This allows our tests to focus more on what needs to be tested
instead obfuscating the tests with logic unrelated to what
the test is trying to cover.

It also allows making the normalisation code more robust so
there is less chance of an accidental match or typo slipping
in.

The change also replaces the arbitary default object IDs with a
string that makes it very obvious that it is just a placeholder.
2016-05-10 04:32:36 +10:00

129 lines
3 KiB
Ruby

require 'spec_helper'
RSpec.describe "Objects" do
before do
stub_dotfile!
end
after do
Object.instance_eval{ remove_const :Hello } if defined?(Hello)
end
describe "Formatting an object" do
it "attributes" do
class Hello
attr_reader :abra
attr_writer :ca
attr_accessor :dabra
def initialize
@abra, @ca, @dabra = 1, 2, 3
end
end
hello = Hello.new
out = hello.ai(:plain => true, :raw => true)
str = <<-EOS.strip
#<Hello:placeholder_id
attr_accessor :dabra = 3,
attr_reader :abra = 1,
attr_writer :ca = 2
>
EOS
expect(out).to be_similar_to(str)
expect(hello.ai(:plain => true, :raw => false)).to eq(hello.inspect)
end
it "instance variables" do
class Hello
def initialize
@abra, @ca, @dabra = 1, 2, 3
end
end
hello = Hello.new
out = hello.ai(:plain => true, :raw => true)
str = <<-EOS.strip
#<Hello:placeholder_id
@abra = 1,
@ca = 2,
@dabra = 3
>
EOS
expect(out).to be_similar_to(str)
expect(hello.ai(:plain => true, :raw => false)).to eq(hello.inspect)
end
it "attributes and instance variables" do
class Hello
attr_reader :abra
attr_writer :ca
attr_accessor :dabra
def initialize
@abra, @ca, @dabra = 1, 2, 3
@scooby, @dooby, @doo = 3, 2, 1
end
end
hello = Hello.new
out = hello.ai(:plain => true, :raw => true)
str = <<-EOS.strip
#<Hello:placeholder_id
@doo = 1,
@dooby = 2,
@scooby = 3,
attr_accessor :dabra = 3,
attr_reader :abra = 1,
attr_writer :ca = 2
>
EOS
expect(out).to be_similar_to(str)
expect(hello.ai(:plain => true, :raw => false)).to eq(hello.inspect)
end
it "without the plain options print the colorized values" do
class Hello
attr_reader :abra
attr_writer :ca
def initialize
@abra, @ca = 1, 2
@dabra = 3
end
end
hello = Hello.new
out = hello.ai(:raw => true)
str = <<-EOS.strip
#<Hello:placeholder_id
\e[0;36m@dabra\e[0m\e[0;37m = \e[0m\e[1;34m3\e[0m,
\e[1;36mattr_reader\e[0m \e[0;35m:abra\e[0m\e[0;37m = \e[0m\e[1;34m1\e[0m,
\e[1;36mattr_writer\e[0m \e[0;35m:ca\e[0m\e[0;37m = \e[0m\e[1;34m2\e[0m
>
EOS
expect(out).to be_similar_to(str)
expect(hello.ai(:plain => true, :raw => false)).to eq(hello.inspect)
end
it "with multine as false show inline values" do
class Hello
attr_reader :abra
attr_writer :ca
def initialize
@abra, @ca = 1, 2
@dabra = 3
end
end
hello = Hello.new
out = hello.ai(:multiline => false, :plain => true, :raw => true)
str = <<-EOS.strip
#<Hello:placeholder_id @dabra = 3, attr_reader :abra = 1, attr_writer :ca = 2>
EOS
expect(out).to be_similar_to(str)
expect(hello.ai(:plain => true, :raw => false)).to eq(hello.inspect)
end
end
end