/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
package org.mozilla.android.sync.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.parser.ParseException;
import org.junit.Test;
import org.mozilla.gecko.sync.CommandProcessor;
import org.mozilla.gecko.sync.CommandRunner;
import org.mozilla.gecko.sync.ExtendedJSONObject;
import org.mozilla.gecko.sync.GlobalSession;
import org.mozilla.gecko.sync.NonObjectJSONException;
public class TestCommandProcessor extends CommandProcessor {
public static final String commandType = "displayURI";
public static final String commandWithNoArgs = "{\"command\":\"displayURI\"}";
public static final String commandWithNoType = "{\"args\":[\"https://bugzilla.mozilla.org/show_bug.cgi?id=731341\",\"PKsljsuqYbGg\"]}";
public static final String wellFormedCommand = "{\"args\":[\"https://bugzilla.mozilla.org/show_bug.cgi?id=731341\",\"PKsljsuqYbGg\"],\"command\":\"displayURI\"}";
public static final String wellFormedCommandWithNullArgs = "{\"args\":[\"https://bugzilla.mozilla.org/show_bug.cgi?id=731341\",null,\"PKsljsuqYbGg\",null],\"command\":\"displayURI\"}";
private boolean commandExecuted;
// Session is not used in these tests.
protected final GlobalSession session = null;
public class MockCommandRunner extends CommandRunner {
public MockCommandRunner(int argCount) {
super(argCount);
}
@Override
public void executeCommand(final GlobalSession session, List<String> args) {
commandExecuted = true;
}
}
@Test
public void testRegisterCommand() throws NonObjectJSONException, IOException, ParseException {
assertNull(commands.get(commandType));
this.registerCommand(commandType, new MockCommandRunner(1));
assertNotNull(commands.get(commandType));
}
@Test
public void testProcessRegisteredCommand() throws NonObjectJSONException, IOException, ParseException {
commandExecuted = false;
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(wellFormedCommand);
this.registerCommand(commandType, new MockCommandRunner(1));
this.processCommand(session, unparsedCommand);
assertTrue(commandExecuted);
}
@Test
public void testProcessUnregisteredCommand() throws NonObjectJSONException, IOException, ParseException {
commandExecuted = false;
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(wellFormedCommand);
this.processCommand(session, unparsedCommand);
assertFalse(commandExecuted);
}
@Test
public void testProcessInvalidCommand() throws NonObjectJSONException, IOException, ParseException {
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(commandWithNoType);
this.registerCommand(commandType, new MockCommandRunner(1));
this.processCommand(session, unparsedCommand);
assertFalse(commandExecuted);
}
@Test
public void testParseCommandNoType() throws NonObjectJSONException, IOException, ParseException {
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(commandWithNoType);
assertNull(CommandProcessor.parseCommand(unparsedCommand));
}
@Test
public void testParseCommandNoArgs() throws NonObjectJSONException, IOException, ParseException {
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(commandWithNoArgs);
assertNull(CommandProcessor.parseCommand(unparsedCommand));
}
@Test
public void testParseWellFormedCommand() throws NonObjectJSONException, IOException, ParseException {
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(wellFormedCommand);
Command parsedCommand = CommandProcessor.parseCommand(unparsedCommand);
assertNotNull(parsedCommand);
assertEquals(2, parsedCommand.args.size());
assertEquals(commandType, parsedCommand.commandType);
}
@Test
public void testParseCommandNullArg() throws NonObjectJSONException, IOException, ParseException {
ExtendedJSONObject unparsedCommand = new ExtendedJSONObject(wellFormedCommandWithNullArgs);
Command parsedCommand = CommandProcessor.parseCommand(unparsedCommand);
assertNotNull(parsedCommand);
assertEquals(4, parsedCommand.args.size());
assertEquals(commandType, parsedCommand.commandType);
final List<String> expectedArgs = new ArrayList<String>();
expectedArgs.add("https://bugzilla.mozilla.org/show_bug.cgi?id=731341");
expectedArgs.add(null);
expectedArgs.add("PKsljsuqYbGg");
expectedArgs.add(null);
assertEquals(expectedArgs, parsedCommand.getArgsList());
}
}