spec/table_spec.rb in visionmedia-terminal-table-1.1.0 vs spec/table_spec.rb in visionmedia-terminal-table-1.2.0

- old
+ new

@@ -3,70 +3,70 @@ module Terminal describe Table do before :each do @table = Table.new end - + it "should select columns" do @table << ['foo', 'bar'] @table << ['big foo', 'big foo bar'] @table.column(1).should == ['bar', 'big foo bar'] end - + it "should count columns" do @table << [1, 2, 3] @table.number_of_columns.should == 3 end - + it "should iterate columns" do @table << [1, 2, 3] @table << [4, 5, 6] @table.columns.should == [[1, 4], [2, 5], [3, 6]] end - + it "should select columns" do @table.headings = ['one', 'two'] @table << ['foo', 'bar'] @table << ['big foo', 'big foo bar'] @table.column(1).should == ['bar', 'big foo bar'] end - + it "should select columns when using hashes" do @table.headings = ['one', 'two'] @table.rows = [[{ :value => 'a', :align => :left }, 1], ['b', 2], ['c', 3]] @table.column(0).should == [{ :value => 'a', :align => :left }, 'b', 'c'] end - + it "should select largest cell in a column" do @table << ['foo', 'bar'] @table << ['big foo', 'big foo bar'] @table.largest_cell_in_column(1).should == 'big foo bar' end - + it "should find column length" do @table << ['foo', 'bar', 'a'] @table << ['big foo', 'big foo bar'] @table.length_of_column(1).should == 11 end - + it "should find column length with headings" do @table.headings = ['one', 'super long heading'] @table << ['foo', 'bar', 'a'] @table << ['big foo', 'big foo bar'] @table.length_of_column(1).should == 18 end - + it "should render seperators" do @table.headings = ['Char', 'Num'] @table << ['a', 1] @table.seperator.should == '+------+-----+' end - + it "should bitch and complain when you have no rows" do lambda { @table.render }.should raise_error(Terminal::Table::Error) end - + it "should render properly" do @table.headings = ['Char', 'Num'] @table << ['a', 1] @table << ['b', 2] @table << ['c', 3] @@ -78,11 +78,11 @@ | b | 2 | | c | 3 | +------+-----+ EOF end - + it "should render properly without headings" do @table << ['a', 1] @table << ['b', 2] @table << ['c', 3] @table.render.should == <<-EOF.deindent @@ -91,11 +91,11 @@ | b | 2 | | c | 3 | +---+---+ EOF end - + it "should render properly using block syntax" do table = Terminal::Table.new do |t| t << ['a', 1] t << ['b', 2] t << ['c', 3] @@ -106,11 +106,11 @@ | b | 2 | | c | 3 | +---+---+ EOF end - + it "should render properly using instance_eval block syntax" do table = Terminal::Table.new do add_row ['a', 1] add_row ['b', 2] add_row ['c', 3] @@ -121,11 +121,11 @@ | b | 2 | | c | 3 | +---+---+ EOF end - + it "should allows a hash of options for creation" do headings = ['Char', 'Num'] rows = [['a', 1], ['b', 2], ['c', 3]] Terminal::Table.new(:rows => rows, :headings => headings).render.should == <<-EOF.deindent +------+-----+ @@ -135,11 +135,11 @@ | b | 2 | | c | 3 | +------+-----+ EOF end - + it "should flex for large cells" do @table.headings = ['Just some characters', 'Num'] @table.rows = [['a', 1], ['b', 2], ['c', 3]] @table.render.should == <<-EOF.deindent +----------------------+-----+ @@ -149,14 +149,14 @@ | b | 2 | | c | 3 | +----------------------+-----+ EOF end - + it "should allow alignment of headings and cells" do - @table.headings = ['Characters', ['Nums', :right ]] - @table << [['a', :center ], 1] + @table.headings = ['Characters', {:value => 'Nums', :alignment => :right} ] + @table << [{:value => 'a', :alignment => :center}, 1] @table << ['b', 222222222222222] @table << ['c', 3] @table.render.should == <<-EOF.deindent +------------+-----------------+ | Characters | Nums | @@ -164,16 +164,16 @@ | a | 1 | | b | 222222222222222 | | c | 3 | +------------+-----------------+ EOF - + end - + it "should align columns, but allow specifics to remain" do @table.headings = ['Just some characters', 'Num'] - @table.rows = [[['a', :left], 1], ['b', 2], ['c', 3]] + @table.rows = [[{:value => 'a', :alignment => :left}, 1], ['b', 2], ['c', 3]] @table.align_column 0, :center @table.align_column 1, :right @table.render.should == <<-EOF.deindent +----------------------+-----+ | Just some characters | Num | @@ -182,41 +182,41 @@ | b | 2 | | c | 3 | +----------------------+-----+ EOF end - + describe "#==" do it "should be equal to itself" do t = Table.new t.should == t end it "should be equal with two empty tables" do table_one = Table.new table_two = Table.new - + table_one.should == table_two table_two.should == table_one end it "should not be equal with different headings" do table_one = Table.new table_two = Table.new table_one.headings << "a" - + table_one.should_not == table_two table_two.should_not == table_one end it "should not be equal with different rows" do table_one = Table.new table_two = Table.new table_one.rows << "a" - + table_one.should_not == table_two table_two.should_not == table_one end it "should not be equal if the other object does not respond_to? :headings" do @@ -230,8 +230,67 @@ table_one = Table.new table_two = Object.new table_two.stub!(:rows).and_return([]) table_one.should_not == table_two end + end + + it "should handle colspan inside heading" do + @table.headings = ['one', { :value => 'two', :alignment => :center, :colspan => 2}] + @table.rows = [['a', 1, 2], ['b', 3, 4], ['c', 3, 4]] + @table.render.should == <<-EOF.deindent + +-----+-----+---+ + | one | two | + +-----+-----+---+ + | a | 1 | 2 | + | b | 3 | 4 | + | c | 3 | 4 | + +-----+-----+---+ + EOF + end + + it "should handle colspan inside cells" do + @table.headings = ['one', 'two', 'three'] + @table.rows = [['a', 1, 2], ['b', 3, 4], ['c', {:value => "joined", :colspan => 2,:alignment => :center}]] + @table.render.should == <<-EOF.deindent + +-----+--------+-------+ + | one | two | three | + +-----+--------+-------+ + | a | 1 | 2 | + | b | 3 | 4 | + | c | joined | + +-----+--------+-------+ + EOF + end + + + it "should handle colspan 1" do + @table.headings = ['name', { :value => 'values', :colspan => 1}] + @table.rows = [['a', 1], ['b', 4], ['c', 7]] + @table.render.should == <<-EOF.deindent + +------+--------+ + | name | values | + +------+--------+ + | a | 1 | + | b | 4 | + | c | 7 | + +------+--------+ + EOF + end + + it "should handle big colspan" do + @table.headings = ['name', { :value => 'values', :alignment => :right, :colspan => 3}] + @table.headings = ['name', { :value => 'values', :colspan => 3}] + @table.rows = [['a', 1, 2, 3], ['b', 4, 5, 6], ['c', 7, 8, 9]] + + @table.render.should == <<-EOF.deindent + +------+--------+---+---+ + | name | values | + +------+--------+---+---+ + | a | 1 | 2 | 3 | + | b | 4 | 5 | 6 | + | c | 7 | 8 | 9 | + +------+--------+---+---+ + EOF end end end