Files
sdk/tests/corelib_strong/string_buffer_test.dart
T
Bob Nystrom 6c757957db Move the dev_compiler strong mode tests into sdk/tests/.
DDC's codegen test copies those files to a local "gen" directory so
that it can do stuff like splitting out the multitests before it
compiles them to JS.

I left all of that alone, so the rest of DDC's test infrastructure is
unchanged. The very first step that builds the "gen" directory just
copies from sdk/tests/..._strong/... instead and the rest is good to go.

I did not move not_yet_strong_tests.dart somewhere more accessible yet
because I'm not sure if kernel needs it or where it should go.

I did not create any status files because DDC doesn't need them and
there are no test suites for the new directories for the other
platforms.
2016-12-09 11:09:55 -08:00

237 lines
5.7 KiB
Dart

// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
// TODO(srdjan): Move StringBuffer to visible names.
void testConstructor() {
StringBuffer bf = new StringBuffer("");
testBufferLength(0, bf);
bf = new StringBuffer("abc");
testBufferLength(3, bf);
Expect.equals("abc", bf.toString());
bf = new StringBuffer("\x00");
}
void testWrite() {
StringBuffer bf = new StringBuffer("");
Expect.equals(true, bf.isEmpty);
bf.write("a");
testBufferLength(1, bf);
Expect.equals("a", bf.toString());
bf = new StringBuffer("");
bf.write("a");
bf.write("b");
Expect.equals("ab", bf.toString());
bf = new StringBuffer("abc");
bf.write("d");
bf.write("e");
bf.write("f");
bf.write("g");
bf.write("h");
bf.write("i");
bf.write("j");
bf.write("k");
bf.write("l");
bf.write("m");
bf.write("n");
bf.write("o");
bf.write("p");
bf.write("q");
bf.write("r");
bf.write("s");
bf.write("t");
bf.write("u");
bf.write("v");
bf.write("w");
bf.write("x");
bf.write("y");
bf.write("z");
bf.write("\n");
bf.write("thequickbrownfoxjumpsoverthelazydog");
Expect.equals("abcdefghijklmnopqrstuvwxyz\n"
"thequickbrownfoxjumpsoverthelazydog",
bf.toString());
bf = new StringBuffer("");
for (int i = 0; i < 100000; i++) {
bf.write('');
bf.write("");
}
Expect.equals("", bf.toString());
}
void testLength() {
StringBuffer bf = new StringBuffer("");
testBufferLength(0, bf);
bf.write("foo");
testBufferLength(3, bf);
bf.write("bar");
testBufferLength(6, bf);
bf.write("");
testBufferLength(6, bf);
}
void testIsEmpty() {
StringBuffer bf = new StringBuffer("");
Expect.equals(true, bf.isEmpty);
bf.write("foo");
Expect.equals(false, bf.isEmpty);
}
void testWriteAll() {
StringBuffer bf = new StringBuffer("");
bf.writeAll(["foo", "bar", "a", "b", "c"]);
Expect.equals("foobarabc", bf.toString());
bf.writeAll([]);
Expect.equals("foobarabc", bf.toString());
bf.writeAll(["", "", ""]);
Expect.equals("foobarabc", bf.toString());
bf.writeAll(["", "", ""], "");
Expect.equals("foobarabc", bf.toString());
StringBuffer bf2 = new StringBuffer("");
bf2.writeAll([], "s");
Expect.equals("", bf2.toString());
StringBuffer bf3 = new StringBuffer("");
bf3.writeAll(["a"], "s");
Expect.equals("a", bf3.toString());
StringBuffer bf4 = new StringBuffer("");
bf4.writeAll(["a", "b"], "s");
Expect.equals("asb", bf4.toString());
}
void testWriteAll2() {
// Passing `null` for separator is an error that is checked when the iterable
// is not empty. This is not specified in the documentation but we want
// implementations to be consistent.
StringBuffer bf1 = new StringBuffer("");
bf1.writeAll([], null);
Expect.equals("", bf1.toString());
StringBuffer bf2 = new StringBuffer("");
Expect.throws(() { bf2.writeAll([1], null); });
}
void testWriteln() {
StringBuffer bf1 = new StringBuffer("");
bf1.writeln("Hello");
Expect.equals("Hello\n", bf1.toString());
StringBuffer bf2 = new StringBuffer("");
bf2.writeln();
Expect.equals("\n", bf2.toString());
StringBuffer bf3 = new StringBuffer("");
bf3.writeln("\n");
bf3.writeln(null);
bf3.writeln(1);
Expect.equals("\n\nnull\n1\n", bf3.toString());
}
void testClear() {
StringBuffer bf = new StringBuffer("");
bf.write("foo");
bf.clear();
Expect.equals("", bf.toString());
testBufferLength(0, bf);
bf.write("bar");
Expect.equals("bar", bf.toString());
testBufferLength(3, bf);
bf.clear();
Expect.equals("", bf.toString());
testBufferLength(0, bf);
}
void testToString() {
StringBuffer bf = new StringBuffer("");
Expect.equals("", bf.toString());
bf = new StringBuffer("foo");
Expect.equals("foo", bf.toString());
bf = new StringBuffer("foo");
bf.write("bar");
Expect.equals("foobar", bf.toString());
}
void testChaining() {
StringBuffer bf = new StringBuffer("");
StringBuffer bf2 = new StringBuffer("");
bf2.write("bf2");
bf..write("foo")
..write("bar")
..write(bf2)
..write(bf2)
..write("toto");
Expect.equals("foobarbf2bf2toto", bf.toString());
}
void testWriteCharCode() {
StringBuffer bf1 = new StringBuffer();
StringBuffer bf2 = new StringBuffer();
bf1.write("a");
bf2.writeCharCode(0x61); // a
bf1.write("b");
bf2.writeCharCode(0x62); // b
bf1.write("c");
bf2.writeCharCode(0x63); // c
bf1.write(new String.fromCharCode(0xD823));
bf2.writeCharCode(0xD823);
bf1.write(new String.fromCharCode(0xDC23));
bf2.writeCharCode(0xDC23);
bf1.write("\u{1d49e}");
bf2.writeCharCode(0x1d49e);
bf1.write("\x00");
bf2.writeCharCode(0);
Expect.equals(bf1.toString(), bf2.toString());
Expect.equals("abc\u{18c23}\u{1d49e}\x00", bf2.toString());
// Mixing strings and char-codes.
bf1.clear();
bf1.write("abcde");
bf1.writeCharCode(0x61);
bf1.writeCharCode(0x62);
bf1.writeCharCode(0x63);
bf1.write("d");
bf1.writeCharCode(0x65);
Expect.equals("abcdeabcde", bf1.toString());
// Out-of-range character codes are not allowed.
Expect.throws(() { bf2.writeCharCode(-1); });
Expect.throws(() { bf2.writeCharCode(0x110000); });
}
void testBufferLength(int length, StringBuffer bf) {
Expect.equals(length, bf.length);
(length == 0 ? Expect.isTrue : Expect.isFalse)(bf.isEmpty);
(length != 0 ? Expect.isTrue : Expect.isFalse)(bf.isNotEmpty);
}
void main() {
testToString();
testConstructor();
testLength();
testIsEmpty();
testWrite();
testWriteCharCode();
testWriteAll();
testWriteAll2();
testWriteln();
testClear();
testChaining();
}