package org.cytoscape.rest;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.FileReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.NetworkTestSupport;
import org.cytoscape.rest.internal.serializer.TableModule;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
public class TableModuleTest {
private ObjectMapper tableObjectMapper;
private final NetworkTestSupport testSupport = new NetworkTestSupport();
protected ScriptEngine jsEngine;
protected Bindings bindings;
@Before
public void setUp() throws Exception {
final ScriptEngineManager manager = new ScriptEngineManager();
jsEngine = manager.getEngineByExtension("js");
assertNotNull(jsEngine);
bindings = jsEngine.createBindings();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testTableSerializer() throws Exception {
this.tableObjectMapper = new ObjectMapper();
this.tableObjectMapper.registerModule(new TableModule());
final CyNetwork network = buildNetwork();
final Collection<CyTable> tables = new ArrayList<CyTable>();
tables.add(network.getDefaultNetworkTable());
final String serializedTable = tableObjectMapper.writeValueAsString(tables);
assertNotNull(serializedTable);
System.out.println(serializedTable);
assertTrue(serializedTable.contains("\"description\""));
// parse JSON with JS Engine
parseJsonInJavaScript(serializedTable);
}
private final CyNetwork buildNetwork() {
final CyNetwork network = testSupport.getNetwork();
network.getRow(network).set(CyNetwork.NAME, "network1");
network.getDefaultNetworkTable().createColumn("description", String.class, false);
network.getRow(network).set("description", "this is a test");
// final CyNode node1 = network.addNode();
// final CyNode node2 = network.addNode();
// final CyNode node3 = network.addNode();
// final CyEdge edge = network.addEdge(node1, node2, true);
return network;
}
private final void parseJsonInJavaScript(final String result) throws Exception {
bindings.put("result", result);
// This is the actual test cases written in JavaScript.
final Reader scriptReader = new FileReader("./src/test/resources/table_test.js");
final Object jsResult = jsEngine.eval(scriptReader, bindings);
scriptReader.close();
assertNotNull(jsResult);
assertTrue(jsResult instanceof Boolean);
assertTrue((Boolean)jsResult);
}
}