# -*- coding: utf-8 -*- $: << File.dirname(__FILE__) require 'helpers' class TestTextBuffer < Test::Unit::TestCase LINES = %w[123 456] def buffer (str = nil) str = LINES.join("\n") unless str str = str.dup if String === str Spacy::TextBuffer.new str end def test_new () assert_equal LINES.join("\n"), buffer.to_s assert_equal '123', buffer(123).to_s end def test_insert () assert_equal "x123\n456", buffer.tap{|b| b.insert 0, 'x'}.to_s assert_equal "1x23\n456", buffer.tap{|b| b.insert 1, 'x'}.to_s assert_equal "123x\n456", buffer.tap{|b| b.insert 3, 'x'}.to_s assert_equal "123\nx456", buffer.tap{|b| b.insert 4, 'x'}.to_s assert_equal "1a\nb23\n456", buffer.tap{|b| b.insert 1, "a\nb"}.to_s assert_equal "123\n456x", buffer.tap{|b| b.insert b.last, 'x'}.to_s assert_raise(RangeError) {buffer.tap{|b| b.insert -1, 'x'}} assert_raise(RangeError) {buffer.tap{|b| b.insert b.last + 1, 'x'}} end def test_erase () assert_equal "23\n456", buffer.erase(0).to_s assert_equal "123\n456", buffer.erase(0, 0).to_s assert_equal "23\n456", buffer.erase(0, 1).to_s assert_equal "3\n456", buffer.erase(0, 2).to_s assert_equal "\n456", buffer.erase(0, 3).to_s assert_equal "456", buffer.erase(0, 4).to_s assert_equal "56", buffer.erase(0, 5).to_s assert_equal "13\n456", buffer.erase(1, 2).to_s assert_equal "\n456", buffer.erase(3, 0).to_s assert_equal "123\n45", buffer.tap{|b| b.erase b.last - 1}.to_s assert_equal "123\n456", buffer.tap{|b| b.erase b.last, b.last}.to_s assert_raise(RangeError) {buffer.tap{|b| b.erase -1}} assert_raise(RangeError) {buffer.tap{|b| b.erase b.last}} assert_raise(RangeError) {buffer.tap{|b| b.erase -1, 0}} assert_raise(RangeError) {buffer.tap{|b| b.erase 0, b.last + 1}} assert_raise(RangeError) {buffer.tap{|b| b.erase -1, b.last + 1}} end def test_nrow () assert_equal LINES.size, buffer.nrow end def test_ncolumn () assert_equal LINES[0].size + 1, buffer.ncolumn(0) assert_equal LINES[1].size + 1, buffer.ncolumn(1) assert_raise(RangeError) {buffer.ncolumn(-1)} assert_raise(RangeError) {buffer.ncolumn(2)} end def test_last () assert_equal LINES.join("\n").size, buffer.last end def test_to_a () assert_equal LINES.map{|s| Spacy::TextLine.new s}, buffer.to_a end def test_to_s () assert_equal LINES.join("\n"), buffer.to_s assert_equal '', buffer('').to_s end def test_each () buffer.each.with_index do |line, index| assert_equal LINES[index], line.to_s end end end# TestTextBuffer