Fix NPE in expresion logging. Closes #2086.
This commit is contained in:
parent
4edbd40b6a
commit
08e175dc66
@ -68,7 +68,7 @@ import com.google.refine.util.ParsingUtilities;
|
||||
*/
|
||||
public abstract class ProjectManager {
|
||||
// last n expressions used across all projects
|
||||
static protected final int s_expressionHistoryMax = 100;
|
||||
static public final int EXPRESSION_HISTORY_MAX = 100;
|
||||
|
||||
// If a project has been idle this long, flush it from memory
|
||||
static protected final int PROJECT_FLUSH_DELAY = 1000 * 60 * 15; // 15 minutes
|
||||
@ -610,7 +610,7 @@ public abstract class ProjectManager {
|
||||
* @param ps
|
||||
*/
|
||||
static protected void preparePreferenceStore(PreferenceStore ps) {
|
||||
ps.put("scripting.expressions", new TopList(s_expressionHistoryMax));
|
||||
ps.put("scripting.expressions", new TopList(EXPRESSION_HISTORY_MAX));
|
||||
ps.put("scripting.starred-expressions", new TopList(Integer.MAX_VALUE));
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.google.refine.ProjectManager;
|
||||
import com.google.refine.commands.Command;
|
||||
import com.google.refine.preference.PreferenceStore;
|
||||
import com.google.refine.preference.TopList;
|
||||
|
||||
public class LogExpressionCommand extends Command {
|
||||
@ -55,9 +56,14 @@ public class LogExpressionCommand extends Command {
|
||||
|
||||
try {
|
||||
String expression = request.getParameter("expression");
|
||||
|
||||
((TopList) ProjectManager.singleton.getPreferenceStore().get("scripting.expressions"))
|
||||
.add(expression);
|
||||
|
||||
PreferenceStore prefStore = ProjectManager.singleton.getPreferenceStore();
|
||||
TopList topList = (TopList) prefStore.get("scripting.expressions");
|
||||
if (topList == null) {
|
||||
topList = new TopList(ProjectManager.EXPRESSION_HISTORY_MAX);
|
||||
prefStore.put("scripting.expressions", topList);
|
||||
}
|
||||
topList.add(expression);
|
||||
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Type", "application/json");
|
||||
|
@ -1,18 +1,33 @@
|
||||
package com.google.refine.commands.expr;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import com.google.refine.ProjectManager;
|
||||
import com.google.refine.ProjectManagerStub;
|
||||
import com.google.refine.commands.Command;
|
||||
import com.google.refine.commands.CommandTestBase;
|
||||
import com.google.refine.preference.PreferenceStore;
|
||||
import com.google.refine.preference.TopList;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class LogExpressionCommandTests extends CommandTestBase {
|
||||
|
||||
PreferenceStore prefStore;
|
||||
|
||||
@BeforeMethod
|
||||
public void setUpCommand() {
|
||||
command = new LogExpressionCommand();
|
||||
ProjectManager.singleton = mock(ProjectManager.class);
|
||||
prefStore = new PreferenceStore();
|
||||
when(ProjectManager.singleton.getPreferenceStore()).thenReturn(prefStore);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -20,4 +35,16 @@ public class LogExpressionCommandTests extends CommandTestBase {
|
||||
command.doPost(request, response);
|
||||
assertCSRFCheckFailed();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullExpressions() throws ServletException, IOException {
|
||||
prefStore.put("scripting.expressions", null);
|
||||
when(request.getParameter("csrf_token")).thenReturn(Command.csrfFactory.getFreshToken());
|
||||
when(request.getParameter("expression")).thenReturn("grel:value+'a'");
|
||||
|
||||
command.doPost(request, response);
|
||||
|
||||
TopList topList = (TopList)prefStore.get("scripting.expressions");
|
||||
Assert.assertEquals(topList.getList(), Collections.singletonList("grel:value+'a'"));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user