public void TestRuleStatus() { BreakIterator bi = BreakIterator.GetWordInstance(ULocale.ENGLISH); bi.SetText("# "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleBasedBreakIterator.WORD_NONE); assertTrue(null, bi.RuleStatus < RuleBasedBreakIterator.WORD_NONE_LIMIT); bi.SetText("3 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleBasedBreakIterator.WORD_NUMBER); assertTrue(null, bi.RuleStatus < RuleBasedBreakIterator.WORD_NUMBER_LIMIT); bi.SetText("a "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleBasedBreakIterator.WORD_LETTER); assertTrue(null, bi.RuleStatus < RuleBasedBreakIterator.WORD_LETTER_LIMIT); bi.SetText("イ "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleBasedBreakIterator.WORD_KANA); // TODO: ticket #10261, Kana is not returning the correct status. // assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_KANA_LIMIT); // System.out.println("\n" + bi.getRuleStatus()); bi.SetText("退 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleBasedBreakIterator.WORD_IDEO); assertTrue(null, bi.RuleStatus < RuleBasedBreakIterator.WORD_IDEO_LIMIT); }
public void TestRuleStatus() { BreakIterator bi = BreakIterator.GetWordInstance(new UCultureInfo("en")); bi.SetText("# "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= BreakIterator.WordNone); assertTrue(null, bi.RuleStatus < BreakIterator.WordNoneLimit); bi.SetText("3 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= BreakIterator.WordNumber); assertTrue(null, bi.RuleStatus < BreakIterator.WordNumberLimit); bi.SetText("a "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= BreakIterator.WordLetter); assertTrue(null, bi.RuleStatus < BreakIterator.WordLetterLimit); bi.SetText("イ "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= BreakIterator.WordKana); // TODO: ticket #10261, Kana is not returning the correct status. // assertTrue(null, bi.RuleStatus < RuleStatus.WordKanaLimit); // Console.Out.WriteLine("\n" + bi.RuleStatus); bi.SetText("退 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= BreakIterator.WordIdeo); assertTrue(null, bi.RuleStatus < BreakIterator.WordIdeoLimit); }
public override void Reset() { base.Reset(); wrapper.SetText(m_buffer, 0, 0); iterator.SetText(new string(wrapper.Text, wrapper.Start, wrapper.Length)); length = usableLength = m_offset = 0; }
public override void Reset() { base.Reset(); wrapper.SetText(buffer, 0, 0); iterator.SetText(new string(buffer, 0, 0)); length = usableLength = offset = 0; }
public void TestRuleStatus() { BreakIterator bi = BreakIterator.GetWordInstance(ULocale.ENGLISH); bi.SetText("# "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleStatus.WordNone); assertTrue(null, bi.RuleStatus < RuleStatus.WordNoneLimit); bi.SetText("3 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleStatus.WordNumber); assertTrue(null, bi.RuleStatus < RuleStatus.WordNumberLimit); bi.SetText("a "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleStatus.WordLetter); assertTrue(null, bi.RuleStatus < RuleStatus.WordLetterLimit); bi.SetText("イ "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleStatus.WordKana); // TODO: ticket #10261, Kana is not returning the correct status. // assertTrue(null, bi.getRuleStatus() < RuleStatus.WordKanaLimit); // System.out.println("\n" + bi.getRuleStatus()); bi.SetText("退 "); assertEquals(null, bi.Next(), 1); assertTrue(null, bi.RuleStatus >= RuleStatus.WordIdeo); assertTrue(null, bi.RuleStatus < RuleStatus.WordIdeoLimit); }
public virtual int FindStartOffset(StringBuilder buffer, int start) { // avoid illegal start offset if (start > buffer.Length || start < 1) return start; bi.SetText(buffer.ToString(0, start - 0)); bi.Last(); return bi.Previous(); }
/// <summary> /// Updates this <code>LineBreakMeasurer</code> after a single /// character is inserted into the text, and sets the current /// position to the beginning of the paragraph. /// </summary> /// <param name="newParagraph"> the text after the insertion </param> /// <param name="insertPos"> the position in the text at which the character /// is inserted </param> /// <exception cref="IndexOutOfBoundsException"> if <code>insertPos</code> is less /// than the start of <code>newParagraph</code> or greater than /// or equal to the end of <code>newParagraph</code> </exception> /// <exception cref="NullPointerException"> if <code>newParagraph</code> is /// <code>null</code> </exception> /// <seealso cref= #deleteChar </seealso> public void InsertChar(AttributedCharacterIterator newParagraph, int insertPos) { Measurer.InsertChar(newParagraph, insertPos); Limit = newParagraph.EndIndex; Pos = Start = newParagraph.BeginIndex; CharIter.Reset(Measurer.Chars, newParagraph.BeginIndex); BreakIter.SetText(CharIter); }
/// <summary> /// Implements the "Final_Cased" condition /// /// Specification: Within the closest word boundaries containing C, there is a cased /// letter before C, and there is no cased letter after C. /// /// Regular Expression: /// Before C: [{cased==true}][{wordBoundary!=true}]* /// After C: !([{wordBoundary!=true}]*[{cased}]) /// </summary> private static bool IsFinalCased(String src, int index, Locale locale) { BreakIterator wordBoundary = BreakIterator.GetWordInstance(locale); wordBoundary.SetText(src); int ch; // Look for a preceding 'cased' letter for (int i = index; (i >= 0) && !wordBoundary.IsBoundary(i); i -= Character.CharCount(ch)) { ch = src.CodePointBefore(i); if (IsCased(ch)) { int len = src.Length(); // Check that there is no 'cased' letter after the index for (i = index + Character.CharCount(src.CodePointAt(index)); (i < len) && !wordBoundary.IsBoundary(i); i += Character.CharCount(ch)) { ch = src.CodePointAt(i); if (IsCased(ch)) { return(false); } } return(true); } } return(false); }
public void TestBug4153072() { BreakIterator iter = BreakIterator.GetWordInstance(); String str = "...Hello, World!..."; int begin = 3; int end = str.Length - 3; // not used boolean gotException = false; iter.SetText(new StringCharacterIterator(str, begin, end, begin)); for (int index = -1; index < begin + 1; ++index) { try { iter.IsBoundary(index); if (index < begin) { Errln("Didn't get exception with offset = " + index + " and begin index = " + begin); } } catch (ArgumentException e) { if (index >= begin) { Errln("Got exception with offset = " + index + " and begin index = " + begin); } } } }
private void Consume(BreakIterator bi, CharacterIterator ci) { bi.SetText(ci); while (bi.Next() != BreakIterator.Done) { } }
public void TestGetTitleInstance() { BreakIterator bi = BreakIterator.GetTitleInstance(new CultureInfo("en-CA")); TestFmwk.assertNotEquals("Title instance break iterator not correctly instantiated", bi.First(), null); bi.SetText("Here is some Text"); TestFmwk.assertEquals("Title instance break iterator not correctly instantiated", bi.First(), 0); }
/** * @param filteredBI * @param text */ private void assertFrenchBreakBehavior(BreakIterator filteredBI, String text) { Logln("Testing French behavior:"); filteredBI.SetText(text); assertEquals("6th next", 20, filteredBI.Next()); assertEquals("6th next", 84, filteredBI.Next()); filteredBI.First(); }
private void Consume(BreakIterator bi, CharacterIterator ci) { bi.SetText(ci.toString()); while (bi.Next() != BreakIterator.DONE) { ; } }
/** * @param filteredBI * @param text */ private void assertEnglishBreakBehavior(BreakIterator filteredBI, String text) { Logln("Testing English filtered behavior:"); filteredBI.SetText(text); assertEquals("5th next", 84, filteredBI.Next()); assertEquals("5th next", 278, filteredBI.Next()); filteredBI.First(); }
/** * @param filteredBI * @param text */ private void assertDefaultBreakBehavior(BreakIterator filteredBI, String text) { Logln("Testing Default Behavior:"); filteredBI.SetText(text); assertEquals("1st next", 20, filteredBI.Next()); assertEquals("1st next", 84, filteredBI.Next()); assertEquals("1st next", 90, filteredBI.Next()); assertEquals("1st next", 181, filteredBI.Next()); assertEquals("1st next", 278, filteredBI.Next()); filteredBI.First(); }
private void UxBreakClick(object sender, EventArgs e) { using (BreakIterator bi = BreakIterator.CreateWordInstance(Locale.GetUS())) { bi.SetText(this.uxText.Text); var words = bi.Enumerate().ToList(); MessageBox.Show(string.Join("-", words.ToArray())); } }
public void TestFilteredJapanese() { ULocale loc = ULocale.JAPANESE; BreakIterator brk = FilteredBreakIteratorBuilder .GetInstance(loc) .WrapIteratorWithFilter(BreakIterator.GetSentenceInstance(loc)); brk.SetText("OKです。"); assertEquals("Starting point", 0, brk.Current); assertEquals("Next point", 5, brk.Next()); assertEquals("Last point", BreakIterator.Done, brk.Next()); }
/** Asserts that two breakiterators break the text the same way */ public void assertSameBreaks(CharacterIterator one, CharacterIterator two, BreakIterator expected, BreakIterator actual) { expected.SetText(one); actual.SetText(two); assertEquals(expected.Current, actual.Current); // next() int v = expected.Current; while (v != BreakIterator.DONE) { assertEquals(v = expected.Next(), actual.Next()); assertEquals(expected.Current, actual.Current); } // first() assertEquals(expected.First(), actual.First()); assertEquals(expected.Current, actual.Current); // last() assertEquals(expected.Last(), actual.Last()); assertEquals(expected.Current, actual.Current); // previous() v = expected.Current; while (v != BreakIterator.DONE) { assertEquals(v = expected.Previous(), actual.Previous()); assertEquals(expected.Current, actual.Current); } // following() for (int i = one.BeginIndex; i <= one.EndIndex; i++) { expected.First(); actual.First(); assertEquals(expected.Following(i), actual.Following(i)); assertEquals(expected.Current, actual.Current); } // preceding() for (int i = one.BeginIndex; i <= one.EndIndex; i++) { expected.Last(); actual.Last(); assertEquals(expected.Preceding(i), actual.Preceding(i)); assertEquals(expected.Current, actual.Current); } }
private void UxOccurrenceCountClick(object sender, EventArgs e) { using (BreakIterator bi = BreakIterator.CreateWordInstance(Locale.GetUS())) { bi.SetText(this.uxText.Text); var words = bi.Enumerate() .GroupBy(w => w) .OrderBy(x => x.Count()) .Reverse() .Select(x => x.Key + " : " + x.Count()) .Take(10) .ToArray(); MessageBox.Show(string.Join(Environment.NewLine, words)); } }
private void MakeLayoutWindow(int localStart) { int compStart = localStart; int compLimit = FChars.Length; // If we've already gone past the layout window, format to end of paragraph if (LayoutCount > 0 && !HaveLayoutWindow) { float avgLineLength = System.Math.Max(LayoutCharCount / LayoutCount, 1); compLimit = System.Math.Min(localStart + (int)(avgLineLength * EST_LINES), FChars.Length); } if (localStart > 0 || compLimit < FChars.Length) { if (CharIter == null) { CharIter = new CharArrayIterator(FChars); } else { CharIter.Reset(FChars); } if (FLineBreak == null) { FLineBreak = BreakIterator.LineInstance; } FLineBreak.SetText(CharIter); if (localStart > 0) { if (!FLineBreak.IsBoundary(localStart)) { compStart = FLineBreak.Preceding(localStart); } } if (compLimit < FChars.Length) { if (!FLineBreak.IsBoundary(compLimit)) { compLimit = FLineBreak.Following(compLimit); } } } EnsureComponents(compStart, compLimit); HaveLayoutWindow = true; }
public void IsBoundary(BreakIterator.UBreakIteratorType type, string text, int[] offsetsToTest, bool[] expectedIsBoundary, int[] expectedOffsets) // expected BreakIterator.Current after calling IsBoundary. { var locale = new Locale("zh"); BreakIterator bi = default(BreakIterator); try { switch (type) { case BreakIterator.UBreakIteratorType.SENTENCE: bi = BreakIterator.CreateSentenceInstance(locale); break; case BreakIterator.UBreakIteratorType.WORD: bi = BreakIterator.CreateWordInstance(locale); break; default: throw new NotSupportedException("This iterator type is not supported in this test yet. [" + type + "]"); } bi.SetText(text); for (int i = 0; i < offsetsToTest.Length; i++) { var isBoundary = bi.IsBoundary(offsetsToTest[i]); Assert.AreEqual(expectedIsBoundary[i], isBoundary, "Expected IsBoundary was not equal at i: {0}, offset: {1}", i, offsetsToTest[i]); Assert.AreEqual(expectedOffsets[i], bi.Current); } } finally { if (bi != default(BreakIterator)) { bi.Dispose(); } } }
public void TestGetSetText() { Logln("Testing getText setText "); String str1 = "first string."; String str2 = "Second string."; //RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator)BreakIterator.GetWordInstance(CultureInfo.CurrentCulture); CharacterIterator text1 = new StringCharacterIterator(str1); //CharacterIterator text1Clone = (CharacterIterator) text1.Clone(); //CharacterIterator text2 = new StringCharacterIterator(str2); wordIter1.SetText(str1); if (!wordIter1.Text.Equals(text1)) { Errln("ERROR:1 error in setText or getText "); } if (wordIter1.Current != 0) { Errln("ERROR:1 setText did not set the iteration position to the beginning of the text, it is" + wordIter1.Current + "\n"); } wordIter1.Next(2); wordIter1.SetText(str2); if (wordIter1.Current != 0) { Errln("ERROR:2 setText did not reset the iteration position to the beginning of the text, it is" + wordIter1.Current + "\n"); } // Test the CharSequence overload of setText() for a simple case. BreakIterator lineIter = BreakIterator.GetLineInstance(new CultureInfo("en")); ICharSequence csText = "Hello, World. ".ToCharSequence(); // Expected Line Brks ^ ^ ^ // 0123456789012345 List <int> expected = new List <int>(); expected.Add(0); expected.Add(7); expected.Add(14); lineIter.SetText(csText); for (int pos = lineIter.First(); pos != BreakIterator.Done; pos = lineIter.Next()) { assertTrue("", expected.Contains(pos)); } assertEquals("", csText.Length, lineIter.Current); }
public void TestEndBehavior() { String testString = "boo."; BreakIterator wb = BreakIterator.GetWordInstance(); wb.SetText(testString); if (wb.First() != 0) { Errln("Didn't get break at beginning of string."); } if (wb.Next() != 3) { Errln("Didn't get break before period in \"boo.\""); } if (wb.Current != 4 && wb.Next() != 4) { Errln("Didn't get break at end of string."); } }
public void TestPreceding() { String words3 = "aaa bbb ccc"; BreakIterator e = BreakIterator.GetWordInstance(CultureInfo.CurrentCulture); e.SetText(words3); e.First(); int p1 = e.Next(); int p2 = e.Next(); int p3 = e.Next(); int p4 = e.Next(); int f = e.Following(p2 + 1); int p = e.Preceding(p2 + 1); if (f != p3) { Errln("IntlTestTextBoundary::TestPreceding: f!=p3"); } if (p != p2) { Errln("IntlTestTextBoundary::TestPreceding: p!=p2"); } if (p1 + 1 != p2) { Errln("IntlTestTextBoundary::TestPreceding: p1+1!=p2"); } if (p3 + 1 != p4) { Errln("IntlTestTextBoundary::TestPreceding: p3+1!=p4"); } if (!e.IsBoundary(p2) || e.IsBoundary(p2 + 1) || !e.IsBoundary(p3)) { Errln("IntlTestTextBoundary::TestPreceding: isBoundary err"); } }
public void TestBug12918() { // This test triggered an assertion failure in ICU4C, in dictbe.cpp // The equivalent code in ICU4J is structured slightly differently, // and does not appear vulnerable to the same issue. // // \u3325 decomposes with normalization, then the CJK dictionary // finds a break within the decomposition. String crasherString = "\u3325\u4a16"; BreakIterator iter = BreakIterator.GetWordInstance(ULocale.ENGLISH); iter.SetText(crasherString); iter.First(); int pos = 0; int lastPos = -1; while ((pos = iter.Next()) != BreakIterator.Done) { assertTrue("", pos > lastPos); } }
public void SetText(string text) { this.text = text; wordBreaker.SetText(text); }
public void TestLineIteration() { BreakIterator bi = GetLineInstance(System.Globalization.CultureInfo.InvariantCulture); // Test empty Assert.AreEqual(0, bi.Current); Assert.AreEqual(BreakIterator.Done, bi.Next()); Assert.AreEqual(0, bi.Current); bi.SetText(LINE_TEXT); // Ensure position starts at 0 when initialized Assert.AreEqual(0, bi.Current); // Check first boundary (Apache\t^Lucene) - Ensure we break on \t Assert.AreEqual(7, bi.Next()); // Ensure Current returns the most recent boundary Assert.AreEqual(7, bi.Current); // Check next boundary (Lucene^(TM)) Assert.AreEqual(13, bi.Next()); // Ensure Current returns the most recent boundary Assert.AreEqual(13, bi.Current); // Check next boundary (Lucene(TM) ^is a) Assert.AreEqual(18, bi.Next()); // Ensure Current returns the most recent boundary Assert.AreEqual(18, bi.Current); // Move to start of high-performance bi.Next(); bi.Next(); // Check next boundary (high-\n^performance) Assert.AreEqual(29, bi.Next()); // Check last boundary (in Java.^) Assert.AreEqual(108, bi.Last()); // Check move past last boundary Assert.AreEqual(BreakIterator.Done, bi.Next()); // Ensure we are still at last boundary Assert.AreEqual(108, bi.Current); // Check MovePrevious Assert.AreEqual(103, bi.Previous()); // Ensure we get the same value for Current as the last move Assert.AreEqual(103, bi.Current); // Check MoveFirst Assert.AreEqual(0, bi.First()); // Ensure we get the same value for Current as the last move Assert.AreEqual(0, bi.Current); // Check moving beyond first boundary Assert.AreEqual(BreakIterator.Done, bi.Previous()); // Ensure we are still at first boundary Assert.AreEqual(0, bi.Current); // Check MoveLast() Assert.AreEqual(108, bi.Last()); }
public void TestWordIteration() { BreakIterator bi = GetWordInstance(System.Globalization.CultureInfo.InvariantCulture); bi.SetText(""); // Test empty Assert.AreEqual(0, bi.Current); Assert.AreEqual(BreakIterator.Done, bi.Next()); Assert.AreEqual(0, bi.Current); bi.SetText(TEXT); // Ensure position starts at 0 when initialized Assert.AreEqual(0, bi.Current); // Check first boundary (Apache^) Assert.AreEqual(6, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(6, bi.Current); // Check second boundary (^Lucene) Assert.AreEqual(7, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(7, bi.Current); // Check third boundary (Lucene^) Assert.AreEqual(13, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(13, bi.Current); // Check fourth boundary (^TM) Assert.AreEqual(14, bi.Next()); // Check fifth boundary (TM^) Assert.AreEqual(16, bi.Next()); // Check sixth boundary (TM)^ Assert.AreEqual(17, bi.Next()); // Check seventh boundary (^is) Assert.AreEqual(18, bi.Next()); // Move to (^high-performance) bi.Next(); bi.Next(); bi.Next(); // Check next boundary (^high-performance) Assert.AreEqual(23, bi.Next()); // Ensure we don't break on hyphen (high-performance^) Assert.AreEqual(39, bi.Next()); // Check MoveLast() Assert.AreEqual(107, bi.Last()); // Check going past last boundary Assert.AreEqual(BreakIterator.Done, bi.Next()); // Check we are still at last boundary Assert.AreEqual(107, bi.Current); // Check MoveFirst() Assert.AreEqual(0, bi.First()); // Check going past first boundary Assert.AreEqual(BreakIterator.Done, bi.Previous()); // Check we are still at first boundary Assert.AreEqual(0, bi.Current); }
public void TestSentenceIteration() { BreakIterator bi = GetSentenceInstance(System.Globalization.CultureInfo.InvariantCulture); bi.SetText(""); // Test empty Assert.AreEqual(0, bi.Current); Assert.AreEqual(BreakIterator.Done, bi.Next()); Assert.AreEqual(0, bi.Current); bi.SetText(SENTENCE_TEXT); // Ensure position starts at 0 when initialized Assert.AreEqual(0, bi.Current); // Check first boundary (in Java.^) - Ensure we don't break on \n Assert.AreEqual(108, bi.Next()); // Ensure Current returns the most recent boundary Assert.AreEqual(108, bi.Current); // Check next boundary (especially cross-platform.^) Assert.AreEqual(221, bi.Next()); // Check next boundary (free download.^) Assert.AreEqual(290, bi.Next()); // Check next boundary (things easy.^) Assert.AreEqual(324, bi.Next()); // Check next boundary (is powerful.^) Assert.AreEqual(344, bi.Next()); // Check next boundary (is exciting.^) Assert.AreEqual(364, bi.Next()); // Check next boundary (is cool.^) Assert.AreEqual(380, bi.Next()); // Check last boundary (Lucene now?^) Assert.AreEqual(400, bi.Next()); // Check move past last boundary Assert.AreEqual(BreakIterator.Done, bi.Next()); // Ensure we are still at last boundary Assert.AreEqual(400, bi.Current); // Check MovePrevious Assert.AreEqual(380, bi.Previous()); // Ensure we get the same value for Current as the last move Assert.AreEqual(380, bi.Current); // Check MoveFirst Assert.AreEqual(0, bi.First()); // Ensure we get the same value for Current as the last move Assert.AreEqual(0, bi.Current); // Check moving beyond first boundary Assert.AreEqual(BreakIterator.Done, bi.Previous()); // Ensure we are still at first boundary Assert.AreEqual(0, bi.Current); // Check MoveLast() Assert.AreEqual(400, bi.Last()); }
public void TestWordIterationThai() { BreakIterator bi = GetWordInstance(new System.Globalization.CultureInfo("th")); bi.SetText(""); // Test empty Assert.AreEqual(0, bi.Current); Assert.AreEqual(BreakIterator.Done, bi.Next()); Assert.AreEqual(0, bi.Current); bi.SetText("บริษัทMicrosoftบริการดีที่สุด"); // Ensure position starts at 0 when initialized Assert.AreEqual(0, bi.Current); // Check first boundary (บริษัท^Microsoft) Assert.AreEqual(6, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(6, bi.Current); // Check second boundary (Microsoft^บริการ) Assert.AreEqual(15, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(15, bi.Current); // Check third boundary (บริการ^ดี) Assert.AreEqual(21, bi.Next()); // Ensure Current returns the last boundary iterated to Assert.AreEqual(21, bi.Current); // Check fourth boundary (ดี^ที่สุด) Assert.AreEqual(23, bi.Next()); // Check fifth boundary (ดีที่สุด^) Assert.AreEqual(29, bi.Next()); // Check beyond last boundary (ดีที่สุด)^ Assert.AreEqual(BreakIterator.Done, bi.Next()); // Check we are still at last boundary Assert.AreEqual(29, bi.Current); // Check MovePrevious() (ดี^ที่สุด) Assert.AreEqual(23, bi.Previous()); // Check MoveFirst() Assert.AreEqual(0, bi.First()); // Check going past first boundary Assert.AreEqual(BreakIterator.Done, bi.Previous()); // Check we are still at first boundary Assert.AreEqual(0, bi.Current); // Check Numerals bi.SetText("๑23๔๕๖7"); // Ensure position starts at 0 when initialized Assert.AreEqual(0, bi.Current); // Ensure Hindu and Thai numerals stay in one group Assert.AreEqual(7, bi.Next()); }