// Copyright 2021 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 http2

import "testing"

func TestASCIIEqualFold(t *testing.T) {
	var tests = []struct {
		name string
		a, b string
		want bool
	}{
		{
			name: "empty",
			want: true,
		},
		{
			name: "simple match",
			a:    "CHUNKED",
			b:    "chunked",
			want: true,
		},
		{
			name: "same string",
			a:    "chunked",
			b:    "chunked",
			want: true,
		},
		{
			name: "Unicode Kelvin symbol",
			a:    "chunKed", // This "K" is 'KELVIN SIGN' (\u212A)
			b:    "chunked",
			want: false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := asciiEqualFold(tt.a, tt.b); got != tt.want {
				t.Errorf("AsciiEqualFold(%q,%q): got %v want %v", tt.a, tt.b, got, tt.want)
			}
		})
	}
}

func TestIsASCIIPrint(t *testing.T) {
	var tests = []struct {
		name string
		in   string
		want bool
	}{
		{
			name: "empty",
			want: true,
		},
		{
			name: "ASCII low",
			in:   "This is a space: ' '",
			want: true,
		},
		{
			name: "ASCII high",
			in:   "This is a tilde: '~'",
			want: true,
		},
		{
			name: "ASCII low non-print",
			in:   "This is a unit separator: \x1F",
			want: false,
		},
		{
			name: "Ascii high non-print",
			in:   "This is a Delete: \x7F",
			want: false,
		},
		{
			name: "Unicode letter",
			in:   "Today it's 280K outside: it's freezing!", // This "K" is 'KELVIN SIGN' (\u212A)
			want: false,
		},
		{
			name: "Unicode emoji",
			in:   "Gophers like 🧀",
			want: false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := isASCIIPrint(tt.in); got != tt.want {
				t.Errorf("IsASCIIPrint(%q): got %v want %v", tt.in, got, tt.want)
			}
		})
	}
}
