/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.smodel; import jetbrains.mps.persistence.PersistenceRegistry; import jetbrains.mps.persistence.java.library.JavaClassesPersistence; import jetbrains.mps.util.annotation.ToRemove; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * evgeny, 3/15/13 */ public class SModelReferenceTest { private PersistenceRegistry myPersistenceRegistry = null; @Before public void setUp() { if (PersistenceFacade.getInstance() == null) { myPersistenceRegistry = new PersistenceRegistry(); myPersistenceRegistry.init(); new JavaClassesPersistence(myPersistenceRegistry).init(); } Assert.assertNotNull(PersistenceFacade.getInstance()); } @After public void tearDown() { if (myPersistenceRegistry != null) { myPersistenceRegistry.dispose(); myPersistenceRegistry = null; } } private PersistenceFacade getPersistenceFacade() { return myPersistenceRegistry == null ? PersistenceFacade.getInstance() : myPersistenceRegistry; } /** * We've changed persistence for java stub model references, hence no reason to check they are serialized in the same way we can understand. * Instead, we ensure that once they got parsed, they do match our hand-crafted reference reference (sorry ;) */ @Test @ToRemove(version = 3.3) public void testLegacyJavaStub() { SModelReference r1 = getPersistenceFacade().createModelReference("f:java_stub#6354ebe7-c22a-4a0f-ac54-50b52ab9b065#java.util(JDK/java.util@java_stub)"); SModelReference r2 = getPersistenceFacade().createModelReference("f:java_stub#6354ebe7-c22a-4a0f-ac54-50b52ab9b065#java.util(java.util@java_stub)"); SModelReference r3 = getPersistenceFacade().createModelReference( "6354ebe7-c22a-4a0f-ac54-50b52ab9b065/f:java_stub#6354ebe7-c22a-4a0f-ac54-50b52ab9b065#java.util(JDK/java.util@java_stub)"); SModelReference r4 = getPersistenceFacade().createModelReference( "6354ebe7-c22a-4a0f-ac54-50b52ab9b065/f:java_stub#java.util(JDK/java.util@java_stub)"); // need () otherwise id is treated as module name SModuleReference moduleRefNoName = getPersistenceFacade().createModuleReference("6354ebe7-c22a-4a0f-ac54-50b52ab9b065()"); SModuleReference moduleRefWithName = getPersistenceFacade().createModuleReference("6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)"); org.jetbrains.mps.openapi.model.SModelId modelId = getPersistenceFacade().createModelId("java:java.util"); SModelReference expected1 = getPersistenceFacade().createModelReference(moduleRefNoName, modelId, "java.util@java_stub"); SModelReference expected2 = getPersistenceFacade().createModelReference(moduleRefWithName, modelId, "java.util@java_stub"); assertEquals("[sanity]", expected1, expected2); // model references shall be equal regardless module name and module id present assertEquals(expected1, r1); assertEquals(expected1, r2); assertEquals(expected1, r3); assertEquals(expected1, r4); assertEquals(expected2, r1); assertEquals(expected2, r2); assertEquals(expected2, r3); assertEquals(expected2, r4); } @Test public void testSerialization() throws Exception { // compatibility testToString("jetbrains.mps.lang.core.structure"); // XXX why don't we check "m:" references here? There's dead, yet not deprecated code in SModelReference.parseReference() to handle these. // global testToString("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)"); // new testToString("9ef82768-a1b1-451e-b136-5a86b2b5fdbb/r:b11ed8aa-3bfd-4e32-9f42-fbe92f0be58c(jetbrains.mps.persistence/jetbrains.mps.smodel.persistence.def.v7)"); testToString("9ef82768-a1b1-451e-b136-5a86b2b5fdbb/r:b11ed8aa-3bfd-4e32-9f42-fbe92f0be58c(jetbrains.mps.smodel.persistence.def.v7)"); testToString("6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.util(JDK/)"); // escaping String ref1 = "~module1%25/f:models%2Faa.xml(aa.xml)"; testToString(ref1); SModelReference pref1 = getPersistenceFacade().createModelReference(ref1); assertEquals("f:models/aa.xml", pref1.getModelId().toString()); assertEquals("~module1%", pref1.getModuleReference().getModuleId().toString()); // SModuleReference moduleRefNoName = getPersistenceFacade().createModuleReference("9ef82768-a1b1-451e-b136-5a86b2b5fdbb()"); SModuleReference moduleRefWithName = getPersistenceFacade().createModuleReference("9ef82768-a1b1-451e-b136-5a86b2b5fdbb(jetbrains.mps.persistence)"); testFromString(getPersistenceFacade().createModelReference(moduleRefNoName, SModelId.generate(), "m1")); testFromString(getPersistenceFacade().createModelReference(moduleRefWithName, SModelId.generate(), "m2")); } @Test(expected = IllegalArgumentException.class) public void testExc1() throws Exception { getPersistenceFacade().createModelReference("9ef82768-a1b1-451e-b136-5a86b2b5fdbb/r:b11ed8aa-3bfd-4e32-9f42-fbe92f0be58c"); } private void testToString(String s) { SModelReference modelReference = getPersistenceFacade().createModelReference(s); String back = getPersistenceFacade().asString(modelReference); assertEquals(s, back); } private void testFromString(SModelReference ref) { String serialized = getPersistenceFacade().asString(ref); SModelReference restored = getPersistenceFacade().createModelReference(serialized); assertEquals(ref, restored); } }