package jetbrains.mps.lang.extension.tests.testExtension;
/*Generated by MPS */
import junit.framework.TestCase;
import jetbrains.mps.lang.extension.tests.plugin.TestObject;
import jetbrains.mps.MPSLaunch;
import jetbrains.mps.smodel.structure.Extension;
import jetbrains.mps.smodel.structure.ExtensionPoint;
import junit.framework.Assert;
import java.util.Iterator;
import java.util.NoSuchElementException;
import jetbrains.mps.lang.extension.tests.plugin.LazyTestObject;
import jetbrains.mps.internal.collections.runtime.IterableUtils;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.application.ApplicationAdapter;
public class Extension_Test extends TestCase {
private static TestObject TEST_OBJECT;
@MPSLaunch
public void test_testObject() throws Exception {
Iterable<? extends Extension<TestObject>> extensions = ((ExtensionPoint<TestObject>) new ExtensionPoint<TestObject>("jetbrains.mps.lang.extension.tests.testExtensionPoint")).getExtensions();
Assert.assertNotNull(extensions);
Iterator<? extends Extension<TestObject>> it = extensions.iterator();
Assert.assertTrue(it.hasNext());
Extension<TestObject> ext = it.next();
try {
it.next();
Assert.fail("unexpected value");
} catch (NoSuchElementException e) {
// expected exception
}
TestObject to = ext.get();
TEST_OBJECT = to;
Assert.assertEquals("foobar", to.getValue());
Assert.assertFalse(to.isShutDown());
}
@MPSLaunch
public void test_testLazyObject() throws Exception {
Assert.assertNull(LazyTestObject.INSTANCE);
Iterable<? extends Extension<LazyTestObject>> extensions = ((ExtensionPoint<LazyTestObject>) new ExtensionPoint<LazyTestObject>("jetbrains.mps.lang.extension.tests.lazyTestExtensionPoint")).getExtensions();
LazyTestObject lzo = extensions.iterator().next().get();
Assert.assertNotNull(lzo);
Assert.assertSame(LazyTestObject.INSTANCE, lzo);
}
@MPSLaunch
public void test_extensionPointExpression() throws Exception {
String string = IterableUtils.join(Sequence.fromIterable(new ExtensionPoint<String>("jetbrains.mps.lang.extension.tests.multiExtensionPoint").getObjects()).sort(new ISelector<String, String>() {
public String select(String it) {
return it;
}
}, false), ", ");
Assert.assertEquals("salam, dunya", string);
}
public void tearDown() {
if (TEST_OBJECT != null) {
Assert.assertFalse(TEST_OBJECT.isShutDown());
ApplicationManagerEx.getApplicationEx().addApplicationListener(new ApplicationAdapter() {
@Override
public void applicationExiting() {
if (!(Extension_Test.TEST_OBJECT.isShutDown())) {
throw new RuntimeException("!TestObject.shutDown");
}
}
});
}
}
public Extension_Test() {
}
}