func TestConformance(t *testing.T) { testtext.SkipIfNotLong(t) r := gen.OpenUnicodeFile("idna", "", "IdnaTest.txt") defer r.Close() section := "main" started := false p := ucd.New(r, ucd.CommentHandler(func(s string) { if started { section = strings.ToLower(strings.Split(s, " ")[0]) } })) transitional := New(Transitional(true), VerifyDNSLength(true)) nonTransitional := New(VerifyDNSLength(true)) for p.Next() { started = true // 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) } } }
func TestConformance(t *testing.T) { testtext.SkipIfNotLong(t) r := gen.OpenUnicodeFile("idna", "", "IdnaTest.txt") defer r.Close() section := "main" started := false p := ucd.New(r, ucd.CommentHandler(func(s string) { if started { section = strings.ToLower(strings.Split(s, " ")[0]) } })) for p.Next() { started = true // 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)) if incorrectTests[src] { continue } wantToUnicode := unescape(p.String(2)) if wantToUnicode == "" { wantToUnicode = src } wantToASCII := unescape(p.String(3)) if wantToASCII == "" { wantToASCII = wantToUnicode } test := "err:" if strings.HasPrefix(wantToUnicode, "[") { test += strings.Replace(strings.Trim(wantToUnicode, "[]"), " ", "", -1) } if strings.HasPrefix(wantToASCII, "[") { test += strings.Replace(strings.Trim(wantToASCII, "[]"), " ", "", -1) } if test == "err:" { test = "ok" } // TODO: also do IDNA tests. // invalidInIDNA2008 := p.String(4) == "NV8" for _, p := range profiles { testtext.Run(t, fmt.Sprintf("%s:%s/%s/%+q", section, test, p, src), func(t *testing.T) { got, err := p.ToUnicode(src) wantErr := strings.HasPrefix(wantToUnicode, "[") gotErr := err != nil if wantErr { if gotErr != wantErr { t.Errorf(`ToUnicode:err got %v; want %v (%s)`, gotErr, wantErr, wantToUnicode) } } else if got != wantToUnicode || gotErr != wantErr { t.Errorf(`ToUnicode: got %+q, %v (%v); want %+q, %v`, got, gotErr, err, wantToUnicode, wantErr) } got, err = p.ToASCII(src) wantErr = strings.HasPrefix(wantToASCII, "[") gotErr = err != nil if wantErr { if gotErr != wantErr { t.Errorf(`ToASCII:err got %v; want %v (%s)`, gotErr, wantErr, wantToASCII) } } else if got != wantToASCII || gotErr != wantErr { t.Errorf(`ToASCII: got %+q, %v (%v); want %+q, %v`, got, gotErr, err, wantToASCII, wantErr) } }) } } }