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