package controller import "testing" func TestValidateStrictJSONEncoding(t *testing.T) { tests := []struct { name string body []byte wantErr bool }{ {"обычный UTF-8", []byte(`{"password":"пароль"}`), false}, {"настоящий U+FFFD", []byte(`{"password":"abcde�"}`), false}, {"валидная surrogate pair", []byte(`{"value":"\uD83D\uDE00"}`), false}, {"экранированный обратный слеш", []byte(`{"value":"\\uD800"}`), false}, {"байт FF", []byte{'{', '"', 'x', '"', ':', '"', 0xFF, '"', '}'}, true}, {"оборванный UTF-8", []byte{'{', '"', 'x', '"', ':', '"', 0xC3, '"', '}'}, true}, {"UTF-8 суррогата", []byte{'{', '"', 'x', '"', ':', '"', 0xED, 0xA0, 0x80, '"', '}'}, true}, {"непарный старший", []byte(`{"value":"\uD800"}`), true}, {"старший перед обычным", []byte(`{"value":"\uD800\u0041"}`), true}, {"непарный младший", []byte(`{"value":"\uDC00"}`), true}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { gotErr := validateStrictJSONEncoding(test.body) != nil if gotErr != test.wantErr { t.Fatalf("ошибка=%v, ожидалась=%v", gotErr, test.wantErr) } }) } }