#!/usr/bin/env bash wget http://cs.helsinki.fi/u/paksula/versionhallinta/s09/project/p1/src/main/java/longcat/CliArgumentParser.java mv CliArgumentParser.java src/main/java/longcat wget http://cs.helsinki.fi/u/paksula/versionhallinta/s09/project/p1/src/main/java/longcat/LengthUnit.java mv LengthUnit.java src/main/java/longcat wget http://cs.helsinki.fi/u/paksula/versionhallinta/s09/project/p1/src/main/java/longcat/LongcatFactoryImpl.java mv LongcatFactoryImpl.java src/main/java/longcat wget http://cs.helsinki.fi/u/paksula/versionhallinta/s09/project/p1/src/test/java/longcat/CliArgumentParserTest.java mv CliArgumentParserTest.java src/test/java/longcat svn add src/main/java/longcat/CliArgumentParser.java svn add src/main/java/longcat/LengthUnit.java svn add src/main/java/longcat/LongcatFactoryImpl.java svn add src/test/java/longcat/CliArgumentParserTest.java echo "--- a/src/main/java/longcat/LongcatFactory.java +++ b/src/main/java/longcat/LongcatFactory.java @@ -1,8 +1,8 @@ package longcat; -public class LongcatFactory { +public interface LongcatFactory { - public Longcat createLongcat(int bodySize) { - return new Longcat(bodySize); - } + Longcat createLongcat(int bodySize); + + Longcat createLongcat(int length, LengthUnit unit); } " | patch -p1 echo "--- a/src/test/java/longcat/LongcatFactoryTest.java +++ b/src/test/java/longcat/LongcatFactoryTest.java @@ -4,7 +4,7 @@ import junit.framework.TestCase; public class LongcatFactoryTest extends TestCase { - private LongcatFactory factory = new LongcatFactory(); + private LongcatFactory factory = new LongcatFactoryImpl(); public void test__Longcat_with_body_size_0() { Longcat longcat = factory.createLongcat(-1); " | patch -p1 svn ci -m "Command line argument parsing" sleep 2 svn up wget http://cs.helsinki.fi/u/paksula/versionhallinta/s09/project/p2/src/test/java/longcat/LengthUnitTest.java mv LengthUnitTest.java src/test/java/longcat/ svn add src/test/java/longcat/LengthUnitTest.java echo '--- a/src/main/java/longcat/LengthUnit.java +++ b/src/main/java/longcat/LengthUnit.java @@ -2,12 +2,14 @@ package longcat; public enum LengthUnit { - METERS("m"), FEET("ft"), PETRONAS("petronas"); + METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451,9); private final String name; + private final double lengthInMeters; - private LengthUnit(String name) { + private LengthUnit(String name, double lengthInMeters) { this.name = name; + this.lengthInMeters = lengthInMeters; } public static LengthUnit parse(String name) { @@ -18,4 +20,8 @@ public enum LengthUnit { } throw new IllegalArgumentException("No such unit of length: " + name); } + + public int from(int length, LengthUnit unit) { + return (int) (length * unit.lengthInMeters / this.lengthInMeters); + } } ' | patch -p1 svn ci -m "Length unit conversions" svn up svn ci -m "Length unit conversions" echo '--- a/src/main/java/longcat/LengthUnit.java +++ b/src/main/java/longcat/LengthUnit.java @@ -2,7 +2,7 @@ package longcat; public enum LengthUnit { - METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451.9); + METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451.9), LINES("lines", 0.009); private final String name; private final double lengthInMeters; ' | patch -p1 echo '--- a/src/main/java/longcat/Longcat.java +++ b/src/main/java/longcat/Longcat.java @@ -27,11 +27,14 @@ public class Longcat { private final int bodySize; public Longcat(int bodySize) { + if (bodySize < 0) { + throw new IllegalArgumentException("Longcat can not be that short!"); + } this.bodySize = bodySize; } public String getBody() { - StringBuilder body = new StringBuilder(); + StringBuilder body = new StringBuilder(bodySize * BODY_LINE.length()); for (int i = 0; i < bodySize; i++) { body.append(BODY_LINE); } ' | patch -p1 echo "--- a/src/main/java/longcat/LongcatFactoryImpl.java +++ b/src/main/java/longcat/LongcatFactoryImpl.java @@ -7,6 +7,19 @@ public class LongcatFactoryImpl implements LongcatFactory { } public Longcat createLongcat(int length, LengthUnit unit) { - return null; + int totalLines = LengthUnit.LINES.from(length, unit); + int nonBodyLines = lineCount(Longcat.HEAD_LINES + Longcat.FEET_LINES); + return new Longcat(totalLines - nonBodyLines); + } + + static int lineCount(String s) { + int lines = 0; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c == '\\\n') { + lines++; + } + } + return lines; } } " | patch -p1 echo '--- a/src/test/java/longcat/LongcatFactoryTest.java +++ b/src/test/java/longcat/LongcatFactoryTest.java @@ -25,4 +25,19 @@ public class LongcatFactoryTest extends TestCase { Longcat longcat = factory.createLongcat(2); assertEquals(Longcat.HEAD_LINES + longcat.getBody() + Longcat.FEET_LINES, longcat.toString()); } + + public void test__Longcat_length_specified_in_meters() { + Longcat longcat = factory.createLongcat(1, LengthUnit.METERS); + int lines = LongcatFactoryImpl.lineCount(longcat.toString()); + assertEquals(LengthUnit.LINES.from(1, LengthUnit.METERS), lines); + } + + public void test__Too_short_longcat() { + try { + factory.createLongcat(0, LengthUnit.METERS); + fail(); + } catch (IllegalArgumentException e) { + assertEquals("Longcat can not be that short!", e.getMessage()); + } + } } ' | patch -p1 svn ci -m "Specifying Longcat length with natural length units" svn up echo '--- a/src/main/java/longcat/LengthUnit.java +++ b/src/main/java/longcat/LengthUnit.java @@ -2,11 +2,7 @@ public enum LengthUnit { -<<<<<< .mine - METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451.9), LINES("lines", 0.009); -======= - METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451.9), EIFFEL("eiffels", 300.65); ->>>>>>> .r8 + METERS("m", 1.0), FEET("ft", 0.3048), PETRONAS("petronas", 451.9), EIFFEL("eiffels", 300.65), LINES("lines", 0.009); private final String name; private final double lengthInMeters; ' | patch -p1 svn resolved src/main/java/longcat/LengthUnit.java svn ci -m "Specifying Longcat length with natural length units" sleep 2 svn up