| // 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 strconv_test |
| |
| import ( |
| "os"; |
| . "strconv"; |
| "testing"; |
| ) |
| |
| type quoteTest struct { |
| in string; |
| out string; |
| } |
| |
| var quotetests = []quoteTest { |
| quoteTest{ "\a\b\f\r\n\t\v", `"\a\b\f\r\n\t\v"` }, |
| quoteTest{ "\\", `"\\"` }, |
| quoteTest{ "abc\xffdef", `"abc\xffdef"` }, |
| quoteTest{ "\u263a", `"\u263a"` }, |
| quoteTest{ "\U0010ffff", `"\U0010ffff"` }, |
| quoteTest{ "\x04", `"\x04"` }, |
| } |
| |
| func TestQuote(t *testing.T) { |
| for i := 0; i < len(quotetests); i++ { |
| tt := quotetests[i]; |
| if out := Quote(tt.in); out != tt.out { |
| t.Errorf("Quote(%s) = %s, want %s", tt.in, out, tt.out); |
| } |
| } |
| } |
| |
| type canBackquoteTest struct { |
| in string; |
| out bool; |
| } |
| |
| var canbackquotetests = []canBackquoteTest { |
| canBackquoteTest{ "`", false }, |
| canBackquoteTest{ string(0), false }, |
| canBackquoteTest{ string(1), false }, |
| canBackquoteTest{ string(2), false }, |
| canBackquoteTest{ string(3), false }, |
| canBackquoteTest{ string(4), false }, |
| canBackquoteTest{ string(5), false }, |
| canBackquoteTest{ string(6), false }, |
| canBackquoteTest{ string(7), false }, |
| canBackquoteTest{ string(8), false }, |
| canBackquoteTest{ string(9), true }, // \t |
| canBackquoteTest{ string(10), false }, |
| canBackquoteTest{ string(11), false }, |
| canBackquoteTest{ string(12), false }, |
| canBackquoteTest{ string(13), false }, |
| canBackquoteTest{ string(14), false }, |
| canBackquoteTest{ string(15), false }, |
| canBackquoteTest{ string(16), false }, |
| canBackquoteTest{ string(17), false }, |
| canBackquoteTest{ string(18), false }, |
| canBackquoteTest{ string(19), false }, |
| canBackquoteTest{ string(20), false }, |
| canBackquoteTest{ string(21), false }, |
| canBackquoteTest{ string(22), false }, |
| canBackquoteTest{ string(23), false }, |
| canBackquoteTest{ string(24), false }, |
| canBackquoteTest{ string(25), false }, |
| canBackquoteTest{ string(26), false }, |
| canBackquoteTest{ string(27), false }, |
| canBackquoteTest{ string(28), false }, |
| canBackquoteTest{ string(29), false }, |
| canBackquoteTest{ string(30), false }, |
| canBackquoteTest{ string(31), false }, |
| canBackquoteTest{ `' !"#$%&'()*+,-./:;<=>?@[\]^_{|}~`, true }, |
| canBackquoteTest{ `0123456789`, true }, |
| canBackquoteTest{ `ABCDEFGHIJKLMNOPQRSTUVWXYZ`, true }, |
| canBackquoteTest{ `abcdefghijklmnopqrstuvwxyz`, true }, |
| canBackquoteTest{ `☺`, true }, |
| } |
| |
| func TestCanBackquote(t *testing.T) { |
| for i := 0; i < len(canbackquotetests); i++ { |
| tt := canbackquotetests[i]; |
| if out := CanBackquote(tt.in); out != tt.out { |
| t.Errorf("CanBackquote(%q) = %v, want %v", tt.in, out, tt.out); |
| } |
| } |
| } |
| |
| var unquotetests = []quoteTest { |
| quoteTest{ `""`, "" }, |
| quoteTest{ `"a"`, "a" }, |
| quoteTest{ `"abc"`, "abc" }, |
| quoteTest{ `"☺"`, "☺" }, |
| quoteTest{ `"hello world"`, "hello world" }, |
| quoteTest{ `"\xFF"`, "\xFF" }, |
| quoteTest{ `"\377"`, "\377" }, |
| quoteTest{ `"\u1234"`, "\u1234" }, |
| quoteTest{ `"\U00010111"`, "\U00010111" }, |
| quoteTest{ `"\U0001011111"`, "\U0001011111" }, |
| quoteTest{ `"\a\b\f\n\r\t\v\\\""`, "\a\b\f\n\r\t\v\\\"" }, |
| quoteTest{ `"'"`, "'" }, |
| |
| quoteTest{ `'a'`, "a" }, |
| quoteTest{ `'☹'`, "☹" }, |
| quoteTest{ `'\a'`, "\a" }, |
| quoteTest{ `'\x10'`, "\x10" }, |
| quoteTest{ `'\377'`, "\377" }, |
| quoteTest{ `'\u1234'`, "\u1234" }, |
| quoteTest{ `'\U00010111'`, "\U00010111" }, |
| quoteTest{ `'\t'`, "\t" }, |
| quoteTest{ `' '`, " " }, |
| quoteTest{ `'\''`, "'" }, |
| quoteTest{ `'"'`, "\"" }, |
| |
| quoteTest{ "``", `` }, |
| quoteTest{ "`a`", `a` }, |
| quoteTest{ "`abc`", `abc` }, |
| quoteTest{ "`☺`", `☺` }, |
| quoteTest{ "`hello world`", `hello world` }, |
| quoteTest{ "`\\xFF`", `\xFF` }, |
| quoteTest{ "`\\377`", `\377` }, |
| quoteTest{ "`\\`", `\` }, |
| quoteTest{ "` `", ` ` }, |
| quoteTest{ "` `", ` ` }, |
| } |
| |
| var misquoted = []string { |
| ``, |
| `"`, |
| `"a`, |
| `"'`, |
| `b"`, |
| `"\"`, |
| `'\'`, |
| `'ab'`, |
| `"\x1!"`, |
| `"\U12345678"`, |
| `"\z"`, |
| "`", |
| "`xxx", |
| "`\"", |
| `"\'"`, |
| `'\"'`, |
| } |
| |
| func TestUnquote(t *testing.T) { |
| for i := 0; i < len(unquotetests); i++ { |
| tt := unquotetests[i]; |
| if out, err := Unquote(tt.in); err != nil && out != tt.out { |
| t.Errorf("Unquote(%#q) = %q, %v want %q, nil", tt.in, out, err, tt.out); |
| } |
| } |
| |
| // run the quote tests too, backward |
| for i := 0; i < len(quotetests); i++ { |
| tt := quotetests[i]; |
| if in, err := Unquote(tt.out); in != tt.in { |
| t.Errorf("Unquote(%#q) = %q, %v, want %q, nil", tt.out, in, err, tt.in); |
| } |
| } |
| |
| for i := 0; i < len(misquoted); i++ { |
| s := misquoted[i]; |
| if out, err := Unquote(s); out != "" || err != os.EINVAL { |
| t.Errorf("Unquote(%#q) = %q, %v want %q, %v", s, out, err, "", os.EINVAL); |
| } |
| } |
| } |