StringI18NModel implements I18NModel { @Override public StringI18NModel copy() { return new StringI18NModel(values); } StringI18NModel(final I18NModel values);  StringI18NModel(final Map<String, String> values);  StringI18NModel(final String raw);  StringI18NModel(); @Override String getValue(final String locale); @Override void putValue(final String locale, final String value); @Override Map<String, String> getAllValues(); @Override boolean equals(final Object o); @Override StringI18NModel copy(); @Override int hashCode(); @Override String toString();  }
@Test public void testCopy() throws Exception { final I18NModel model = new StringI18NModel("EN#~#Some text#~#RU#~#Текст#~#UK#~##~#xx#~#model failover"); final I18NModel copy = model.copy(); assertEquals(copy, model); copy.putValue("EN", "Changed"); copy.putValue(I18NModel.DEFAULT, "Changed default"); assertEquals("Some text", model.getValue("EN")); assertEquals("model failover", model.getValue(I18NModel.DEFAULT)); assertEquals("Changed default", copy.getValue(I18NModel.DEFAULT)); }