From 93176d3a7f82ee2a9c12a7b7ee2e58f132164ec8 Mon Sep 17 00:00:00 2001 From: skorkko Date: Thu, 6 Oct 2016 16:49:47 +0300 Subject: [PATCH 1/2] jatketaan --- bin/.gitignore | 3 +++ bin/Spreadsheet.class | Bin 613 -> 1608 bytes bin/SpreadsheetTest.class | Bin 490 -> 1012 bytes src/Cell.java | 38 +++++++++++++++++++++++++++++++++++++ src/Spreadsheet.java | 31 ++++++++++++++++++++++++++---- tests/SpreadsheetTest.java | 16 ++++++++++++---- 6 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 bin/.gitignore create mode 100644 src/Cell.java diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..6f06ffe --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,3 @@ +/Spreadsheet.class +/SpreadsheetTest.class +/Cell.class diff --git a/bin/Spreadsheet.class b/bin/Spreadsheet.class index 92b411f05752a6cee6d06c9769e1b70d40aa0840..9dbc49d1a8d13e5098b1bd5be41ec9e3aeeff33e 100644 GIT binary patch literal 1608 zcmZvbQCAy97>3{3gzhG60t8A5r7gt@BrQc+D7K3zBDH8p)l@2YH6(Mw)@8%lY(y`lYV{n@y;_<4F!6t%JZ56eWhrv6}sMRMTL$)s^Zpt8MXo?kUzV+ zR9fXJXPLV$EV;fLE(;{43!4JT)kaOFkwC^q3TYF40t2U+AIat}v!{_oCIx||){h*6#AvcS}I8zF+Pgn{eVop&RJ&0bu=H4|3_GN-bXv@wqB zq?EOqz{T!lZ6}<+!CIDLu|xDCluPo88L@50xKkl22`{;xhqrS2oL$D4S#3#6y9J2rrUe_dHdX-bzq!?eXB+K~?RC zZo{|mh-GMk@mfPQ{i$$V9k@+4%^JSY-SFlAF7U)e-F{Ub)3}^zv)V&6;#zj zSGPxhR|nkIOt{XjPwH z8Ux1|+{#_d?h3w&u!{Un5DpPw3Vj5;LBRX4QAP$; zzT^W&Z*qs-2F5MSa3*jYvvDy$v*aXWiyHI@9|)9RV07jP^8$ZjaO2i*cyRL=2B%3?xkm6JOK(1)Wu(g3B@NYv$1^P6zfu@&(35k|((3nKo`}hP+Q+>4gaR z?{k1hdBtGr5sdNbuV4~aF~#{DXWFx3RA4LGzx^Nk_C-ek literal 613 zcma)2%T5A85Ug32hdcyd=us~U9OPoWVDw<(X`=@W_hFg9kaaQ3!guM(#DgE;M;WVk zH%i1rFWuGCT~*!l{_*+-;0y;vI0}{iV`TJbJ~1XP!c}NY^-^~O9ge$q!>RFOg~Ejm zZG5SaYqbXo?)7YB%E)1(iaZJmb8p! zWsjm`LyzN@_ifydBO8u;?e!}nS0K?=g$84`Sm-1ZB#VG1m+q8Pg))SNXp<)`hkXoK)Pq0 zSf#$@bW8iKo@@sKhCChcLw0JX0xNab>y~<`T8?yWDNdL14R1MPT6|bOQTW zHf`T-^<~v@+`v+MJ{cki2SniU>DM;#b_C*uVpAZo>vp7pI8r8NU>KM~MnhU4|6gts zSzIH6<2q7cwNQ+Z{j1y=2wXQYg=uP1w;lN|JZ?$v&|>8R*}B`d`c2ETl|K$9f+L%) zWa@uN$X;|`2IaSWfA3TYOxf=UBqKQn7Ln4iED)=fb=(sWWfi+`VijxDgJ1&dh5BSF zjli>=ZsqStv1y=y4Gl#WHaWlN1hOkV6PtJ-pq*I#Q0{*e$QAaA5s>k*ield~QNkm# zcNP2E73|T>aX|(iV_U-$wmq3r)%T?rn0Sh30;V_DR;P{8^2%{d(%TvN zfVpwbcZk_9nEyOFmE$@)!qJi7*(9@XFlI7Stv9hiD{zZgu}g;Aj49j?%!$!1f5YPY zbKI?OW|y-0GpuCui6PeMo#EjSR=_8AKTw1oDg0 z^|MNWM(R5j7pE4L@GyuoNC3@EOU%q+WDwQx$x19s)Xz!GOVtMd9*6=U%?so)GVlRq vnHcz?sszC5Kpuq{#3m%TgFzT!5*JV{1JE2+pl)skNtkhLaN~eNKqXQDu^TUk diff --git a/src/Cell.java b/src/Cell.java new file mode 100644 index 0000000..4ce2abc --- /dev/null +++ b/src/Cell.java @@ -0,0 +1,38 @@ + +public class Cell { + + private String cellName; + private String cellContent; + private int cellInt; + private boolean isNumber; + + public Cell(String name, String content) { + this.cellName = name; + this.cellContent = content; + this.isNumber = false; + } + + public String getCellContent() { + if(isNumber) { + return Integer.toString(cellInt); + } + return this.cellContent; + } + + public String getCellName() { + return this.cellName; + } + + public void setCellContent(String content) { + try { + int i = Integer.parseInt(content); + } catch(NumberFormatException nfe) { + this.cellContent = content; + this.isNumber = false; + return; + } + this.cellContent = ""; + this.isNumber = true; + this.cellInt = Integer.parseInt(content); + } +} diff --git a/src/Spreadsheet.java b/src/Spreadsheet.java index e4f120b..43ecc92 100644 --- a/src/Spreadsheet.java +++ b/src/Spreadsheet.java @@ -1,13 +1,36 @@ +import java.util.HashSet; +import java.util.Set; public class Spreadsheet { - + + private Set cells; + + public Spreadsheet() { + cells = new HashSet(); + cells.add(new Cell("A1", "")); + cells.add(new Cell("A2", "")); + cells.add(new Cell("A3", "")); + cells.add(new Cell("A4", "")); + cells.add(new Cell("A5", "")); + } + public String get(String cell) { - // to be implemented - return null; + for(Cell c : cells) { + if(c.getCellName() == cell) { + return c.getCellContent(); + } + } + throw new IllegalArgumentException("Cell doesn't exist"); } public void set(String cell, String value) { - // to be implemented + for(Cell c : cells) { + if(c.getCellName() == cell) { + c.setCellContent(value); + return; + } + } + throw new IllegalArgumentException("Cell doesn't exist"); } public String evaluate(String cell) { diff --git a/tests/SpreadsheetTest.java b/tests/SpreadsheetTest.java index 9e0936a..5fc0719 100644 --- a/tests/SpreadsheetTest.java +++ b/tests/SpreadsheetTest.java @@ -1,15 +1,23 @@ import static org.junit.Assert.*; - +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; public class SpreadsheetTest { + + @Rule + public ExpectedException expectedEx = ExpectedException.none(); @Test - public void test() { - fail("Not yet implemented"); - + public void set1Get1() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "1"); + assertEquals("1", 1, sheet.get("A1")); } } + +// expectedEx.expect(IllegalArgumentException.class); +// expectedEx.expectMessage(""); \ No newline at end of file From 61bc2bea6e11a238282f3a2b9ccbdb2ef25a511c Mon Sep 17 00:00:00 2001 From: skorkko Date: Thu, 13 Oct 2016 16:41:43 +0300 Subject: [PATCH 2/2] req 8 --- bin/Spreadsheet.class | Bin 1608 -> 2596 bytes bin/SpreadsheetTest.class | Bin 1012 -> 2348 bytes src/Cell.java | 36 +++++++++++++++++++++-- src/Spreadsheet.java | 57 ++++++++++++++++++++++++++++++------- tests/SpreadsheetTest.java | 54 ++++++++++++++++++++++++++++++++++- 5 files changed, 133 insertions(+), 14 deletions(-) diff --git a/bin/Spreadsheet.class b/bin/Spreadsheet.class index 9dbc49d1a8d13e5098b1bd5be41ec9e3aeeff33e..d46d90e68b0594c14941b238cac48f3b27129aac 100644 GIT binary patch literal 2596 zcmZ`**;f-+82{a5;)FOL1O!2?7#EfxalwrUiU^n*aEXG@bqLoa8WNmLEOy^(_x7pB zKKWE%e9)dY)Ot?sYx@uMsZV|BAJE61(%+p75Gp-D?#y@Zcfa5A-5Y-W=f|G_^x#V! z9)b0VIZK)|g|w8m4o#r;s(HhVWX)VEa(4QvOxgmzq|9au0vqDaT+z;CBME6o1*#I6 zRL-=EmK11OJ$o!Z$gF5TSFJmi$z|+*0dIT9xPUg8pOFE0QEi|K0Ua9z>Q;6>Z5Gnp zJ%AciS3w|Xz=w4@8dN5?^rKP0GqBH(O#%p@9xZC0%>r%hWe5)Vgl%PVspylDj`8)_ zifuZc5~yA&%aR6Kv7IQ*nHhnNm7A57h;~f*u|pN#@5e4R9`K`0jXi#JsPUi@DU*|9 z#o1|TT{Ne&6ebwYC(Z1*X=T*A8`SJ{hLTptEA*#S-hyJj7yEVWTjfQWj)4Q{p`gjM zX${aBtv%K;7@$ap3>?N0+L=tt1>DwCE7j;oZofl-VJ1eh|Mw`Pl3Q^_@@-0#OZ z1Ltu;Ku?>6F$XGJb4tfWfsjMW0UXO_Wy;JBSgGPH%MHyZ<(!?#=loz72NjUknY=9I z+U!<2pDEC|1TL#yBvdWQY32ROb}l}iryFLrNWN8>!ZI{5B_NWtwtQ^Z8424=UK=&% z+=lT>m1Wwp3Q0&EY|)CNnz&i8<*b1#NU@3XMWs!-bS57;$CF^Qx-@60eg@ZcTotHy zkgc9JkX7LIIhB#kDIs$Pp2Y?AG-u$tGOfln&2>SwU%`NhBdT$W25#Ub^2o|u%1%3H zKBgva8h9D6kaVFqU2x8(>abXBjeb-+zGmQcyuss?DJY>Y$Scy4xg=Fv)AOkS-oiUN z-d?&&$_BDcQqnT;F5Y8n&zV+1#{Rc&Vt#x;;5(etqvJz?Z7b%LPqebjTxkTd%UvO) z?G-MsxsbB&#is^7Q}@d{dA(?=`!tZq7pW2k1=)?l8|Fjp9aPQd8G9*zRt*zA(| zi(t-rHt0S8AF_=h+u(CfR4UCq9S=o9!E^}SlNR>ENT8`L&y zT_ub(Yg=w^~BRabdCIMVtf~<>2n2)WqiER!@_da=2W^Gko&!XPoEdIo9are$V3tYVjg-w!r&0YQ!Ro z@w-gu*vnt#Xg?gId3;<2{$#GkjPuKE$L^wM&l1;B@>5Jh-(p%lmXPK!dz;pC%$HzI zsPR4%9O}QULA`8Kh{Sec8+M@syV;*@w5pSMLKvYf%BEIAA&_Od=Uuu@T&t*g9BPN* zU8KKSnO2$7BJRUNXNStnuA0VLrZUs_hOM z!fHmFQEkFkU-*7!cmc28R!`v{@Mhm#RE-ATkMr$5%Zwn7v$(}F%Kk%y4D2J^{ix&D z>Sq2+6k;?=P<>Ql2))ecV-CMAaGY2B30%U-3SB0ab(wI?7hLDVNBG#)B>-QjrD{aS zEgvJi&0MNq@l6>VsWiCdKL(fZ33+JumTdgPdygq)=#5Sn4%5C7LOx9shiTZE3TTmK aXb~4$6X~v4)&S2FmNgRI=d9tu7ykl5JR=9d{bMBrIi!TWnt1M#eybn}%D#gsAs+B55+kLIaXHDD}IC}Vv zR&~i?-FRqW33KFQ{vV$}VBIONNr4XOT^uFd7Xe!s?zh0tMg{_1+|yg=FnH!tJ2T#yl2C5W^7^a0eRhQjS8~r(l>6Cho!Hf;m=T5&Z|WI~?TM z*lpTLV-o|tMvJ$QZt`}f3H)H&d+>>W9U^Xc$bASh_M;aAIEgrhFo-1cF=ifi%HNFL z#EIa^OqN-2>N@jJ=8qC OwJhzxRbbiISN;L1F@#J2 diff --git a/bin/SpreadsheetTest.class b/bin/SpreadsheetTest.class index d3be153e76adad3eec98d11a50e07eded8c1550e..d7d8dedad642b991520e76ecbee3de766e84ecb2 100644 GIT binary patch literal 2348 zcma)+3sc)h6otJ@@AkmQ>hmMa}!EqfaFg243!7h^91A!ZHT)|cLByTx#qjtC}y={}q1@ydIGVP-2 zS!&*V*d6R!T*^THR13Kl&6h#u8NVN{R5dso#T|j(P)-aZ=+iJJ5HT_u#sx%1J)4YU z3e)TdiwPuW^6g#O3OviHWY0cH6;6)k>SMZ^VFlAEyN8BT-gKlMl7=66UtZSm6MM31EGdt@Qf~U? zl&k;OEU_)O=9T1AOP$BT(D6}+YF^m@37+9DzT0?!)IsJo%9*-rysHz=7YVPuoIOT_ zBOpHemfv@{_9q5^=RATTUa!^bXy|5aFS9>Zk&SrV#4XMQhFL4pBHZRPRreKhBD{~j z$H>lGjOOp@clE?ECiH}!;P@EHcevLk>5K>crJucOVNfJRhl%7^9&Y96?i~y z7vJAtrohq}1$)d?3dU#uz@WZ#j8E%>>@il`nhffA*;X;ceko=T**clSTw{XQwvzFt zl3^-6QL=XV4y>yVtm{uN?7%4N-em{I*nvcdJ9tf9ZUx+ZMYvZAEz;F2Z0E#!)bgQxloQ zrNf@WUWAjmxqeXitzmogFV=Ucao`egs3=4xRcvQBg-Yh?O8tnQ&9S01O`>2tj~~-u zFq@eqbvfZQyV54ht%1_nw`HF0vC#6`<{P!U7wV&q*YKJvw!Eg5vm>-(Kc~BtjK-Jg g$px%Yq$DcS5NBN+|F4HC8$w0dXPl!%7s8s$U&k^uEdT%j diff --git a/src/Cell.java b/src/Cell.java index 4ce2abc..aa45c8f 100644 --- a/src/Cell.java +++ b/src/Cell.java @@ -3,18 +3,26 @@ public class Cell { private String cellName; private String cellContent; - private int cellInt; private boolean isNumber; + private boolean isFormula; public Cell(String name, String content) { this.cellName = name; this.cellContent = content; this.isNumber = false; + this.isFormula = false; } public String getCellContent() { - if(isNumber) { - return Integer.toString(cellInt); + if(isFormula || isNumber) { + return this.cellContent; + } + if(cellContent.charAt(0) == '\'' && cellContent.charAt(cellContent.length()-1) == '\'') { + StringBuilder build = new StringBuilder(this.cellContent); + build.deleteCharAt(0); + build.deleteCharAt(cellContent.length()-2); + String result = build.toString(); + return result; } return this.cellContent; } @@ -23,6 +31,27 @@ public String getCellName() { return this.cellName; } + public void setCellContent(String content) { + try { + int i = Integer.parseInt(content); + } catch(NumberFormatException nfe) { + this.cellContent = content; + this.isNumber = false; + return; + } + this.cellContent = content; + this.isNumber = true; + } + + public void setFormula(boolean isFormula) { + this.isFormula = isFormula; + } + + public boolean isFormula() { + return this.isFormula; + } + + /* public void setCellContent(String content) { try { int i = Integer.parseInt(content); @@ -35,4 +64,5 @@ public void setCellContent(String content) { this.isNumber = true; this.cellInt = Integer.parseInt(content); } + */ } diff --git a/src/Spreadsheet.java b/src/Spreadsheet.java index 43ecc92..5560466 100644 --- a/src/Spreadsheet.java +++ b/src/Spreadsheet.java @@ -14,28 +14,65 @@ public Spreadsheet() { cells.add(new Cell("A5", "")); } - public String get(String cell) { + public void set(String cell, String value) { + boolean isFormula = false; + if(value.charAt(0) == '=') { + isFormula = true; + } + value = checkErrors(value); for(Cell c : cells) { if(c.getCellName() == cell) { - return c.getCellContent(); - } + c.setCellContent(value); + c.setFormula(isFormula); + return; + } } throw new IllegalArgumentException("Cell doesn't exist"); } - public void set(String cell, String value) { + public String evaluate(String cell) { for(Cell c : cells) { + //System.out.println("Cell: " + c.getCellName() + ", Content: " + c.getCellContent() + ", isFormula: " + c.isFormula()); if(c.getCellName() == cell) { - c.setCellContent(value); - return; - } + System.out.println(c.getCellName()); + if(c.isFormula()) { + evaluate(c.getCellContent()); + } + + return c.getCellContent(); + } } throw new IllegalArgumentException("Cell doesn't exist"); } - public String evaluate(String cell) { - // to be implemented - return null; + private String checkErrors(String value) { + System.out.println(value); + if(value.charAt(0) == '=') { + value = value.substring(1, value.length()); + System.out.println(value); + } + if(value.charAt(0) == '\'' && value.charAt(value.length()-1) == '\'') { + return value; + } + if(isCellReference(value)) { + return value; + } + try { + int i = Integer.parseInt(value); + } catch(NumberFormatException nfe) { + value = "#Error"; + return value; + } + return value; + } + + private boolean isCellReference(String value) { + for(Cell c : cells) { + if(c.getCellName().equals(value)) { + return true; + } + } + return false; } } diff --git a/tests/SpreadsheetTest.java b/tests/SpreadsheetTest.java index 5fc0719..a895052 100644 --- a/tests/SpreadsheetTest.java +++ b/tests/SpreadsheetTest.java @@ -14,8 +14,60 @@ public class SpreadsheetTest { public void set1Get1() { Spreadsheet sheet = new Spreadsheet(); sheet.set("A1", "1"); - assertEquals("1", 1, sheet.get("A1")); + assertEquals("1", "1", sheet.evaluate("A1")); } + + @Test + public void nonExistingCellException() throws IllegalArgumentException { + expectedEx.expect(IllegalArgumentException.class); + expectedEx.expectMessage("Cell doesn't exist"); + Spreadsheet sheet = new Spreadsheet(); + sheet.evaluate("A12"); + } + + @Test + public void set1AGetError() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "Error"); + assertEquals("Error", "#Error", sheet.evaluate("A1")); + } + + @Test + public void setRandomAndOneApostropheGetError() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "124odskjfopd'421421,,,,,'''"); + assertEquals("Error", "#Error", sheet.evaluate("A1")); + } + + @Test + public void setStringGetString() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "'Text'"); + assertEquals("Text", "Text", sheet.evaluate("A1")); + } + + @Test + public void setEqualReturnString() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "='Text'"); + assertEquals("Text", "Text", sheet.evaluate("A1")); + } + + @Test + public void setEqualReturnErroneusString() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A1", "='Text"); + assertEquals("Text", "#Error", sheet.evaluate("A1")); + } + + @Test + public void checkCellReference() { + Spreadsheet sheet = new Spreadsheet(); + sheet.set("A5", "99"); + sheet.set("A1", "=A5"); + assertEquals("99", sheet.evaluate("A1")); + } + }