public void TestScriptMetadataAPI() { /* API & code coverage. */ String sample = UScript.GetSampleString(UScript.Latin); if (sample.Length != 1 || UScript.GetScript(sample[0]) != UScript.Latin) { Errln("UScript.getSampleString(Latn) failed"); } sample = UScript.GetSampleString(UScript.InvalidCode); if (sample.Length != 0) { Errln("UScript.getSampleString(invalid) failed"); } if (UScript.GetUsage(UScript.Latin) != ScriptUsage.Recommended || // Unicode 10 gives up on "aspirational". UScript.GetUsage(UScript.Yi) != ScriptUsage.LimitedUse || UScript.GetUsage(UScript.Cherokee) != ScriptUsage.LimitedUse || UScript.GetUsage(UScript.Coptic) != ScriptUsage.Excluded || UScript.GetUsage(UScript.Cirth) != ScriptUsage.NotEncoded || UScript.GetUsage(UScript.InvalidCode) != ScriptUsage.NotEncoded || UScript.GetUsage(UScript.CodeLimit) != ScriptUsage.NotEncoded) { Errln("UScript.getUsage() failed"); } if (UScript.IsRightToLeft(UScript.Latin) || UScript.IsRightToLeft(UScript.Cirth) || !UScript.IsRightToLeft(UScript.Arabic) || !UScript.IsRightToLeft(UScript.Hebrew)) { Errln("UScript.isRightToLeft() failed"); } if (UScript.BreaksBetweenLetters(UScript.Latin) || UScript.BreaksBetweenLetters(UScript.Cirth) || !UScript.BreaksBetweenLetters(UScript.Han) || !UScript.BreaksBetweenLetters(UScript.Thai)) { Errln("UScript.breaksBetweenLetters() failed"); } if (UScript.IsCased(UScript.Cirth) || UScript.IsCased(UScript.Han) || !UScript.IsCased(UScript.Latin) || !UScript.IsCased(UScript.Greek)) { Errln("UScript.isCased() failed"); } }
public void TestScriptMetadata() { UnicodeSet rtl = new UnicodeSet("[[:bc=R:][:bc=AL:]-[:Cn:]-[:sc=Common:]]"); // So far, sample characters are uppercase. // Georgian is special. UnicodeSet cased = new UnicodeSet("[[:Lu:]-[:sc=Common:]-[:sc=Geor:]]"); for (int sc = 0; sc < UScript.CodeLimit; ++sc) { String sn = UScript.GetShortName(sc); ScriptUsage usage = UScript.GetUsage(sc); String sample = UScript.GetSampleString(sc); UnicodeSet scriptSet = new UnicodeSet(); scriptSet.ApplyInt32PropertyValue(UProperty.Script, sc); if (usage == ScriptUsage.NotEncoded) { assertTrue(sn + " not encoded, no sample", sample.Length == 0); // Java 6: sample.isEmpty() assertFalse(sn + " not encoded, not RTL", UScript.IsRightToLeft(sc)); assertFalse(sn + " not encoded, not LB letters", UScript.BreaksBetweenLetters(sc)); assertFalse(sn + " not encoded, not cased", UScript.IsCased(sc)); assertTrue(sn + " not encoded, no characters", scriptSet.IsEmpty); } else { assertFalse(sn + " encoded, has a sample character", sample.Length == 0); // Java 6: sample.isEmpty() int firstChar = sample.CodePointAt(0); int charScript = GetCharScript(sc); assertEquals(sn + " script(sample(script))", charScript, UScript.GetScript(firstChar)); assertEquals(sn + " RTL vs. set", rtl.Contains(firstChar), UScript.IsRightToLeft(sc)); assertEquals(sn + " cased vs. set", cased.Contains(firstChar), UScript.IsCased(sc)); assertEquals(sn + " encoded, has characters", sc == charScript, !scriptSet.IsEmpty); if (UScript.IsRightToLeft(sc)) { rtl.RemoveAll(scriptSet); } if (UScript.IsCased(sc)) { cased.RemoveAll(scriptSet); } } } assertEquals("no remaining RTL characters", "[]", rtl.ToPattern(true)); assertEquals("no remaining cased characters", "[]", cased.ToPattern(true)); assertTrue("Hani breaks between letters", UScript.BreaksBetweenLetters(UScript.Han)); assertTrue("Thai breaks between letters", UScript.BreaksBetweenLetters(UScript.Thai)); assertFalse("Latn does not break between letters", UScript.BreaksBetweenLetters(UScript.Latin)); }