summaryrefslogtreecommitdiff
path: root/src/pkg/strings/strings_test.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-06-09 09:53:44 -0700
committerRob Pike <r@golang.org>2009-06-09 09:53:44 -0700
commit7249ea4df2b4f12a4e7ed446f270cea87e4ffd34 (patch)
tree7032a11d0cac2ae4d3e90f7a189b575b5a50f848 /src/pkg/strings/strings_test.go
parentacf6ef7a82b3fe61516a1bac4563706552bdf078 (diff)
downloadgolang-7249ea4df2b4f12a4e7ed446f270cea87e4ffd34.tar.gz
mv src/lib to src/pkg
tests: all.bash passes, gobuild still works, godoc still works. R=rsc OCL=30096 CL=30102
Diffstat (limited to 'src/pkg/strings/strings_test.go')
-rw-r--r--src/pkg/strings/strings_test.go133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/pkg/strings/strings_test.go b/src/pkg/strings/strings_test.go
new file mode 100644
index 000000000..05e662032
--- /dev/null
+++ b/src/pkg/strings/strings_test.go
@@ -0,0 +1,133 @@
+// 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{"☺", "☻", "☹" } },
+}
+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{"☺", "☻", "☹"} },
+}
+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);
+ }
+ }
+}
+
+// Test case for any function which accepts and returns a single string.
+type StringTest struct {
+ in, out string;
+}
+
+// Execute f on each test case. funcName should be the name of f; it's used
+// in failure reports.
+func runStringTests(t *testing.T, f func(string) string, funcName string, testCases []StringTest) {
+ for i, tc := range testCases {
+ actual := f(tc.in);
+ if (actual != tc.out) {
+ t.Errorf("%s(%q) = %q; want %q", funcName, tc.in, actual, tc.out);
+ }
+ }
+}
+
+var upperASCIITests = []StringTest {
+ StringTest{"", ""},
+ StringTest{"abc", "ABC"},
+ StringTest{"AbC123", "ABC123"},
+ StringTest{"azAZ09_", "AZAZ09_"}
+}
+
+var lowerASCIITests = []StringTest {
+ StringTest{"", ""},
+ StringTest{"abc", "abc"},
+ StringTest{"AbC123", "abc123"},
+ StringTest{"azAZ09_", "azaz09_"}
+}
+
+var trimSpaceASCIITests = []StringTest {
+ StringTest{"", ""},
+ StringTest{"abc", "abc"},
+ StringTest{" ", ""},
+ StringTest{" \t\r\n \t\t\r\r\n\n ", ""},
+ StringTest{" \t\r\n x\t\t\r\r\n\n ", "x"},
+ StringTest{" \t\r\n x\t\t\r\r\ny\n ", "x\t\t\r\r\ny"},
+ StringTest{"1 \t\r\n2", "1 \t\r\n2"},
+}
+
+func TestUpperASCII(t *testing.T) {
+ runStringTests(t, UpperASCII, "UpperASCII", upperASCIITests);
+}
+
+func TestLowerASCII(t *testing.T) {
+ runStringTests(t, LowerASCII, "LowerASCII", lowerASCIITests);
+}
+
+func TestTrimSpaceASCII(t *testing.T) {
+ runStringTests(t, TrimSpaceASCII, "TrimSpaceASCII", trimSpaceASCIITests);
+}
+