+package org.simantics.db.tests.api.request.external;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Session;
+import org.simantics.db.procedure.Listener;
+import org.simantics.db.request.ExternalRead;
+import org.simantics.db.testing.cases.FreshDatabaseTest;
+
+public class CachingExternalReads extends FreshDatabaseTest {
+
+ public static final String RESULT = "Hello World!";
+
+ static class MyExternalRead implements ExternalRead<String> {
+
+ int registerCount = 0;
+
+ @Override
+ public void register(ReadGraph graph, Listener<String> procedure) {
+ if (DEBUG)
+ System.out.println("register");
+ ++registerCount;
+ procedure.execute(RESULT);
+ }
+
+ @Override
+ public void unregistered() {
+ if (DEBUG)
+ System.out.println("unregistered");
+ }
+
+ public int getRegisterCount() {
+ return registerCount;
+ }
+ };
+
+ @Test
+ public void test() throws Exception {
+ Session session = Simantics.getSession();
+
+ MyExternalRead read = new MyExternalRead();
+
+ for(int i=0;i<10;++i) {
+ session.syncRequest(read, new Listener<String>() {
+ @Override
+ public void execute(String result) {
+ if (DEBUG)
+ System.out.println("=> " + result);
+ }
+
+ @Override
+ public void exception(Throwable t) {
+ t.printStackTrace();
+ }
+
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+
+ });
+ }
+
+ Assert.assertEquals(1, read.registerCount);
+ }
+}