add tests

This commit is contained in:
Naoyuki Kanezawa
2013-04-30 03:30:28 +09:00
parent 29f179ed4e
commit 111f877f1a
3 changed files with 115 additions and 26 deletions

View File

@@ -1,6 +1,8 @@
package com.github.nkzawa.socketio.client;
import com.github.nkzawa.emitter.Emitter;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -11,6 +13,8 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.*;
import static org.hamcrest.CoreMatchers.is;
@@ -110,7 +114,7 @@ public class IOTest {
@Test(timeout = TIMEOUT)
public void message() throws URISyntaxException, InterruptedException {
final BlockingQueue<String> events = new LinkedBlockingQueue<String>();
final BlockingQueue<Object[]> events = new LinkedBlockingQueue<Object[]>();
IO.Options opts = new IO.Options();
opts.forceNew = true;
@@ -119,19 +123,82 @@ public class IOTest {
@Override
public void call(Object... objects) {
System.out.println("connect:");
socket.send("hi");
socket.send("foo", "bar");
}
}).on(Socket.EVENT_MESSAGE, new Emitter.Listener() {
@Override
public void call(Object... objects) {
System.out.println("message: " + objects);
events.offer((String) objects[0]);
System.out.println(String.format(
objects.length > 1 ? "message: %s, %s" : "message: %s", objects));
events.offer(objects);
}
});
socket.connect();
assertThat(events.take(), is("hello client"));
assertThat(events.take(), is("hi"));
assertThat(events.take(), is(new Object[] {"hello client"}));
assertThat(events.take(), is(new Object[] {"foo", "bar"}));
socket.disconnect();
}
@Test(timeout = TIMEOUT)
public void event() throws URISyntaxException, InterruptedException {
final BlockingQueue<Object[]> events = new LinkedBlockingQueue<Object[]>();
Map<String, String> data = new HashMap<String, String>() {{
put("foo", "1");
}};
final JsonElement jsonData = new Gson().toJsonTree(data, Map.class);
IO.Options opts = new IO.Options();
opts.forceNew = true;
socket = IO.socket("http://localhost:" + PORT, opts);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... objects) {
System.out.println("connect:");
socket.emit("echo", jsonData, "bar");
}
}).on("echoBack", new Emitter.Listener() {
@Override
public void call(Object... objects) {
System.out.println(String.format("echoBack: %s, %s", objects));
events.offer(objects);
}
});
socket.connect();
assertThat(events.take(), is(new Object[] {jsonData, "bar"}));
socket.disconnect();
}
@Test(timeout = TIMEOUT)
public void ack() throws URISyntaxException, InterruptedException {
final BlockingQueue<Object[]> events = new LinkedBlockingQueue<Object[]>();
Map<String, String> data = new HashMap<String, String>() {{
put("foo", "1");
}};
final JsonElement jsonData = new Gson().toJsonTree(data, Map.class);
IO.Options opts = new IO.Options();
opts.forceNew = true;
socket = IO.socket("http://localhost:" + PORT, opts);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... objects) {
System.out.println("connect:");
socket.emit("ack", new Object[] {jsonData, "bar"}, new Socket.Ack() {
@Override
public void call(Object... args) {
System.out.println(String.format("ack: %s, %s", args));
events.offer(args);
}
});
}
});
socket.connect();
assertThat(events.take(), is(new Object[] {jsonData, "bar"}));
socket.disconnect();
}
}

View File

@@ -5,14 +5,23 @@ var server = require('http').Server()
io.on('connection', function(socket) {
socket.send('hello client');
socket.on('message', function(data) {
console.log('message:', data);
socket.send(data);
socket.on('message', function() {
var args = Array.prototype.slice.call(arguments);
console.log('message:', args);
socket.send.apply(socket, args);
});
socket.on('echo', function(data) {
console.log('echo:', data);
socket.emit('echoBack', data);
socket.on('echo', function() {
var args = Array.prototype.slice.call(arguments);
console.log('echo:', args);
socket.emit.apply(socket, ['echoBack'].concat(args));
});
socket.on('ack', function() {
var args = Array.prototype.slice.call(arguments),
callback = args.pop();
console.log('ack:', args);
callback.apply(null, args);
});
socket.on('disconnect', function() {