package org.arquillian.cube.impl.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class IOUtilTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void shouldTarFile() throws IOException {
final File file = temporaryFolder.newFile("content.txt");
final FileOutputStream output = new FileOutputStream(file);
IOUtils.copy(new ByteArrayInputStream("hello".getBytes()), output);
output.flush();
output.close();
File outputFolder = temporaryFolder.newFolder();
IOUtil.tar(file, new File(outputFolder, "x.tar"));
IOUtil.untar(new FileInputStream(new File(outputFolder, "x.tar")), outputFolder);
final String content = IOUtil.asString(new FileInputStream(new File(outputFolder, "content.txt")));
assertThat(content, is("hello"));
}
@Test
public void shouldMergeToEmptyMap() {
Map<String, Object> original = new HashMap<>();
Map<String, Object> element = new HashMap<>();
element.put("a", "b");
Map<String, Object> element2 = new HashMap<>();
element2.put("c", "d");
element.put("e", element2);
IOUtil.deepMerge(original, element);
assertThat(original.containsKey("a"), is(true));
assertThat(original.containsKey("e"), is(true));
assertThat((String) original.get("a"), is("b"));
Map<String, Object> innerElement = (Map<String, Object>) original.get("e");
assertThat(innerElement.containsKey("c"), is(true));
assertThat((String) innerElement.get("c"), is("d"));
}
@Test
public void shouldAddSimpleAndComplexElements() {
Map<String, Object> original = new HashMap<>();
original.put("z", "y");
Map<String, Object> element = new HashMap<>();
element.put("a", "b");
Map<String, Object> element2 = new HashMap<>();
element2.put("c", "d");
element.put("e", element2);
IOUtil.deepMerge(original, element);
assertThat(original.containsKey("a"), is(true));
assertThat(original.containsKey("e"), is(true));
assertThat(original.containsKey("z"), is(true));
assertThat((String) original.get("a"), is("b"));
assertThat((String) original.get("z"), is("y"));
Map<String, Object> innerElement = (Map<String, Object>) original.get("e");
assertThat(innerElement.containsKey("c"), is(true));
assertThat((String) innerElement.get("c"), is("d"));
}
@Test
public void shouldOverrideSimpleAndComplexElements() {
Map<String, Object> original = new HashMap<>();
Map<String, Object> org = new HashMap<>();
org.put("a", "1");
Map<String, Object> org2 = new HashMap<>();
org2.put("c", "2");
org.put("e", org2);
Map<String, Object> element = new HashMap<>();
element.put("a", "b");
Map<String, Object> element2 = new HashMap<>();
element2.put("c", "d");
element.put("e", element2);
IOUtil.deepMerge(original, element);
assertThat(original.containsKey("a"), is(true));
assertThat(original.containsKey("e"), is(true));
assertThat((String) original.get("a"), is("b"));
Map<String, Object> innerElement = (Map<String, Object>) original.get("e");
assertThat(innerElement.containsKey("c"), is(true));
assertThat((String) innerElement.get("c"), is("d"));
}
}