class TestCase::Lib::StringBuffer {
use StringBuffer;
use Fn;
static method read_write_value : int () {
my $buffer = StringBuffer->new;
$buffer->push("abc");
my $value = $buffer->value;
my $length = $buffer->length;
$value->[0] = 'f';
my $substr = Fn->substr($value, 0, $length);
unless ($substr eq "fbc") {
return 0;
}
return 1;
}
static method test_new : int () {
my $buffer = StringBuffer->new;
unless ($buffer isa StringBuffer) {
return 0;
}
unless ($buffer->length == 0) {
return 0;
}
return 1;
}
static method test_length : int () {
unless (StringBuffer->new->length == 0) {
return 0;
}
my $buffer2 = StringBuffer->new;
$buffer2->push("a");
unless ($buffer2->length == 1) {
return 0;
}
return 1;
}
static method test_push : int () {
my $buffer = StringBuffer->new;
$buffer->push ("abc");
unless ($buffer->to_string eq "abc") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push ("de");
unless ($buffer->to_string eq "abcde") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push ("f");
unless ($buffer->to_string eq "abcdef") {
warn("actual string: " . $buffer->to_string);
return 0;
}
return 1;
}
static method test_push_char : int () {
my $buffer = StringBuffer->new;
$buffer->push_char('a');
unless ($buffer->to_string eq "a") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push_char('b');
unless ($buffer->to_string eq "ab") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push_char('c');
unless ($buffer->to_string eq "abc") {
warn("actual string: " . $buffer->to_string);
return 0;
}
return 1;
}
static method test_append_copy_on_write : int () {
warn("TODO: append copy-on-write test is not implemented yet");
return 0;
}
static method test_to_string : int () {
{
my $minimal_buf = StringBuffer->new;
$minimal_buf->push ("a");
unless ($minimal_buf->to_string eq "a") {
return 0;
}
}
{
my $large_buf = StringBuffer->new;
$large_buf->push ("b");
unless ($large_buf->to_string eq "b") {
return 0;
}
}
return 1;
}
}