### Question:
SymbolTable implements Serializable, Cloneable { public String getVariant() { return variant; } SymbolTable(String lang, Optional<String> variant, List<Symbol> customSymbols); Map<SymbolType, Symbol> getDefaultSymbols(); void overrideSymbol(Symbol symbol); Set<SymbolType> getNames(); Symbol getSymbol(SymbolType name); Symbol getSymbolByValue(char value); char getValueOrFallbackToDefault(SymbolType type); boolean containsSymbolByValue(char value); String getLang(); String getVariant(); @Override boolean equals(Object o); @Override int hashCode(); @Override SymbolTable clone(); @Override String toString();  }### Answer:
@Test void englishDoesNotHaveAVariant() throws Exception { SymbolTable table = new SymbolTable("en", Optional.empty(), emptyList()); assertEquals("", table.getVariant()); }
@Test void russianHasSomeDifferentSymbols() throws Exception { SymbolTable table = new SymbolTable("ru", Optional.empty(), emptyList()); assertEquals("", table.getVariant()); assertEquals('№', table.getSymbol(NUMBER_SIGN).getValue()); }
@Test void japaneseUsesZenkakuByDefault() throws Exception { SymbolTable table = new SymbolTable("ja", Optional.empty(), emptyList()); assertEquals("zenkaku", table.getVariant()); assertEquals('。', table.getSymbol(FULL_STOP).getValue()); assertEquals('、', table.getSymbol(COMMA).getValue()); }
@Test void japaneseCanUseAVariationOfZenkaku() throws Exception { SymbolTable table = new SymbolTable("ja", Optional.of("zenkaku2"), emptyList()); assertEquals("zenkaku2", table.getVariant()); assertEquals('．', table.getSymbol(FULL_STOP).getValue()); assertEquals('，', table.getSymbol(COMMA).getValue()); }