Package org.jetbrains.plugins.clojure.base

Source Code of org.jetbrains.plugins.clojure.base.ClojureBaseTestCase

package org.jetbrains.plugins.clojure.base;

import com.intellij.ide.startup.impl.StartupManagerImpl;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderEnumerator;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.LocalTimeCounter;
import junit.framework.Assert;
import org.jetbrains.plugins.clojure.file.ClojureFileType;
import org.jetbrains.plugins.clojure.util.TestUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* @author ilyas
*/
public abstract class ClojureBaseTestCase extends LightPlatformCodeInsightFixtureTestCase {

  protected static final String SOURCE_FILE_EXT = ".clj";
  protected static final String TEST_FILE_EXT = ".test";

  private Project myProject;
  protected CodeStyleSettings mySettings;

  public Project getProject() {
    return myProject;
  }

  public abstract String getDataPath();

  protected CodeStyleSettings getSettings() {
    return CodeStyleSettingsManager.getSettings(myProject);
  }

  protected void setSettings() {
    final ClojureFileType fileType = ClojureFileType.CLOJURE_FILE_TYPE;
    mySettings = getSettings();
    mySettings.getIndentOptions(fileType).INDENT_SIZE = 2;
    mySettings.getIndentOptions(fileType).CONTINUATION_INDENT_SIZE = 2;
    mySettings.getIndentOptions(fileType).TAB_SIZE = 2;
  }

  protected void setUp() throws Exception {
    super.setUp();
    myFixture.setTestDataPath(getDataPath());
    myProject = myFixture.getProject();
    setSettings();
    setupLibraries();
  }

  private void setupLibraries() {
    ModifiableRootModel rootModel = null;
    final ModuleRootManager rootManager = ModuleRootManager.getInstance(myFixture.getModule());

    // Add Clojure Library
    OrderEnumerator libs = rootManager.orderEntries().librariesOnly();
    final List<Library.ModifiableModel> libModels = new ArrayList<Library.ModifiableModel>();

    rootModel = TestUtils.addLibrary(rootModel, rootManager, libs, libModels, "clojureLib", TestUtils.getMockClojureLib(), null);
    rootModel = TestUtils.addLibrary(rootModel, rootManager, libs, libModels, "clojureContrib", TestUtils.getMockClojureContribLib(), null);

    if (rootModel != null || !libModels.isEmpty()) {
      final ModifiableRootModel finalRootModel = rootModel;
      ApplicationManager.getApplication().runWriteAction(new Runnable() {
        public void run() {
          for (Library.ModifiableModel model : libModels) {
            model.commit();
          }
          if (finalRootModel != null) {
            finalRootModel.commit();
          }
          final StartupManagerImpl startupManager = (StartupManagerImpl) StartupManager.getInstance(myProject);
          startupManager.startCacheUpdate();
        }
      });
    }
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

  protected PsiFile createPseudoPhysicalFile(final Project project, final String fileName, final String text) throws IncorrectOperationException {
    String tmpFile = project.getBaseDir() + fileName;
    return PsiFileFactory.getInstance(project).createFileFromText(tmpFile,
        FileTypeManager.getInstance().getFileTypeByFileName(fileName),
        text,
        LocalTimeCounter.currentTime(),
        true);
  }

  public String getTestName() {
    final String s = getName().substring(4);
    return s.substring(0, 1).toLowerCase() + s.substring(1);
  }

  protected String fetchFile(String dir, String fileName, String extension) {
    File file = new File(getDataPath() +
        (dir == null || dir.trim().equals("") ? "" : dir + "/") +
        fileName +
        extension);

    Assert.assertTrue(file.exists());

    StringBuilder contents = new StringBuilder();
    try {
      BufferedReader input = new BufferedReader(new FileReader(file));
      try {
        String line;
        if ((line = input.readLine()) != null) {
          contents.append(line);
        }
        while ((line = input.readLine()) != null) {
          contents.append("\n");
          contents.append(line);
        }
      } finally {
        input.close();
      }
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return contents.toString();
  }
}
TOP

Related Classes of org.jetbrains.plugins.clojure.base.ClojureBaseTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.