Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 61 additions & 2 deletions src/Spreadsheet.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,77 @@
import java.util.HashMap;

public class Spreadsheet {
public static final String ERR_STR="#Error";

HashMap<String, String> sheet = new HashMap<String, String>();

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;
}
}
86 changes: 85 additions & 1 deletion tests/SpreadsheetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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"));

}


}