mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-04 20:39:48 +02:00
64 lines
2.0 KiB
Java
64 lines
2.0 KiB
Java
package juloo.keyboard2;
|
||
|
||
import juloo.keyboard2.ComposeKey;
|
||
import juloo.keyboard2.ComposeKeyData;
|
||
import juloo.keyboard2.KeyValue;
|
||
import org.junit.Test;
|
||
import static org.junit.Assert.*;
|
||
|
||
public class ComposeKeyTest
|
||
{
|
||
public ComposeKeyTest() {}
|
||
|
||
@Test
|
||
public void composeEquals() throws Exception
|
||
{
|
||
// From Compose.pre
|
||
assertEquals(apply("'e"), KeyValue.makeStringKey("é"));
|
||
assertEquals(apply("e'"), KeyValue.makeStringKey("é"));
|
||
// From extra.json
|
||
assertEquals(apply("Vc"), KeyValue.makeStringKey("Č"));
|
||
assertEquals(apply("\\n"), KeyValue.getKeyByName("\\n"));
|
||
// From arabic.json
|
||
assertEquals(apply("اا"), KeyValue.getKeyByName("combining_alef_above"));
|
||
assertEquals(apply("ل۷"), KeyValue.makeStringKey("ڵ"));
|
||
assertEquals(apply("۷ل"), KeyValue.makeStringKey("ڵ"));
|
||
// From cyrillic.json
|
||
assertEquals(apply(",г"), KeyValue.makeStringKey("ӻ"));
|
||
assertEquals(apply("г,"), KeyValue.makeStringKey("ӻ"));
|
||
assertEquals(apply("ач"), KeyValue.getKeyByName("combining_aigu"));
|
||
}
|
||
|
||
@Test
|
||
public void fnEquals() throws Exception
|
||
{
|
||
int state = ComposeKeyData.fn;
|
||
assertEquals(apply("<", state), KeyValue.makeStringKey("«"));
|
||
assertEquals(apply("{", state), KeyValue.makeStringKey("‹"));
|
||
// Named key
|
||
assertEquals(apply("1", state), KeyValue.getKeyByName("f1"));
|
||
assertEquals(apply(" ", state), KeyValue.getKeyByName("nbsp"));
|
||
// Named 1-char key
|
||
assertEquals(apply("ய", state), KeyValue.makeStringKey("௰", KeyValue.FLAG_SMALLER_FONT));
|
||
}
|
||
|
||
KeyValue apply(String seq) throws Exception
|
||
{
|
||
return apply(seq, ComposeKeyData.compose);
|
||
}
|
||
|
||
KeyValue apply(String seq, int state) throws Exception
|
||
{
|
||
KeyValue r = null;
|
||
for (int i = 0; i < seq.length(); i++)
|
||
{
|
||
r = ComposeKey.apply(state, seq.charAt(i));
|
||
if (r.getKind() == KeyValue.Kind.Compose_pending)
|
||
state = r.getPendingCompose();
|
||
else if (i + 1 < seq.length())
|
||
throw new Exception("Sequence too long: " + seq);
|
||
}
|
||
return r;
|
||
}
|
||
}
|