|  | // 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) | 
|  | } | 
|  | } |