github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/net/http2/ascii_test.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package http2 6 7 import "testing" 8 9 func TestASCIIEqualFold(t *testing.T) { 10 var tests = []struct { 11 name string 12 a, b string 13 want bool 14 }{ 15 { 16 name: "empty", 17 want: true, 18 }, 19 { 20 name: "simple match", 21 a: "CHUNKED", 22 b: "chunked", 23 want: true, 24 }, 25 { 26 name: "same string", 27 a: "chunked", 28 b: "chunked", 29 want: true, 30 }, 31 { 32 name: "Unicode Kelvin symbol", 33 a: "chunKed", // This "K" is 'KELVIN SIGN' (\u212A) 34 b: "chunked", 35 want: false, 36 }, 37 } 38 for _, tt := range tests { 39 t.Run(tt.name, func(t *testing.T) { 40 if got := asciiEqualFold(tt.a, tt.b); got != tt.want { 41 t.Errorf("AsciiEqualFold(%q,%q): got %v want %v", tt.a, tt.b, got, tt.want) 42 } 43 }) 44 } 45 } 46 47 func TestIsASCIIPrint(t *testing.T) { 48 var tests = []struct { 49 name string 50 in string 51 want bool 52 }{ 53 { 54 name: "empty", 55 want: true, 56 }, 57 { 58 name: "ASCII low", 59 in: "This is a space: ' '", 60 want: true, 61 }, 62 { 63 name: "ASCII high", 64 in: "This is a tilde: '~'", 65 want: true, 66 }, 67 { 68 name: "ASCII low non-print", 69 in: "This is a unit separator: \x1F", 70 want: false, 71 }, 72 { 73 name: "Ascii high non-print", 74 in: "This is a Delete: \x7F", 75 want: false, 76 }, 77 { 78 name: "Unicode letter", 79 in: "Today it's 280K outside: it's freezing!", // This "K" is 'KELVIN SIGN' (\u212A) 80 want: false, 81 }, 82 { 83 name: "Unicode emoji", 84 in: "Gophers like 🧀", 85 want: false, 86 }, 87 } 88 for _, tt := range tests { 89 t.Run(tt.name, func(t *testing.T) { 90 if got := isASCIIPrint(tt.in); got != tt.want { 91 t.Errorf("IsASCIIPrint(%q): got %v want %v", tt.in, got, tt.want) 92 } 93 }) 94 } 95 }