X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fregression%2Fbugs%2FSimanticsBug3114Test.java;fp=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fregression%2Fbugs%2FSimanticsBug3114Test.java;h=c400952f6ace536e2b3535962a55602a857daa51;hb=67fd62f9c742337ec80eef658192db198a0efaac;hp=0000000000000000000000000000000000000000;hpb=cde82ba81327d5515fdca362f7f4c70f5103ae80;p=simantics%2Fplatform.git diff --git a/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/SimanticsBug3114Test.java b/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/SimanticsBug3114Test.java new file mode 100644 index 000000000..c400952f6 --- /dev/null +++ b/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/SimanticsBug3114Test.java @@ -0,0 +1,71 @@ +package org.simantics.db.tests.regression.bugs; + +import org.junit.Test; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.WriteGraph; +import org.simantics.db.WriteOnlyGraph; +import org.simantics.db.common.request.UniqueRead; +import org.simantics.db.common.request.WriteOnlyRequest; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.event.ChangeEvent; +import org.simantics.db.event.ChangeListener; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.service.GraphChangeListenerSupport; +import org.simantics.db.service.VirtualGraphSupport; +import org.simantics.db.testing.base.ExistingDatabaseTest; + +public class SimanticsBug3114Test extends ExistingDatabaseTest { + + private Resource newResource; + + @Test + public void test() throws Exception { + + Session session = getSession(); + GraphChangeListenerSupport support = session.getService(GraphChangeListenerSupport.class); + + // This listener writes 2 versions of a functional property into the same resource. The resulting model is broken if queries are not updated correctly. + support.addMetadataListener(new ChangeListener() { + + @Override + public void graphChanged(ChangeEvent e) throws DatabaseException { + WriteGraph graph = (WriteGraph)e.getGraph(); + graph.sync(new WriteRequest(graph.getService(VirtualGraphSupport.class).getMemoryPersistent("mem")) { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + graph.claimLiteral(newResource, L0.HasName, "name", Bindings.STRING); + graph.claimLiteral(newResource, L0.HasName, "name2", Bindings.STRING); + } + + }); + + } + + }); + + // Perform host request as write only. + session.sync(new WriteOnlyRequest() { + + @Override + public void perform(WriteOnlyGraph graph) throws DatabaseException { + newResource = graph.newResource(); + graph.claim(newResource, L0.InstanceOf, null, L0.Entity); + } + + }); + + // Ensure correct results + assertEquals("name2", getSession().sync(new UniqueRead() { + @Override + public String perform(ReadGraph graph) throws DatabaseException { + return graph.getRelatedValue(newResource, L0.HasName, Bindings.STRING); + } + })); + + } + +}