require 'spec_helper' describe ChunkyPNG::Point do subject { ChunkyPNG::Point.new(1, 2) } it { should respond_to(:x) } it { should respond_to(:y) } describe '#within_bounds?' do it { should be_within_bounds(2, 3) } it { should_not be_within_bounds('1x3') } it { should_not be_within_bounds(2, 2) } it { should_not be_within_bounds('[1 2]') } end describe '#<=>' do it "should return 0 if the coordinates are identical" do (subject <=> ChunkyPNG::Point.new(1, 2)).should == 0 end it "should return -1 if the y coordinate is smaller than the other one" do (subject <=> ChunkyPNG::Point.new(1, 3)).should == -1 (subject <=> ChunkyPNG::Point.new(0, 3)).should == -1 # x doesn't matter (subject <=> ChunkyPNG::Point.new(2, 3)).should == -1 # x doesn't matter end it "should return 1 if the y coordinate is larger than the other one" do (subject <=> ChunkyPNG::Point.new(1, 0)).should == 1 (subject <=> ChunkyPNG::Point.new(0, 0)).should == 1 # x doesn't matter (subject <=> ChunkyPNG::Point.new(2, 0)).should == 1 # x doesn't matter end it "should return -1 if the x coordinate is smaller and y is the same" do (subject <=> ChunkyPNG::Point.new(2, 2)).should == -1 end it "should return 1 if the x coordinate is larger and y is the same" do (subject <=> ChunkyPNG::Point.new(0, 2)).should == 1 end end end describe 'ChunkyPNG.Point' do subject { ChunkyPNG::Point.new(1, 2) } it "should create a point from a 2-item array" do ChunkyPNG::Point([1, 2]).should == subject ChunkyPNG::Point(['1', '2']).should == subject end it "should create a point from a hash with x and y keys" do ChunkyPNG::Point(:x => 1, :y => 2).should == subject ChunkyPNG::Point('x' => '1', 'y' => '2').should == subject end it "should create a point from a point-like string" do [ ChunkyPNG::Point('1,2'), ChunkyPNG::Point('1 2'), ChunkyPNG::Point('(1 , 2)'), ChunkyPNG::Point("{1,\t2}"), ChunkyPNG::Point("[1 2}"), ].all? { |point| point == subject } end it "should raise an exception if the input is not understood" do lambda { ChunkyPNG::Point(Object.new) }.should raise_error(ChunkyPNG::ExpectationFailed) lambda { ChunkyPNG::Point(1, 2, 3) }.should raise_error(ChunkyPNG::ExpectationFailed) end end