| // 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. | |
| //go:build go1.10 | |
| 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) | |
| } | |
| } | |
| } |