| // Copyright 2015 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 precis | |
| import ( | |
| "testing" | |
| "golang.org/x/text/runes" | |
| ) | |
| // Compile-time regression test to ensure that Class is a Set | |
| var _ runes.Set = (*class)(nil) | |
| // Ensure that certain characters are (or are not) in the identifer class. | |
| func TestClassContains(t *testing.T) { | |
| tests := []struct { | |
| name string | |
| class *class | |
| allowed []rune | |
| disallowed []rune | |
| }{ | |
| { | |
| name: "Identifier", | |
| class: identifier, | |
| allowed: []rune("Aa0\u0021\u007e\u00df\u3007"), | |
| disallowed: []rune("\u2150\u2100\u2200\u3164\u2190\u2600\u303b\u1e9b"), | |
| }, | |
| { | |
| name: "Freeform", | |
| class: freeform, | |
| allowed: []rune("Aa0\u0021\u007e\u00df\u3007 \u2150\u2100\u2200\u2190\u2600\u1e9b"), | |
| disallowed: []rune("\u3164\u303b"), | |
| }, | |
| } | |
| for _, rt := range tests { | |
| for _, r := range rt.allowed { | |
| if !rt.class.Contains(r) { | |
| t.Errorf("Class %s should contain %U", rt.name, r) | |
| } | |
| } | |
| for _, r := range rt.disallowed { | |
| if rt.class.Contains(r) { | |
| t.Errorf("Class %s should not contain %U", rt.name, r) | |
| } | |
| } | |
| } | |
| } |