From 8e1cec06fe61009435e1fe9dff5f67847559a102 Mon Sep 17 00:00:00 2001 From: NKozlov <1mr.njc@gmail.com> Date: Tue, 10 Dec 2013 01:17:11 +0400 Subject: [PATCH] added impl and test --- .idea/libraries/Maven__junit_junit_4_11.xml | 13 ++++ .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 ++++ pom.xml | 16 +++- .../com/getintent/interview/TreeNode.java | 17 ++++ .../getintent/interview/TreeWriterImpl.java | 49 ++++++++++++ .../interview/TreeWriterImplTest.java | 77 +++++++++++++++++++ src/test/java/tree-out-expected.txt | 8 ++ 7 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 .idea/libraries/Maven__junit_junit_4_11.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml create mode 100644 src/main/java/com/getintent/interview/TreeWriterImpl.java create mode 100644 src/test/java/com/getintent/interview/TreeWriterImplTest.java create mode 100644 src/test/java/tree-out-expected.txt diff --git a/.idea/libraries/Maven__junit_junit_4_11.xml b/.idea/libraries/Maven__junit_junit_4_11.xml new file mode 100644 index 0000000..f33320d --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..f58bbc1 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 14e3fb6..357b051 100644 --- a/pom.xml +++ b/pom.xml @@ -6,8 +6,22 @@ javatest1 1.0 jar + - + + junit + junit + 4.11 + test + + + + commons-codec + commons-codec + 1.8 + test + + diff --git a/src/main/java/com/getintent/interview/TreeNode.java b/src/main/java/com/getintent/interview/TreeNode.java index 164fb79..c2ccc68 100644 --- a/src/main/java/com/getintent/interview/TreeNode.java +++ b/src/main/java/com/getintent/interview/TreeNode.java @@ -4,6 +4,7 @@ import java.util.List; public class TreeNode { + private int value; private List children = new ArrayList<>(); @@ -11,6 +12,22 @@ public TreeNode(int value) { this.value = value; } + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + public void addChild(TreeNode child) { children.add(child); } diff --git a/src/main/java/com/getintent/interview/TreeWriterImpl.java b/src/main/java/com/getintent/interview/TreeWriterImpl.java new file mode 100644 index 0000000..9192bfa --- /dev/null +++ b/src/main/java/com/getintent/interview/TreeWriterImpl.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2013 + * Kozlov Nikita + */ +package com.getintent.interview; + +import java.io.IOException; +import java.io.Writer; + +/** + * @author Kozlov Nikita + */ +public class TreeWriterImpl implements TreeWriter { + + private static final String INDENT = " "; + + private TreeNode treeNode; + + @Override + public void write(TreeNode node, Writer w) { + this.treeNode = node; + if (treeNode != null) { + try { + this.write(w, 0); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + throw new IllegalArgumentException("Treenode can not be null."); + } + } + + // =================================================================================================================== + // = Implementation + // =================================================================================================================== + + private void write(Writer w, int depth) throws IOException { + for (int i = 0; i < depth; i++) { + w.append(INDENT); + } + w.append(String.valueOf(this.treeNode.getValue())) + .append("\n"); + w.flush(); + for (TreeNode node : treeNode.getChildren()) { + treeNode = node; + write(w, depth + 1); + } + } +} diff --git a/src/test/java/com/getintent/interview/TreeWriterImplTest.java b/src/test/java/com/getintent/interview/TreeWriterImplTest.java new file mode 100644 index 0000000..785401e --- /dev/null +++ b/src/test/java/com/getintent/interview/TreeWriterImplTest.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2013 + * Kozlov Nikita + */ +package com.getintent.interview; + +import org.apache.commons.codec.digest.DigestUtils; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.*; + +/** + * @author Kozlov Nikita + */ +public class TreeWriterImplTest { + + private Writer writer; + private TreeNode rootNode; + private final static String FILE_PATH_ACTUAL = "src/test/java/tree-out-actual.TXT"; + private final static String FILE_PATH_EXPECTED = "src/test/java/tree-out-expected.TXT"; + + @Before + public void setUp() throws Exception { + this.rootNode = new TreeNode(6); + TreeNode treeNode10 = new TreeNode(10); + TreeNode treeNode7 = new TreeNode(7); + TreeNode treeNode13 = new TreeNode(13); + TreeNode treeNode16 = new TreeNode(16); + TreeNode treeNode21 = new TreeNode(21); + TreeNode treeNode3 = new TreeNode(3); + TreeNode treeNode4 = new TreeNode(4); + + rootNode.addChild(treeNode7); + rootNode.addChild(treeNode10); + rootNode.addChild(treeNode13); + treeNode13.addChild(treeNode16); + treeNode13.addChild(treeNode21); + treeNode7.addChild(treeNode3); + treeNode3.addChild(treeNode4); + File file = new File(FILE_PATH_ACTUAL); + this.writer = new FileWriter(file); + } + + @After + public void tearDown() throws Exception { + if (this.writer != null) { + this.writer.close(); + } + } + + @Test + public void testWrite() throws Exception { + TreeWriter treeWriter = new TreeWriterImpl(); + treeWriter.write(this.rootNode, this.writer); + writer.close(); + String expectedCheckSum = this.getCheckSumFile(FILE_PATH_EXPECTED); + String actualCheckSum = this.getCheckSumFile(FILE_PATH_ACTUAL); + Assert.assertEquals(expectedCheckSum, actualCheckSum); + } + + // =================================================================================================================== + // = Implementation + // =================================================================================================================== + + private String getCheckSumFile(String filePath) { + String checksum = null; + try { + checksum = DigestUtils.md5Hex(new FileInputStream(filePath)); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return checksum; + } +} diff --git a/src/test/java/tree-out-expected.txt b/src/test/java/tree-out-expected.txt new file mode 100644 index 0000000..0eef7f4 --- /dev/null +++ b/src/test/java/tree-out-expected.txt @@ -0,0 +1,8 @@ +6 + 7 + 3 + 4 + 10 + 13 + 16 + 21