12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2018 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 idna
- import (
- "fmt"
- "strings"
- "testing"
- "golang.org/x/text/internal/gen"
- "golang.org/x/text/internal/testtext"
- "golang.org/x/text/internal/ucd"
- )
- func TestConformance(t *testing.T) {
- testtext.SkipIfNotLong(t)
- r := gen.OpenUnicodeFile("idna", "10.0.0", "IdnaTest.txt")
- defer r.Close()
- section := "main"
- p := ucd.New(r)
- transitional := New(Transitional(true), VerifyDNSLength(true), BidiRule(), MapForLookup())
- nonTransitional := New(VerifyDNSLength(true), BidiRule(), MapForLookup())
- for p.Next() {
- // What to test
- profiles := []*Profile{}
- switch p.String(0) {
- case "T":
- profiles = append(profiles, transitional)
- case "N":
- profiles = append(profiles, nonTransitional)
- case "B":
- profiles = append(profiles, transitional)
- profiles = append(profiles, nonTransitional)
- }
- src := unescape(p.String(1))
- wantToUnicode := unescape(p.String(2))
- if wantToUnicode == "" {
- wantToUnicode = src
- }
- wantToASCII := unescape(p.String(3))
- if wantToASCII == "" {
- wantToASCII = wantToUnicode
- }
- wantErrToUnicode := ""
- if strings.HasPrefix(wantToUnicode, "[") {
- wantErrToUnicode = wantToUnicode
- wantToUnicode = ""
- }
- wantErrToASCII := ""
- if strings.HasPrefix(wantToASCII, "[") {
- wantErrToASCII = wantToASCII
- wantToASCII = ""
- }
- // TODO: also do IDNA tests.
- // invalidInIDNA2008 := p.String(4) == "NV8"
- for _, p := range profiles {
- name := fmt.Sprintf("%s:%s", section, p)
- doTest(t, p.ToUnicode, name+":ToUnicode", src, wantToUnicode, wantErrToUnicode)
- doTest(t, p.ToASCII, name+":ToASCII", src, wantToASCII, wantErrToASCII)
- }
- }
- }
|