package com.google.jstestdriver.idea;
import com.google.jstestdriver.idea.util.CastUtils;
import com.intellij.lang.javascript.psi.JSFile;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.PsiTestCase;
import com.intellij.testFramework.TestDataFile;
import junit.framework.Assert;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.io.File;
public abstract class AbstractJsPsiTestCase extends PsiTestCase {
protected void validateJsFile() throws Exception {
validateJsFile(getTestName(true));
}
private void validateJsFile(final String fileNameWithoutExtension) throws Exception {
validateFile(fileNameWithoutExtension + ".js");
}
@NotNull
private JSFile createJsFile(@NotNull String fileText, @NotNull String fileName) throws Exception {
myFile = createFile(myModule, fileName, fileText);
JSFile jsFile = CastUtils.tryCast(myFile, JSFile.class);
if (jsFile == null) {
Assert.fail(JSFile.class + " was expected, but " + (myFile == null ? "null " : myFile.getClass()) + " found.");
}
return jsFile;
}
private void validateFile(@TestDataFile @NonNls String filePath) throws Exception {
final String fullPath = getTestDataPath() + filePath;
final String fullRefinedPath = fullPath.replace(File.separatorChar, '/');
final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fullRefinedPath);
Assert.assertNotNull("file " + fullRefinedPath + " not found", vFile);
String fileText = StringUtil.convertLineSeparators(VfsUtil.loadText(vFile));
final String fileName = vFile.getName();
JSFile jsFile = createJsFile(fileText, fileName);
validateJsFile(jsFile, fileText);
}
protected abstract void validateJsFile(JSFile jsFile, String fileText) throws Exception;
}