package org.angularjs.service; import com.intellij.execution.ExecutionException; import com.intellij.lang.typescript.compiler.TypeScriptCompilerSettings; import com.intellij.lang.typescript.compiler.languageService.TypeScriptLanguageServiceUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; import org.angularjs.AngularTestUtil; import java.io.File; import java.io.IOException; public class Angular2ServiceTest extends CodeInsightFixtureTestCase { private volatile boolean skipTests = false; @Override protected String getBasePath() { return AngularTestUtil.getBaseTestDataPath(getClass()); } @Override protected void setUp() throws Exception { super.setUp(); myFixture.setTestDataPath(getBasePath()); final File fromFile = new File(getBasePath() + "/defaultData/node_modules"); if (!fromFile.exists()) { skipTests = true; return; } enableService(myFixture.getProject(), myFixture.getTestRootDisposable()); myFixture.copyDirectoryToProject("/defaultData", ""); myFixture.copyDirectoryToProject("/" + getTestName(false), ""); } public void enableService(Project project, Disposable disposable) throws ExecutionException { Disposer.register(disposable, () -> TypeScriptLanguageServiceUtil.setUseService(false)); TypeScriptLanguageServiceUtil.setUseService(true); registerRestoreForSettings(TypeScriptCompilerSettings.getSettings(project), disposable); } protected void registerRestoreForSettings(TypeScriptCompilerSettings settings, Disposable disposable) { boolean compilerEnabled = settings.isCompilerEnabled(); boolean changes = settings.isTrackFileSystemChanges(); boolean isMainFile = settings.isUseMainFile(); boolean service = settings.isUseService(); String mainFilePath = settings.getMainFilePath(); String outDir = settings.getOutDirectory(); boolean hasOutDirectory = settings.isHasOutDirectory(); String params = settings.getTypeScriptCompilerParams(); boolean useConfig = settings.isUseConfigForCompiler(); boolean showAllProjectErrors = settings.isShowAllProjectErrors(); Disposer.register(disposable, () -> { settings.setUseService(service); settings.setImmediateCompileEnabled(compilerEnabled); settings.setTrackFileSystemChanges(changes); settings.setMainFilePath(mainFilePath); settings.setUseMainFile(isMainFile); settings.setHasOutDirectory(hasOutDirectory); settings.setOutDirectory(outDir); settings.setTypeScriptCompilerParams(params); settings.setUseConfigForCompiler(useConfig); settings.setShowAllProjectErrors(showAllProjectErrors); }); } private void defaultTest(String extension) throws IOException { if (skipTests) { return; } doTestFor(getTestName(false) + extension); } protected void doTestFor(String file) throws IOException { myFixture.configureFromTempProjectFile(file); if (skipTests) { return; } myFixture.checkHighlighting(); } public void testSimpleHighlight() throws IOException { defaultTest(".ts"); } public void testSimpleHighlightHtml() throws IOException { defaultTest(".html"); } }