PAN-10 Refactored direct access of fields to getter and setter methods.
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
package edu.msudenver.tsp.services.parser;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
public class Node
|
||||
{
|
||||
String statement;
|
||||
Node left;
|
||||
Node right;
|
||||
Node center;
|
||||
Node parent;
|
||||
int depth;
|
||||
@Getter private final String statement;
|
||||
@Getter @Setter private Node left;
|
||||
@Getter @Setter private Node right;
|
||||
@Getter @Setter private Node center;
|
||||
@Getter private final Node parent;
|
||||
@Getter private final int depth;
|
||||
|
||||
public Node(final String statement, final Node parent)
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
class ParserService {
|
||||
@@ -30,7 +31,7 @@ class ParserService {
|
||||
{
|
||||
try {
|
||||
final Node tree = parseRawInput(userInput);
|
||||
final ArrayList<String> statements = retrieveStatements(tree);
|
||||
final List<String> statements = retrieveStatements(tree);
|
||||
|
||||
return true;
|
||||
} catch(final Exception e) {
|
||||
@@ -58,72 +59,67 @@ class ParserService {
|
||||
{
|
||||
int wordBeginsHere;
|
||||
|
||||
if(current.statement.contains("let"))
|
||||
if(current.getStatement().contains("let"))
|
||||
{
|
||||
current.left = new Node("let",
|
||||
current);
|
||||
current.setLeft(new Node("let", current));
|
||||
|
||||
if(current.statement.contains("if")){
|
||||
wordBeginsHere = current.statement.indexOf("if");
|
||||
} else if(current.statement.contains("then")){
|
||||
wordBeginsHere = current.statement.indexOf("then");
|
||||
if(current.getStatement().contains("if")){
|
||||
wordBeginsHere = current.getStatement().indexOf("if");
|
||||
} else if(current.getStatement().contains("then")){
|
||||
wordBeginsHere = current.getStatement().indexOf("then");
|
||||
} else {
|
||||
wordBeginsHere = current.statement.length();
|
||||
wordBeginsHere = current.getStatement().length();
|
||||
}
|
||||
|
||||
current.left.center = new Node(current.statement.substring(current.statement.indexOf("let")+"let".length(),
|
||||
current.getLeft().setCenter(new Node(current.getStatement().substring(current.getStatement().indexOf("let")+"let".length(),
|
||||
wordBeginsHere),
|
||||
current.left);
|
||||
recurse(current.left.center);
|
||||
current.getLeft()));
|
||||
recurse(current.getLeft().getCenter());
|
||||
}
|
||||
|
||||
|
||||
if(current.statement.contains("if"))
|
||||
if(current.getStatement().contains("if"))
|
||||
{
|
||||
current.center = new Node("if",
|
||||
current);
|
||||
wordBeginsHere = (current.statement.contains("then") ? current.statement.indexOf("then") : current.statement.length());
|
||||
current.setCenter(new Node("if", current));
|
||||
wordBeginsHere = (current.getStatement().contains("then") ? current.getStatement().indexOf("then") : current.getStatement().length());
|
||||
|
||||
current.center.center = new Node(current.statement.substring(current.statement.indexOf("if")+"if".length(),
|
||||
current.getCenter().setCenter(new Node(current.getStatement().substring(current.getStatement().indexOf("if")+"if".length(),
|
||||
wordBeginsHere),
|
||||
current.center);
|
||||
recurse(current.center.center);
|
||||
current.getCenter()));
|
||||
recurse(current.getCenter().getCenter());
|
||||
}
|
||||
|
||||
|
||||
if(current.statement.contains("then"))
|
||||
if(current.getStatement().contains("then"))
|
||||
{
|
||||
current.right = new Node("then",
|
||||
current);
|
||||
current.right.center = new Node(current.statement.substring(current.statement.indexOf("then")+"then".length()),
|
||||
current.right);
|
||||
recurse(current.right.center);
|
||||
current.setRight(new Node("then", current));
|
||||
current.getRight().setCenter(new Node(current.getStatement().substring(current.getStatement().indexOf("then")+"then".length()),
|
||||
current.getRight()));
|
||||
recurse(current.getRight().getCenter());
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<String> retrieveStatements(final Node parsedTree)
|
||||
public List<String> retrieveStatements(final Node parsedTree)
|
||||
{
|
||||
final ArrayList<String> statementList = new ArrayList<>();
|
||||
|
||||
traverse(parsedTree, statementList);
|
||||
|
||||
return statementList;
|
||||
return populateStatementList(parsedTree, new ArrayList<>());
|
||||
}
|
||||
|
||||
private ArrayList<String> traverse(final Node node, final ArrayList<String> statementList)
|
||||
private ArrayList<String> populateStatementList(final Node node, final ArrayList<String> statementList)
|
||||
{
|
||||
if(node == null) return statementList;
|
||||
|
||||
if(!(node.statement.contains("let") || node.statement.contains("if") || node.statement.contains("then")))
|
||||
if(node == null)
|
||||
{
|
||||
statementList.add(node.statement.trim());
|
||||
return statementList;
|
||||
}
|
||||
|
||||
traverse(node.left, statementList);
|
||||
final String statement = node.getStatement().trim();
|
||||
if(!(statement.contains("let") || statement.contains("if") || statement.contains("then")))
|
||||
{
|
||||
statementList.add(statement);
|
||||
}
|
||||
|
||||
traverse(node.center, statementList);
|
||||
|
||||
traverse(node.right, statementList);
|
||||
populateStatementList(node.getLeft(), statementList);
|
||||
populateStatementList(node.getCenter(), statementList);
|
||||
populateStatementList(node.getRight(), statementList);
|
||||
|
||||
return statementList;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@@ -102,29 +103,29 @@ public class ParserServiceTest {
|
||||
|
||||
@Test
|
||||
public void testEmptyStringReturnsEmptyList() {
|
||||
final ArrayList<String> expectedList = new ArrayList<>();
|
||||
final List<String> expectedList = new ArrayList<>();
|
||||
expectedList.add("");
|
||||
|
||||
when(mockParserService.parseRawInput(anyString())).thenReturn(new Node("", null));
|
||||
final ArrayList<String> actualList = parserService.retrieveStatements(mockParserService.parseRawInput(""));
|
||||
final List<String> actualList = parserService.retrieveStatements(mockParserService.parseRawInput(""));
|
||||
|
||||
assertEquals(expectedList, actualList);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBaseCaseReturnsXIsEven() {
|
||||
final ArrayList<String> expectedList = new ArrayList<>();
|
||||
final List<String> expectedList = new ArrayList<>();
|
||||
expectedList.add("x is even");
|
||||
expectedList.add("x^2 is even");
|
||||
|
||||
final Node testNode = new Node("if x is even then x^2 is even", null);
|
||||
testNode.center = new Node("if", testNode);
|
||||
testNode.center.center = new Node(" x is even ", testNode.center);
|
||||
testNode.right = new Node("then", testNode);
|
||||
testNode.right.center = new Node(" x^2 is even", testNode.right);
|
||||
testNode.setCenter(new Node("if", testNode));
|
||||
testNode.getCenter().setCenter(new Node(" x is even ", testNode.getCenter()));
|
||||
testNode.setRight(new Node("then", testNode));
|
||||
testNode.getRight().setCenter(new Node(" x^2 is even", testNode.getRight()));
|
||||
|
||||
when(mockParserService.parseRawInput(anyString())).thenReturn(testNode);
|
||||
final ArrayList<String> actualList = parserService.retrieveStatements(mockParserService.parseRawInput("baseCase"));
|
||||
final List<String> actualList = parserService.retrieveStatements(mockParserService.parseRawInput("baseCase"));
|
||||
|
||||
assertEquals(expectedList, actualList);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user