package org.mozilla.io;
import java.io.*;
import javax.microedition.io.*;
import com.nokia.mid.s40.io.LocalMessageProtocolMessage;
import com.nokia.mid.s40.io.LocalMessageProtocolConnection;
import com.nokia.mid.s40.codec.DataEncoder;
import com.nokia.mid.s40.codec.DataDecoder;
import gnu.testlet.TestHarness;
import gnu.testlet.Testlet;
public class TestNokiaPhoneStatusServer implements Testlet {
public int getExpectedPass() { return 27; }
public int getExpectedFail() { return 0; }
public int getExpectedKnownFail() { return 0; }
LocalMessageProtocolConnection client;
static final String PROTO_NAME = "nokia.phone-status";
public void testProtocolVersion(TestHarness th) throws IOException {
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Common");
dataEncoder.putStart(14, "message");
dataEncoder.put(13, "name", "ProtocolVersion");
dataEncoder.put(10, "version", "1.[0-10]");
dataEncoder.putEnd(14, "message");
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
byte[] clientData = msg.getData();
DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
String name = dataDecoder.getString(13);
th.check(name, "Common");
th.check(dataDecoder.getName(), "message");
dataDecoder.getStart(14);
String string2 = dataDecoder.getString(13);
String string = string2 + ":" + dataDecoder.getString(10);
dataDecoder.getEnd(14);
th.check(string.startsWith("ProtocolVersion:"));
th.check(string.indexOf(58) + 1 != -1);
th.check(string.substring(string.indexOf(58) + 1).length() > 0);
}
public void testSubscribeMessages(TestHarness th) throws IOException {
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Query");
dataEncoder.putStart(15, "subscriptions");
dataEncoder.put(10, "battery", "CurrentStateOnly");
dataEncoder.put(10, "wifi_status", "CurrentStateOnly");
dataEncoder.put(10, "network_status", "CurrentStateOnly");
dataEncoder.putEnd(15, "subscriptions");
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
byte[] clientData = msg.getData();
DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
th.check(dataDecoder.getString(13), "Query");
th.check(dataDecoder.getString(10), "OK");
dataDecoder.getStart(15);
int i = 0;
while (dataDecoder.listHasMoreItems()) {
String name = dataDecoder.getName();
if (name.equals("battery")) {
dataDecoder.getStart(14);
th.check(dataDecoder.getInteger(2), 1);
th.check(dataDecoder.getBoolean(), true);
dataDecoder.getEnd(14);
} else if (name.equals("network_status")) {
dataDecoder.getStart(14);
th.check(dataDecoder.getString(10), "Home");
th.check(dataDecoder.getBoolean(), true);
dataDecoder.getEnd(14);
} else if (name.equals("wifi_status")) {
dataDecoder.getStart(14);
th.check(dataDecoder.getBoolean(), true);
dataDecoder.getEnd(14);
} else {
th.fail("Unexpected name: " + name);
}
i++;
}
th.check(i, 3);
dataDecoder.getEnd(15);
}
private native void sendFakeOnlineEvent();
private native void sendFakeOfflineEvent();
void testNotify(TestHarness th, boolean online) throws IOException {
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
byte[] clientData = msg.getData();
DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
th.check(dataDecoder.getString(13), "ChangeNotify");
dataDecoder.getString(10);
dataDecoder.getStart(15);
th.check(dataDecoder.getName(), "network_status");
dataDecoder.getStart(14);
th.check(dataDecoder.getString(10), "Home");
th.check(dataDecoder.getBoolean(), online);
dataDecoder.getEnd(14);
dataDecoder.getEnd(15);
msg = client.newMessage(null);
client.receive(msg);
clientData = msg.getData();
dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
th.check(dataDecoder.getString(13), "ChangeNotify");
dataDecoder.getString(10);
dataDecoder.getStart(15);
th.check(dataDecoder.getName(), "wifi_status");
dataDecoder.getStart(14);
th.check(dataDecoder.getBoolean(), online);
dataDecoder.getEnd(14);
dataDecoder.getEnd(15);
}
public void testChangeNotify(TestHarness th) throws IOException {
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Query");
dataEncoder.putStart(15, "subscriptions");
dataEncoder.put(10, "battery", "Disable");
dataEncoder.put(10, "wifi_status", "Enable");
dataEncoder.put(10, "network_status", "Enable");
dataEncoder.putEnd(15, "subscriptions");
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
sendFakeOnlineEvent();
testNotify(th, true);
sendFakeOfflineEvent();
testNotify(th, false);
}
public void test(TestHarness th) {
try {
client = (LocalMessageProtocolConnection)Connector.open("localmsg://" + PROTO_NAME);
testProtocolVersion(th);
testSubscribeMessages(th);
testChangeNotify(th);
client.close();
} catch (IOException ioe) {
th.fail("Unexpected exception");
ioe.printStackTrace();
}
}
}