diff --git a/src/Spreadsheet.java b/src/Spreadsheet.java index e4f120b..5e16197 100644 --- a/src/Spreadsheet.java +++ b/src/Spreadsheet.java @@ -1,18 +1,77 @@ +import java.util.HashMap; public class Spreadsheet { + public static final String ERR_STR="#Error"; + + HashMap sheet = new HashMap(); public String get(String cell) { // to be implemented - return null; + return sheet.get(cell); } public void set(String cell, String value) { + sheet.put(cell, value); // to be implemented } public String evaluate(String cell) { // to be implemented - return null; + String val = sheet.get(cell); + String retval =ERR_STR; + + retval=strip_quote(val); + if (retval==ERR_STR) + return ERR_STR; + + if (retval.startsWith("=")) + { + retval=strip_quote(val.substring(1, val.length())); + if (retval==ERR_STR) + return ERR_STR; + else + if (retval.length()>2) + return retval; + try{ + retval=sheet.get(val.substring(1)); + } + catch (Exception e) { + + retval=ERR_STR; + + // TODO: handle exception + } + + } + + if (val.startsWith("-") || val.startsWith("+")) + retval=val; + else + retval=ERR_STR; + + return (retval); + } + public String strip_quote(String str) + { + String retval=str; + if (retval.startsWith("\"")) + { + retval=retval.substring(1); + + if (retval.endsWith("\"")) + { + retval=retval.substring(0, retval.length()-1); + } + else + retval=ERR_STR; + } + /* + else + if (!str.matches("-?\\d+(\\.\\d+)?")) + retval=ERR_STR; + */ + return retval; + } } diff --git a/tests/SpreadsheetTest.java b/tests/SpreadsheetTest.java index 9e0936a..786fc32 100644 --- a/tests/SpreadsheetTest.java +++ b/tests/SpreadsheetTest.java @@ -4,12 +4,96 @@ import org.junit.Test; + public class SpreadsheetTest { + public static final String ERR_STR="#Error"; - @Test +/* @Test public void test() { fail("Not yet implemented"); } +*/ + Spreadsheet sp= new Spreadsheet(); + + @Test + public void test_SetA1_1_Get() + { + sp.set("A1", "1"); + + assertEquals("1",sp.get("A1")); + + } + + @Test + public void test_SetA2_minus1_Evaluate() + { + sp.set("A2", "-1"); + + assertEquals("-1",sp.evaluate("A2")); + + } + + @Test + public void test_SetA2_5A_Evaluate() + { + + sp.set("A2", "5A"); + + assertEquals(ERR_STR,sp.evaluate("A2")); + + } + + @Test + public void test_A1_quoted_string() + { + sp.set("A1", "\"a string\""); + assertEquals("a string",sp.evaluate("A1")); + } + + @Test + public void test_A1_Invalid_quoted_string() + { + sp.set("A1", "\"a string"); + assertEquals(ERR_STR,sp.evaluate("A1")); + } + + @Test + public void test_A1_evaluate_formula_quoted_string() + { + sp.set("A1", "=\"a string\""); + assertEquals("a string",sp.evaluate("A1")); + } + + @Test + public void test_A1_evaluate_formula_invalid_quoted_string() + { + sp.set("A1", "=\"a string"); + assertEquals(ERR_STR,sp.evaluate("A1")); + + } + + + @Test + public void test_SetA2_formula_Refernce_A5_Evaluate() + { + + sp.set("A2", "=A5"); + sp.set("A5", "5"); + + assertEquals("5",sp.evaluate("A2")); + + } + @Test + + public void test_SetA2_formula_5A_Evaluate() + { + + sp.set("A2", "=5A"); + + assertEquals(ERR_STR,sp.evaluate("A2")); + + } + }