@@ -101,6 +101,27 @@ TEST(MandarinTest, ETen26Layout) {
101101 ASSERT_EQ (buf.composedString (), " ㄗㄢˋ" );
102102}
103103
104+ TEST (MandarinTest, ETen26LayoutOutOfOrderEquivalentSequence) {
105+ BopomofoReadingBuffer buf (BopomofoKeyboardLayout::ETen26Layout ());
106+ buf.combineKey (' q' );
107+ buf.combineKey (' a' );
108+ ASSERT_EQ (buf.composedString (), " ㄗㄚ" );
109+
110+ buf.clear ();
111+ buf.combineKey (' a' ); // ㄚ first
112+ buf.combineKey (' q' ); // even if q can be ㄟ, a vowel is already in place
113+ ASSERT_EQ (buf.composedString (), " ㄗㄚ" );
114+
115+ buf.clear ();
116+ buf.combineKey (' q' );
117+ buf.combineKey (' i' );
118+ ASSERT_EQ (buf.composedString (), " ㄗㄞ" );
119+
120+ buf.clear ();
121+ buf.combineKey (' i' );
122+ buf.combineKey (' q' );
123+ ASSERT_EQ (buf.composedString (), " ㄗㄞ" );
124+ }
104125TEST (MandarinTest, HsuLayout) {
105126 BopomofoReadingBuffer buf (BopomofoKeyboardLayout::HsuLayout ());
106127 buf.combineKey (' f' );
@@ -109,6 +130,28 @@ TEST(MandarinTest, HsuLayout) {
109130 ASSERT_EQ (buf.composedString (), " ㄈㄟˇ" );
110131}
111132
133+ TEST (MandarinTest, HsuLayoutOutOfOrderEquivalentSequence) {
134+ BopomofoReadingBuffer buf (BopomofoKeyboardLayout::HsuLayout ());
135+ buf.combineKey (' a' );
136+ buf.combineKey (' i' );
137+ ASSERT_EQ (buf.composedString (), " ㄘㄞ" );
138+
139+ buf.clear ();
140+ buf.combineKey (' i' ); // ㄞ first
141+ buf.combineKey (' a' ); // even if a can be ㄟ, a vowel is already in place
142+ ASSERT_EQ (buf.composedString (), " ㄘㄞ" );
143+
144+ buf.clear ();
145+ buf.combineKey (' a' );
146+ buf.combineKey (' y' );
147+ ASSERT_EQ (buf.composedString (), " ㄘㄚ" );
148+
149+ buf.clear ();
150+ buf.combineKey (' y' );
151+ buf.combineKey (' a' );
152+ ASSERT_EQ (buf.composedString (), " ㄘㄚ" );
153+ }
154+
112155TEST (MandarinTest, IBMLayout) {
113156 BopomofoReadingBuffer buf (BopomofoKeyboardLayout::IBMLayout ());
114157 buf.combineKey (' 9' );
0 commit comments