diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.classpath b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.classpath
new file mode 100644
index 0000000..0a1dadd
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.project b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.project
new file mode 100644
index 0000000..777a076
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.project
@@ -0,0 +1,23 @@
+
+
+ TelemetrySystem
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.jdt.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..abec6ca
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.m2e.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/pom.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/pom.xml
new file mode 100644
index 0000000..4f04117
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ TelemetrySystem
+ TelemetrySystem
+ 0.0.1-SNAPSHOT
+
+
+ junit
+ junit
+ 4.9
+ jar
+ test
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/ITelemetryClient.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/ITelemetryClient.java
new file mode 100644
index 0000000..1e84273
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/ITelemetryClient.java
@@ -0,0 +1,17 @@
+package tddmicroexercises.telemetrysystem;
+
+public interface ITelemetryClient {
+
+ public static final String DIAGNOSTIC_MESSAGE = "AT#UD";
+
+ boolean getOnlineStatus();
+
+ void connect(String telemetryServerConnectionString);
+
+ void disconnect();
+
+ void send(String message);
+
+ String receive();
+
+}
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryClient.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryClient.java
new file mode 100644
index 0000000..d2ef1c6
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryClient.java
@@ -0,0 +1,98 @@
+package tddmicroexercises.telemetrysystem;
+
+import java.util.Random;
+
+public class TelemetryClient implements ITelemetryClient
+{
+ //
+ // The communication with the server is simulated in this implementation.
+ // Because the focus of the exercise is on the other class.
+ //
+
+ private boolean onlineStatus;
+ private boolean diagnosticMessageJustSent = false;
+
+ private final Random connectionEventsSimulator = new Random();
+ private final Random randomMessageSimulator = new Random();
+
+ public boolean getOnlineStatus()
+ {
+ return onlineStatus;
+ }
+
+ public void connect(String telemetryServerConnectionString)
+ {
+ if (telemetryServerConnectionString == null || "".equals(telemetryServerConnectionString))
+ {
+ throw new IllegalArgumentException();
+ }
+
+ // Fake the connection with 20% chances of success
+ boolean success = connectionEventsSimulator.nextInt(10) <= 2;
+
+ onlineStatus = success;
+ }
+
+ public void disconnect()
+ {
+ onlineStatus = false;
+ }
+
+ public void send(String message)
+ {
+ if (message == null || "".equals(message))
+ {
+ throw new IllegalArgumentException();
+ }
+
+ // The simulation of Send() actually just remember if the last message sent was a diagnostic message.
+ // This information will be used to simulate the Receive(). Indeed there is no real server listening.
+ if (message == DIAGNOSTIC_MESSAGE)
+ {
+ diagnosticMessageJustSent = true;
+ }
+ else
+ {
+ diagnosticMessageJustSent = false;
+ }
+ }
+
+ public String receive()
+ {
+ String message;
+
+ if (diagnosticMessageJustSent)
+ {
+ // Simulate the reception of the diagnostic message
+ message = "LAST TX rate................ 100 MBPS\r\n"
+ + "HIGHEST TX rate............. 100 MBPS\r\n"
+ + "LAST RX rate................ 100 MBPS\r\n"
+ + "HIGHEST RX rate............. 100 MBPS\r\n"
+ + "BIT RATE.................... 100000000\r\n"
+ + "WORD LEN.................... 16\r\n"
+ + "WORD/FRAME.................. 511\r\n"
+ + "BITS/FRAME.................. 8192\r\n"
+ + "MODULATION TYPE............. PCM/FM\r\n"
+ + "TX Digital Los.............. 0.75\r\n"
+ + "RX Digital Los.............. 0.10\r\n"
+ + "BEP Test.................... -5\r\n"
+ + "Local Rtrn Count............ 00\r\n"
+ + "Remote Rtrn Count........... 00";
+
+ diagnosticMessageJustSent = false;
+ }
+ else
+ {
+ // Simulate the reception of a response message returning a random message.
+ message = "";
+ int messageLength = randomMessageSimulator.nextInt(50) + 60;
+ for(int i = messageLength; i > 0; --i)
+ {
+ message += (char)randomMessageSimulator.nextInt(40) + 86;
+ }
+ }
+
+ return message;
+ }
+}
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.java
new file mode 100644
index 0000000..85f1d1c
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/main/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.java
@@ -0,0 +1,50 @@
+package tddmicroexercises.telemetrysystem;
+
+public class TelemetryDiagnosticControls
+{
+ private final static String DIAGNOSTIC_CHANNEL_CONNECTION_STRING = "*111#";
+
+ private final ITelemetryClient telemetryClient;
+ private String diagnosticInfo = "";
+
+ public TelemetryDiagnosticControls()
+ {
+ telemetryClient = new TelemetryClient();
+ }
+
+ public TelemetryDiagnosticControls(ITelemetryClient telemetryClient) {
+ this.telemetryClient = telemetryClient;
+ }
+
+ public String getDiagnosticInfo()
+ {
+ return diagnosticInfo;
+ }
+
+ public void setDiagnosticInfo(String diagnosticInfo)
+ {
+ this.diagnosticInfo = diagnosticInfo;
+ }
+
+ public void checkTransmission() throws Exception
+ {
+ diagnosticInfo = "";
+
+ telemetryClient.disconnect();
+
+ int retryLeft = 3;
+ while (telemetryClient.getOnlineStatus() == false && retryLeft > 0)
+ {
+ telemetryClient.connect(DIAGNOSTIC_CHANNEL_CONNECTION_STRING);
+ retryLeft -= 1;
+ }
+
+ if(telemetryClient.getOnlineStatus() == false)
+ {
+ throw new Exception("Unable to connect.");
+ }
+
+ telemetryClient.send(TelemetryClient.DIAGNOSTIC_MESSAGE);
+ diagnosticInfo = telemetryClient.receive();
+ }
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/test/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/test/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.java
new file mode 100644
index 0000000..2b196e0
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/src/test/java/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.java
@@ -0,0 +1,170 @@
+package tddmicroexercises.telemetrysystem;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class TelemetryDiagnosticControlsTest
+{
+
+ private MockTelemetryClient tc;
+ private TelemetryDiagnosticControls controls;
+
+ @Before public void
+ before() {
+ tc = new MockTelemetryClient();
+ controls = new TelemetryDiagnosticControls(tc);
+ }
+
+ @Test public void
+ disconnect_should_be_first_operation_on_telemetry_client() {
+ try {
+ controls.checkTransmission();
+ }
+ catch(Exception e) {
+
+ }
+ finally {
+ Assert.assertEquals(0, tc.messageIndex("disconnect"));
+ }
+ }
+
+ @Test public void
+ should_connect_to_telemetry_client_using_correct_connection_string() {
+ try {
+ controls.checkTransmission();
+ }
+ catch(Exception e) {
+
+ }
+ finally {
+ Assert.assertEquals("*111#", tc.getConnectionString());
+ }
+ }
+
+ @Test public void
+ should_try_to_connect_to_telemetry_client_three_times() {
+ try {
+ controls.checkTransmission();
+ }
+ catch(Exception e) {
+
+ }
+ finally {
+ Assert.assertEquals(3, tc.connectTries());
+ }
+ }
+
+ @Test(expected = Exception.class) public void
+ should_throw_exception_if_unable_to_connect() throws Exception {
+ try {
+ tc.setOnlineStatus(false);
+ controls.checkTransmission();
+ }
+ catch(Exception e) {
+ Assert.assertEquals("Unable to connect.", e.getMessage());
+ throw e;
+ }
+ }
+
+ @Test public void
+ should_send_diagnostic_message_to_telemetry_client_when_successfully_connected() throws Exception {
+ try {
+ tc.setOnlineStatus(true);
+ controls.checkTransmission();
+ }
+ finally {
+ Assert.assertEquals(ITelemetryClient.DIAGNOSTIC_MESSAGE, tc.getMessageSent());
+ }
+ }
+
+ @Test public void
+ should_store_message_recieved_from_telemetry_client_when_successfully_connected() throws Exception {
+ tc.setOnlineStatus(true);
+ tc.setRecieve("test");
+ controls.checkTransmission();
+ Assert.assertEquals("test", controls.getDiagnosticInfo());
+ }
+
+ private static class MockTelemetryClient implements ITelemetryClient {
+
+ private boolean onlineStatus;
+
+ private List methods = new ArrayList();
+
+ public int messageIndex(String method) {
+ return methods.indexOf(method);
+ }
+
+ public boolean getOnlineStatus() {
+ methods.add("onlineStatus");
+ return onlineStatus;
+ }
+
+ public void setOnlineStatus(boolean onlineStatus) {
+ this.onlineStatus = onlineStatus;
+ }
+
+ private int tries;
+ private String connectionString;
+
+ public void connect(String telemetryServerConnectionString) {
+ methods.add("connect");
+ tries++;
+ connectionString = telemetryServerConnectionString;
+ }
+
+ public int connectTries() {
+ return tries;
+ }
+
+ public String getConnectionString() {
+ return connectionString;
+ }
+
+ private boolean disconnected;
+
+ public void disconnect() {
+ methods.add("disconnect");
+ disconnected = true;
+ }
+
+ public boolean isDisconnected() {
+ return disconnected;
+ }
+
+ private int sendCount;
+ private String messageSent;
+
+ public void send(String message) {
+ methods.add("send");
+ messageSent = message;
+ sendCount++;
+ }
+
+ public String getMessageSent() {
+ return messageSent;
+ }
+
+ public int sendCount() {
+ return sendCount;
+ }
+
+ private String recieveMsg;
+
+ public String receive() {
+ methods.add("recieve");
+ return recieveMsg;
+ }
+
+ public void setRecieve(String recieveMsg) {
+ this.recieveMsg = recieveMsg;
+ }
+
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/ITelemetryClient.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/ITelemetryClient.class
new file mode 100644
index 0000000..2326eb8
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/ITelemetryClient.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryClient.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryClient.class
new file mode 100644
index 0000000..9e403cd
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryClient.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.class
new file mode 100644
index 0000000..8302dfb
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControls.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/TEST-tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/TEST-tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.xml
new file mode 100644
index 0000000..13c477e
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/TEST-tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.txt b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.txt
new file mode 100644
index 0000000..113ac0b
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/surefire-reports/tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: tddmicroexercises.telemetrysystem.TelemetryDiagnosticControlsTest
+-------------------------------------------------------------------------------
+Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest$MockTelemetryClient.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest$MockTelemetryClient.class
new file mode 100644
index 0000000..4b258de
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest$MockTelemetryClient.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.class
new file mode 100644
index 0000000..c198620
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TelemetrySystem/target/test-classes/tddmicroexercises/telemetrysystem/TelemetryDiagnosticControlsTest.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.classpath b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.classpath
new file mode 100644
index 0000000..0a1dadd
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.project b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.project
new file mode 100644
index 0000000..0b69686
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.project
@@ -0,0 +1,23 @@
+
+
+ TextConverter
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.jdt.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..abec6ca
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.m2e.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/lib/commons-lang3-3.1.jar b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/lib/commons-lang3-3.1.jar
new file mode 100644
index 0000000..a85e539
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/lib/commons-lang3-3.1.jar differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/pom.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/pom.xml
new file mode 100755
index 0000000..611afb9
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/pom.xml
@@ -0,0 +1,20 @@
+
+ 4.0.0
+ TextConverter
+ TextConverter
+ 0.0.1-SNAPSHOT
+
+
+ junit
+ junit
+ 4.9
+ jar
+ test
+
+
+ org.apache.commons
+ commons-lang3
+ 3.1
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/TextConverter.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/TextConverter.java
new file mode 100644
index 0000000..4ed8df1
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/TextConverter.java
@@ -0,0 +1,25 @@
+package tddmicroexercises.textconvertor;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+
+public class TextConverter {
+
+ public static String convert(Reader source) throws IOException {
+ BufferedReader br = new BufferedReader(source);
+
+ String line = br.readLine();
+ StringBuilder html = new StringBuilder();
+ while (line != null)
+ {
+ html.append(StringEscapeUtils.escapeHtml4(line));
+ html.append("
");
+ line = br.readLine();
+ }
+ return html.toString();
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.java
new file mode 100644
index 0000000..a18867d
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/main/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.java
@@ -0,0 +1,27 @@
+package tddmicroexercises.textconvertor;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+
+public class UnicodeFileToHtmlTextConverter
+{
+ private String fullFilenameWithPath;
+
+ UnicodeFileToHtmlTextConverter() {
+
+ }
+
+ public UnicodeFileToHtmlTextConverter(String fullFilenameWithPath)
+ {
+ this.fullFilenameWithPath = fullFilenameWithPath;
+ }
+
+ public String convertToHtml() throws IOException {
+ return TextConverter.convert(getReader());
+ }
+
+ Reader getReader() throws IOException {
+ return new FileReader(fullFilenameWithPath);
+ }
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/test/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/test/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.java
new file mode 100644
index 0000000..bdf8fbd
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/src/test/java/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.java
@@ -0,0 +1,50 @@
+package tddmicroexercises.textconvertor;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class UnicodeFileToHtmlTextConverterTest {
+
+ @Test public void
+ should_convert_empty_input() throws IOException {
+ UnicodeFileToHtmlTextConverter con = new TestableUnicodeFileToHtmlTextConverter("");
+ Assert.assertEquals("", con.convertToHtml());
+ }
+
+ @Test public void
+ should_convert_non_empty_input() throws IOException {
+ UnicodeFileToHtmlTextConverter con = new TestableUnicodeFileToHtmlTextConverter(" ");
+ Assert.assertEquals("
", con.convertToHtml());
+ }
+
+ @Test public void
+ should_escape_when_converting() throws IOException {
+ UnicodeFileToHtmlTextConverter con = new TestableUnicodeFileToHtmlTextConverter("\"test\"");
+ Assert.assertEquals(""test"
", con.convertToHtml());
+ }
+
+ @Test public void
+ should_convert_multi_line_correctly() throws IOException {
+ UnicodeFileToHtmlTextConverter con = new TestableUnicodeFileToHtmlTextConverter("\n\n");
+ Assert.assertEquals("
", con.convertToHtml());
+ }
+
+ static class TestableUnicodeFileToHtmlTextConverter extends UnicodeFileToHtmlTextConverter {
+ private String inp;
+
+ public TestableUnicodeFileToHtmlTextConverter(String inp) {
+ this.inp = inp;
+ }
+
+ @Override
+ protected Reader getReader() {
+ return new StringReader(inp);
+ }
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/TextConverter.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/TextConverter.class
new file mode 100644
index 0000000..d4e37ed
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/TextConverter.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.class
new file mode 100644
index 0000000..6368b35
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverter.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/TEST-tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/TEST-tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.xml
new file mode 100644
index 0000000..f4d647e
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/TEST-tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.txt b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.txt
new file mode 100644
index 0000000..bc2bcb5
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/surefire-reports/tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: tddmicroexercises.textconvertor.UnicodeFileToHtmlTextConverterTest
+-------------------------------------------------------------------------------
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 sec
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest$TestableUnicodeFileToHtmlTextConverter.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest$TestableUnicodeFileToHtmlTextConverter.class
new file mode 100644
index 0000000..d4f3ff4
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest$TestableUnicodeFileToHtmlTextConverter.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.class
new file mode 100644
index 0000000..ccead6a
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TextConverter/target/test-classes/tddmicroexercises/textconvertor/UnicodeFileToHtmlTextConverterTest.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.classpath b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.classpath
new file mode 100644
index 0000000..4af86cd
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.project b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.project
new file mode 100644
index 0000000..2ade439
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.project
@@ -0,0 +1,23 @@
+
+
+ TirePressureMonitoringSystem
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.jdt.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..abec6ca
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.m2e.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/pom.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/pom.xml
new file mode 100755
index 0000000..dd3eef5
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ TirePressureMonitoringSystem
+ TirePressureMonitoringSystem
+ 0.0.1-SNAPSHOT
+
+
+ junit
+ junit
+ 4.9
+ jar
+ test
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Alarm.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Alarm.java
new file mode 100644
index 0000000..318825d
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Alarm.java
@@ -0,0 +1,33 @@
+package tddmicroexercises.tirepressuremonitoringsystem;
+
+public class Alarm
+{
+ public static final double LowPressureThreshold = 17;
+ public static final double HighPressureThreshold = 21;
+
+ private ISensor sensor;
+ private Range validPressureRange;
+
+ private boolean alarmOn = false;
+
+ public Alarm(ISensor sensor, Range validPressureRange) {
+ this.sensor = sensor;
+ this.validPressureRange = validPressureRange;
+ }
+
+ public void check()
+ {
+ double psiPressureValue = sensor.popNextPressurePsiValue();
+
+ if (!validPressureRange.inRange(psiPressureValue))
+ {
+ alarmOn = true;
+ }
+ }
+
+ public boolean isAlarmOn()
+ {
+ return alarmOn;
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/ISensor.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/ISensor.java
new file mode 100644
index 0000000..8725967
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/ISensor.java
@@ -0,0 +1,7 @@
+package tddmicroexercises.tirepressuremonitoringsystem;
+
+public interface ISensor {
+
+ double popNextPressurePsiValue();
+
+}
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Range.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Range.java
new file mode 100644
index 0000000..47180f7
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Range.java
@@ -0,0 +1,19 @@
+package tddmicroexercises.tirepressuremonitoringsystem;
+
+public class Range {
+
+ private double low, high;
+
+ public Range(double low, double high) {
+ if (low > high)
+ throw new IllegalArgumentException();
+
+ this.low = low;
+ this.high = high;
+ }
+
+ public boolean inRange(double val) {
+ return !(val < low || val > high);
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Sensor.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Sensor.java
new file mode 100644
index 0000000..61e9c66
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/main/java/tddmicroexercises/tirepressuremonitoringsystem/Sensor.java
@@ -0,0 +1,24 @@
+package tddmicroexercises.tirepressuremonitoringsystem;
+
+import java.util.Random;
+
+public class Sensor implements ISensor
+{
+ public static final double OFFSET = 16;
+
+ public double popNextPressurePsiValue()
+ {
+ double pressureTelemetryValue;
+ pressureTelemetryValue = samplePressure( );
+
+ return OFFSET + pressureTelemetryValue;
+ }
+
+ private static double samplePressure()
+ {
+ // placeholder implementation that simulate a real sensor in a real tire
+ Random basicRandomNumbersGenerator = new Random(42);
+ double pressureTelemetryValue = 6 * basicRandomNumbersGenerator.nextDouble() * basicRandomNumbersGenerator.nextDouble();
+ return pressureTelemetryValue;
+ }
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/test/java/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/test/java/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.java
new file mode 100644
index 0000000..60f008e
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/src/test/java/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.java
@@ -0,0 +1,92 @@
+package tddmicroexercises.tirepressuremonitoringsystem;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AlarmTest {
+
+ private Range validPressureRange;
+ private MockSensor high, low, okay;
+
+ @Before public void
+ before() {
+ validPressureRange = new Range(Alarm.LowPressureThreshold, Alarm.HighPressureThreshold);
+ low = new MockSensor(16);
+ okay = new MockSensor(19);
+ high = new MockSensor(22);
+ }
+
+ @After public void
+ after() {
+ validPressureRange = null;
+ high = low = okay = null;
+ }
+
+ @Test public void
+ should_sense_pressure_sensor_once_on_check() {
+ Alarm al = new Alarm(okay, validPressureRange);
+ al.check();
+ Assert.assertEquals(1, okay.timesSensed());
+ }
+
+ @Test public void
+ should_turn_alarm_on_when_pressure_low() {
+ Alarm al = new Alarm(low, validPressureRange);
+ al.check();
+ Assert.assertTrue(al.isAlarmOn());
+ }
+
+ @Test public void
+ should_turn_alarm_on_when_pressure_high() {
+ Alarm al = new Alarm(high, validPressureRange);
+ al.check();
+ Assert.assertTrue(al.isAlarmOn());
+ }
+
+ @Test public void
+ should_not_turn_alarm_on_when_pressure_normal() {
+ Alarm al = new Alarm(okay, validPressureRange);
+ al.check();
+ Assert.assertFalse(al.isAlarmOn());
+ }
+
+ @Test public void
+ should_not_turn_alarm_off_once_alarm_on() {
+ MockSensor sen = new MockSensor(0);
+ Alarm al = new Alarm(sen, validPressureRange);
+
+ al.check();
+ sen.set(20);
+ al.check();
+
+ Assert.assertTrue(al.isAlarmOn());
+ }
+
+ static class MockSensor implements ISensor {
+
+ private int sensed;
+ private double val;
+
+ public MockSensor(double val) {
+ this.val = val;
+ }
+
+ public void set(double val) {
+ this.val = val;
+ }
+
+ public double popNextPressurePsiValue() {
+ sensed += 1;
+ return val;
+ }
+
+ public int timesSensed() {
+ return sensed;
+ }
+
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Alarm.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Alarm.class
new file mode 100644
index 0000000..a7ebb47
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Alarm.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/ISensor.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/ISensor.class
new file mode 100644
index 0000000..3135090
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/ISensor.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Range.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Range.class
new file mode 100644
index 0000000..6f466bc
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Range.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Sensor.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Sensor.class
new file mode 100644
index 0000000..3485e2c
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/classes/tddmicroexercises/tirepressuremonitoringsystem/Sensor.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/TEST-tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/TEST-tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.xml
new file mode 100644
index 0000000..06ad2a0
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/TEST-tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.txt b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.txt
new file mode 100644
index 0000000..74e3323
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/surefire-reports/tddmicroexercises.tirepressuremonitoringsystem.AlarmTest.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: tddmicroexercises.tirepressuremonitoringsystem.AlarmTest
+-------------------------------------------------------------------------------
+Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest$MockSensor.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest$MockSensor.class
new file mode 100644
index 0000000..6545cdb
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest$MockSensor.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.class
new file mode 100644
index 0000000..d0a0bfc
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TirePressureMonitoringSystem/target/test-classes/tddmicroexercises/tirepressuremonitoringsystem/AlarmTest.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.classpath b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.classpath
new file mode 100644
index 0000000..0a1dadd
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.project b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.project
new file mode 100644
index 0000000..6d442d1
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.project
@@ -0,0 +1,23 @@
+
+
+ TurnTicketDispenser
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.jdt.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..abec6ca
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.m2e.core.prefs b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/pom.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/pom.xml
new file mode 100644
index 0000000..df45ab5
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ TurnTicketDispenser
+ TurnTicketDispenser
+ 0.0.1-SNAPSHOT
+
+
+ junit
+ junit
+ 4.9
+ jar
+ test
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.java
new file mode 100644
index 0000000..a7cbdd6
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.java
@@ -0,0 +1,7 @@
+package tddmicroexercises.turnticketdispenser;
+
+public interface ITurnNumberSequence {
+
+ int getNextTurnNumber();
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TicketDispenser.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TicketDispenser.java
new file mode 100644
index 0000000..1b659ce
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TicketDispenser.java
@@ -0,0 +1,34 @@
+package tddmicroexercises.turnticketdispenser;
+
+public class TicketDispenser
+{
+
+ private ITurnNumberSequence seq;
+
+ @Deprecated
+ public TicketDispenser() {
+ this.seq = new ITurnNumberSequence() {
+
+ public int getNextTurnNumber() {
+ return TurnNumberSequence.getNextTurnNumber();
+ }
+
+ };
+ }
+
+ public TicketDispenser(ITurnNumberSequence seq) {
+ this.seq = seq;
+ }
+
+ public TurnTicket getTurnTicket()
+ {
+ return _getTurnTicket();
+ }
+
+ private TurnTicket _getTurnTicket() {
+ int newTurnNumber = seq.getNextTurnNumber();
+ TurnTicket newTurnTicket = new TurnTicket(newTurnNumber);
+ return newTurnTicket;
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnNumberSequence.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnNumberSequence.java
new file mode 100644
index 0000000..5a5f0fe
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnNumberSequence.java
@@ -0,0 +1,11 @@
+package tddmicroexercises.turnticketdispenser;
+
+public class TurnNumberSequence
+{
+ private static int _turnNumber = 0;
+
+ public static int getNextTurnNumber()
+ {
+ return _turnNumber++;
+ }
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnTicket.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnTicket.java
new file mode 100644
index 0000000..edd99ea
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/main/java/tddmicroexercises/turnticketdispenser/TurnTicket.java
@@ -0,0 +1,17 @@
+package tddmicroexercises.turnticketdispenser;
+
+public class TurnTicket
+{
+ private final int turnNumber;
+
+ public TurnTicket(int turnNumber)
+ {
+ this.turnNumber = turnNumber;
+ }
+
+ public int getTurnNumber()
+ {
+ return turnNumber;
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/test/java/tddmicroexercises/turnticketdispenser/TicketDispenserTest.java b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/test/java/tddmicroexercises/turnticketdispenser/TicketDispenserTest.java
new file mode 100644
index 0000000..952531b
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/src/test/java/tddmicroexercises/turnticketdispenser/TicketDispenserTest.java
@@ -0,0 +1,42 @@
+package tddmicroexercises.turnticketdispenser;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class TicketDispenserTest {
+
+ @Test public void
+ should_generate_turn_ticket_with_current_number() {
+ ITurnNumberSequence seq = new MockTurnNumberSequence(0);
+ TicketDispenser td = new TicketDispenser(seq);
+
+ Assert.assertEquals(0, td.getTurnTicket().getTurnNumber());
+ Assert.assertEquals(1, td.getTurnTicket().getTurnNumber());
+ }
+
+ @Test public void
+ should_able_to_share_turn_number_sequence() {
+ ITurnNumberSequence seq = new MockTurnNumberSequence(0);
+ TicketDispenser td1 = new TicketDispenser(seq);
+ TicketDispenser td2 = new TicketDispenser(seq);
+
+ Assert.assertEquals(0, td1.getTurnTicket().getTurnNumber());
+ Assert.assertEquals(1, td2.getTurnTicket().getTurnNumber());
+ }
+
+ static class MockTurnNumberSequence implements ITurnNumberSequence {
+
+ private int num;
+
+ MockTurnNumberSequence(int num) {
+ this.num = num;
+ }
+
+ public int getNextTurnNumber() {
+ return num++;
+ }
+
+ }
+
+}
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.class
new file mode 100644
index 0000000..d5d9b34
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/ITurnNumberSequence.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser$1.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser$1.class
new file mode 100644
index 0000000..2e47100
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser$1.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser.class
new file mode 100644
index 0000000..d4e2e77
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TicketDispenser.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnNumberSequence.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnNumberSequence.class
new file mode 100644
index 0000000..82a2625
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnNumberSequence.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnTicket.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnTicket.class
new file mode 100644
index 0000000..f3169f7
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/classes/tddmicroexercises/turnticketdispenser/TurnTicket.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/TEST-tddmicroexercises.turnticketdispenser.TicketDispenserTest.xml b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/TEST-tddmicroexercises.turnticketdispenser.TicketDispenserTest.xml
new file mode 100644
index 0000000..a5b1de2
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/TEST-tddmicroexercises.turnticketdispenser.TicketDispenserTest.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/tddmicroexercises.turnticketdispenser.TicketDispenserTest.txt b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/tddmicroexercises.turnticketdispenser.TicketDispenserTest.txt
new file mode 100644
index 0000000..ef76e5e
--- /dev/null
+++ b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/surefire-reports/tddmicroexercises.turnticketdispenser.TicketDispenserTest.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: tddmicroexercises.turnticketdispenser.TicketDispenserTest
+-------------------------------------------------------------------------------
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 sec
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest$MockTurnNumberSequence.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest$MockTurnNumberSequence.class
new file mode 100644
index 0000000..193e787
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest$MockTurnNumberSequence.class differ
diff --git a/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest.class b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest.class
new file mode 100644
index 0000000..9fb4a19
Binary files /dev/null and b/TDDMicroExercises.YoursSolutions/Java-viswans/TurnTicketDispenser/target/test-classes/tddmicroexercises/turnticketdispenser/TicketDispenserTest.class differ