### Question:
ExtraColumnsMetaDataProvider implements MetaDataProvider { @Override public List<String> getKeys() { List<String> keys = New.list(myOriginal.getKeys()); Set<String> originalKeys = New.set(keys); for (String key : myExtraColumns.keySet()) { if (!originalKeys.contains(key)) { keys.add(key); } } return keys; } protected  ExtraColumnsMetaDataProvider(ExtraColumnsMetaDataProvider source);  ExtraColumnsMetaDataProvider(MetaDataProvider original, Map<String, Object> extraColumns); @Override List<String> getKeys(); @Override Object getValue(String key); @Override List<Object> getValues(); @Override boolean hasKey(String key); @Override boolean keysMutable(); @Override void removeKey(String key); @Override boolean setValue(String key, Serializable value); @Override boolean valuesMutable(); Map<String, Object> getExtraColumns(); MetaDataProvider getOriginal(); @Override MetaDataProvider createCopy(DataTypeInfo newDatatype);  }### Answer:
@Test public void testGetKeys() { EasyMockSupport support = new EasyMockSupport(); MetaDataProvider original = createProvider(support); Map<String, Object> extras = createExtraColumns(); support.replayAll(); ExtraColumnsMetaDataProvider extraProvider = new ExtraColumnsMetaDataProvider(original, extras); List<String> keys = extraProvider.getKeys(); assertEquals(ourOriginalColumns.length + ourExtraColumns.length - 1, keys.size()); for (int i = 0; i < keys.size(); i++) { if (i < ourOriginalColumns.length) { assertEquals(ourOriginalColumns[i], keys.get(i)); } else { assertEquals(ourExtraColumns[i - ourOriginalColumns.length + 1], keys.get(i)); } } support.verifyAll(); }