summaryrefslogtreecommitdiff
path: root/src/lib/strings_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/strings_test.go')
-rw-r--r--src/lib/strings_test.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/lib/strings_test.go b/src/lib/strings_test.go
new file mode 100644
index 000000000..a7b63738b
--- /dev/null
+++ b/src/lib/strings_test.go
@@ -0,0 +1,99 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package strings
+
+import (
+ "strings";
+ "testing";
+)
+
+func eq(a, b *[]string) bool {
+ if len(a) != len(b) {
+ return false;
+ }
+ for i := 0; i < len(a); i++ {
+ if a[i] != b[i] {
+ return false;
+ }
+ }
+ return true;
+}
+
+var abcd = "abcd";
+var faces = "☺☻☹";
+var commas = "1,2,3,4";
+var dots = "1....2....3....4";
+
+type ExplodeTest struct {
+ s string;
+ a *[]string;
+}
+var explodetests = []ExplodeTest {
+ ExplodeTest{ abcd, &[]string{"a", "b", "c", "d"} },
+ ExplodeTest{ faces, &[]string{"☺", "☻", "☹" } },
+}
+export func TestExplode(t *testing.T) {
+ for i := 0; i < len(explodetests); i++ {
+ tt := explodetests[i];
+ a := explode(tt.s);
+ if !eq(a, tt.a) {
+ t.Errorf("Explode(%q) = %v; want %v", tt.s, a, tt.a);
+ continue;
+ }
+ s := join(a, "");
+ if s != tt.s {
+ t.Errorf(`Join(Explode(%q), "") = %q`, tt.s, s);
+ }
+ }
+}
+
+type SplitTest struct {
+ s string;
+ sep string;
+ a *[]string;
+}
+var splittests = []SplitTest {
+ SplitTest{ abcd, "a", &[]string{"", "bcd"} },
+ SplitTest{ abcd, "z", &[]string{"abcd"} },
+ SplitTest{ abcd, "", &[]string{"a", "b", "c", "d"} },
+ SplitTest{ commas, ",", &[]string{"1", "2", "3", "4"} },
+ SplitTest{ dots, "...", &[]string{"1", ".2", ".3", ".4"} },
+ SplitTest{ faces, "☹", &[]string{"☺☻", ""} },
+ SplitTest{ faces, "~", &[]string{faces} },
+ SplitTest{ faces, "", &[]string{"☺", "☻", "☹"} },
+}
+export func TestSplit(t *testing.T) {
+ for i := 0; i < len(splittests); i++ {
+ tt := splittests[i];
+ a := split(tt.s, tt.sep);
+ if !eq(a, tt.a) {
+ t.Errorf("Split(%q, %q) = %v; want %v", tt.s, tt.sep, a, tt.a);
+ continue;
+ }
+ s := join(a, tt.sep);
+ if s != tt.s {
+ t.Errorf("Join(Split(%q, %q), %q) = %q", tt.s, tt.sep, tt.sep, s);
+ }
+ }
+}
+
+// TODO: utflen shouldn't even be in strings.
+type UtflenTest struct {
+ in string;
+ out int;
+}
+var utflentests = []UtflenTest {
+ UtflenTest{ abcd, 4 },
+ UtflenTest{ faces, 3 },
+ UtflenTest{ commas, 7 },
+}
+export func TestUtflen(t *testing.T) {
+ for i := 0; i < len(utflentests); i++ {
+ tt := utflentests[i];
+ if out := strings.utflen(tt.in); out != tt.out {
+ t.Errorf("utflen(%q) = %d, want %d", tt.in, out, tt.out);
+ }
+ }
+}