// Copyright 2009 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 unicode_test import ( "testing" . "unicode" ) type T struct { rune rune script string } var inCategoryTest = []T{ {0x0081, "Cc"}, {0x200B, "Cf"}, {0xf0000, "Co"}, {0xdb80, "Cs"}, {0x0236, "Ll"}, {0x1d9d, "Lm"}, {0x07cf, "Lo"}, {0x1f8a, "Lt"}, {0x03ff, "Lu"}, {0x0bc1, "Mc"}, {0x20df, "Me"}, {0x07f0, "Mn"}, {0x1bb2, "Nd"}, {0x10147, "Nl"}, {0x2478, "No"}, {0xfe33, "Pc"}, {0x2011, "Pd"}, {0x301e, "Pe"}, {0x2e03, "Pf"}, {0x2e02, "Pi"}, {0x0022, "Po"}, {0x2770, "Ps"}, {0x00a4, "Sc"}, {0xa711, "Sk"}, {0x25f9, "Sm"}, {0x2108, "So"}, {0x2028, "Zl"}, {0x2029, "Zp"}, {0x202f, "Zs"}, // Unifieds. {0x04aa, "L"}, {0x0009, "C"}, {0x1712, "M"}, {0x0031, "N"}, {0x00bb, "P"}, {0x00a2, "S"}, {0x00a0, "Z"}, } var inPropTest = []T{ {0x0046, "ASCII_Hex_Digit"}, {0x200F, "Bidi_Control"}, {0x2212, "Dash"}, {0xE0001, "Deprecated"}, {0x00B7, "Diacritic"}, {0x30FE, "Extender"}, {0xFF46, "Hex_Digit"}, {0x2E17, "Hyphen"}, {0x2FFB, "IDS_Binary_Operator"}, {0x2FF3, "IDS_Trinary_Operator"}, {0xFA6A, "Ideographic"}, {0x200D, "Join_Control"}, {0x0EC4, "Logical_Order_Exception"}, {0x2FFFF, "Noncharacter_Code_Point"}, {0x065E, "Other_Alphabetic"}, {0x2065, "Other_Default_Ignorable_Code_Point"}, {0x0BD7, "Other_Grapheme_Extend"}, {0x0387, "Other_ID_Continue"}, {0x212E, "Other_ID_Start"}, {0x2094, "Other_Lowercase"}, {0x2040, "Other_Math"}, {0x216F, "Other_Uppercase"}, {0x0027, "Pattern_Syntax"}, {0x0020, "Pattern_White_Space"}, {0x06DD, "Prepended_Concatenation_Mark"}, {0x300D, "Quotation_Mark"}, {0x2EF3, "Radical"}, {0x1f1ff, "Regional_Indicator"}, {0x061F, "STerm"}, // Deprecated alias of Sentence_Terminal {0x061F, "Sentence_Terminal"}, {0x2071, "Soft_Dotted"}, {0x003A, "Terminal_Punctuation"}, {0x9FC3, "Unified_Ideograph"}, {0xFE0F, "Variation_Selector"}, {0x0020, "White_Space"}, } func TestCategories(t *testing.T) { notTested := make(map[string]bool) for k := range Categories { notTested[k] = true } for _, test := range inCategoryTest { if _, ok := Categories[test.script]; !ok { t.Fatal(test.script, "not a known category") } if !Is(Categories[test.script], test.rune) { t.Errorf("IsCategory(%U, %s) = false, want true", test.rune, test.script) } delete(notTested, test.script) } for k := range notTested { t.Error("category not tested:", k) } } func TestProperties(t *testing.T) { notTested := make(map[string]bool) for k := range Properties { notTested[k] = true } for _, test := range inPropTest { if _, ok := Properties[test.script]; !ok { t.Fatal(test.script, "not a known prop") } if !Is(Properties[test.script], test.rune) { t.Errorf("IsCategory(%U, %s) = false, want true", test.rune, test.script) } delete(notTested, test.script) } for k := range notTested { t.Error("property not tested:", k) } }