JS test: JS AST access from tests

This commit is contained in:
Alexey Tsvetkov
2014-08-13 19:48:50 +04:00
committed by Zalim Bashorov
parent 1dcc096753
commit 987708680f
6 changed files with 71 additions and 71 deletions
@@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.util.Consumer;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import kotlin.Function0;
@@ -48,7 +49,6 @@ import org.jetbrains.jet.config.Services;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS;
import org.jetbrains.k2js.config.*;
import org.jetbrains.k2js.facade.K2JSTranslator;
import org.jetbrains.k2js.facade.MainCallParameters;
import java.io.File;
@@ -58,6 +58,7 @@ import java.util.List;
import static org.jetbrains.jet.cli.common.ExitCode.COMPILATION_ERROR;
import static org.jetbrains.jet.cli.common.ExitCode.OK;
import static org.jetbrains.jet.cli.common.messages.CompilerMessageLocation.NO_LOCATION;
import static org.jetbrains.k2js.facade.K2JSTranslator.translateWithMainCallParameters;
public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
@@ -170,7 +171,8 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
@Nullable File outputPostfix
) {
try {
return K2JSTranslator.translateWithMainCallParameters(mainCall, sourceFiles, outputFile, outputPrefix, outputPostfix, config);
//noinspection unchecked
return translateWithMainCallParameters(mainCall, sourceFiles, outputFile, outputPrefix, outputPostfix, config, Consumer.EMPTY_CONSUMER);
}
catch (Exception e) {
throw new RuntimeException(e);
@@ -213,4 +215,4 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
return MainCallParameters.mainWithoutArguments();
}
}
}
}
@@ -19,11 +19,14 @@ package org.jetbrains.k2js.test;
import com.google.common.collect.Lists;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment;
import org.jetbrains.k2js.config.Config;
import org.jetbrains.k2js.config.EcmaVersion;
import org.jetbrains.k2js.facade.MainCallParameters;
import org.jetbrains.k2js.test.config.TestConfig;
@@ -119,9 +122,15 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
@NotNull Iterable<EcmaVersion> ecmaVersions,
@NotNull TestConfigFactory configFactory
) throws Exception {
Project project = getProject();
List<String> allFiles = withAdditionalFiles(files);
List<JetFile> jetFiles = TranslationUtils.createJetFileList(project, allFiles, null);
for (EcmaVersion version : ecmaVersions) {
translateFiles(getProject(), withAdditionalFiles(files), getOutputFilePath(testName, version), mainCallParameters,
version, configFactory);
Config config = TranslationUtils.getConfig(project, version, configFactory);
File outputFile = new File(getOutputFilePath(testName, version));
translateFiles(jetFiles, outputFile, mainCallParameters, config);
}
}
@@ -135,14 +144,13 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
}
protected void translateFiles(
@NotNull Project project,
@NotNull List<String> files,
@NotNull String outputFile,
@NotNull List<JetFile> jetFiles,
@NotNull File outputFile,
@NotNull MainCallParameters mainCallParameters,
@NotNull EcmaVersion version,
@NotNull TestConfigFactory configFactory
@NotNull Config config
) throws Exception {
TranslationUtils.translateFiles(project, mainCallParameters, files, outputFile, version, configFactory);
//noinspection unchecked
TranslationUtils.translateFiles(mainCallParameters, jetFiles, outputFile, null, null, config, Consumer.EMPTY_CONSUMER);
}
@NotNull
@@ -235,5 +243,4 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
protected String expected(@NotNull String testName) {
return getExpectedPath() + testName + ".out";
}
}
@@ -16,24 +16,21 @@
package org.jetbrains.k2js.test;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.Consumer;
import junit.framework.Test;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.k2js.config.Config;
import org.jetbrains.k2js.config.EcmaVersion;
import org.jetbrains.k2js.facade.K2JSTranslator;
import org.jetbrains.k2js.facade.MainCallParameters;
import org.jetbrains.k2js.test.config.TestConfigFactory;
import org.jetbrains.k2js.test.semantics.TranslatorTestCaseBuilder;
import org.jetbrains.k2js.test.utils.TranslationUtils;
import java.io.File;
import java.util.List;
import static org.jetbrains.k2js.test.utils.TranslationUtils.createJetFileList;
import static org.jetbrains.k2js.test.utils.TranslationUtils.getConfig;
@SuppressWarnings("JUnitTestCaseWithNoTests")
public final class OutputPrefixPostfixTest extends SingleFileTranslationTest {
private static final String PREFIX_EXT = ".prefix";
@@ -56,16 +53,13 @@ public final class OutputPrefixPostfixTest extends SingleFileTranslationTest {
@Override
protected void translateFiles(
@NotNull Project project,
@NotNull List<String> files,
@NotNull String outputFile,
@NotNull List<JetFile> jetFiles,
@NotNull File outputFile,
@NotNull MainCallParameters mainCallParameters,
@NotNull EcmaVersion version,
@NotNull TestConfigFactory configFactory
@NotNull Config config
) throws Exception {
TranslationUtils.translateFiles(mainCallParameters, createJetFileList(project, files, null),
outputFile, outputPrefixFile, outputPostfixFile,
getConfig(project, version, configFactory));
//noinspection unchecked
TranslationUtils.translateFiles(mainCallParameters, jetFiles, outputFile, outputPrefixFile, outputPostfixFile, config, Consumer.EMPTY_CONSUMER);
}
@Override
@@ -16,20 +16,11 @@
package org.jetbrains.k2js.test;
import com.intellij.openapi.project.Project;
import junit.framework.Test;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.config.EcmaVersion;
import org.jetbrains.k2js.facade.MainCallParameters;
import org.jetbrains.k2js.test.config.TestConfig;
import org.jetbrains.k2js.test.config.TestConfigFactory;
import org.jetbrains.k2js.test.semantics.TranslatorTestCaseBuilder;
import org.jetbrains.k2js.test.utils.TranslationUtils;
import java.util.List;
import static org.jetbrains.k2js.test.utils.TranslationUtils.createJetFileList;
import static org.jetbrains.k2js.test.utils.TranslationUtils.getConfig;
@SuppressWarnings("JUnitTestCaseWithNoTests")
public final class SourceMapTest extends SingleFileTranslationTest {
@@ -42,20 +33,6 @@ public final class SourceMapTest extends SingleFileTranslationTest {
this.filename = filename;
}
@Override
protected void translateFiles(
@NotNull Project project,
@NotNull List<String> files,
@NotNull String outputFile,
@NotNull MainCallParameters mainCallParameters,
@NotNull EcmaVersion version,
@NotNull TestConfigFactory configFactory
) throws Exception {
TranslationUtils.translateFiles(mainCallParameters, createJetFileList(project, files, null),
outputFile, null, null,
getConfig(project, version, configFactory));
}
@NotNull
@Override
protected TestConfigFactory getConfigFactory() {
@@ -18,9 +18,12 @@ package org.jetbrains.k2js.test.utils;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.google.dart.compiler.backend.js.ast.JsNode;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.PsiFile;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.OutputFileCollection;
@@ -99,30 +102,38 @@ public final class TranslationUtils {
libraryAnalyzeExhaust.getBindingContext(), libraryAnalyzeExhaust.getModuleDescriptor());
}
public static void translateFiles(
@NotNull Project project,
@NotNull MainCallParameters mainCallParameters,
@NotNull List<String> inputFiles,
@NotNull String outputFile,
@NotNull EcmaVersion version,
@NotNull TestConfigFactory configFactory
) throws Exception {
List<JetFile> jetFiles = createJetFileList(project, inputFiles, null);
Config config = getConfig(project, version, configFactory);
translateFiles(mainCallParameters, jetFiles, outputFile, null, null, config);
}
public static void translateFiles(
@NotNull MainCallParameters mainCall,
@NotNull List<JetFile> files,
@NotNull String outputPath,
@NotNull File outputFile,
@Nullable File outputPrefixFile,
@Nullable File outputPostfixFile,
@NotNull Config config,
@NotNull Consumer<JsNode> astConsumer
) throws TranslationException, IOException {
OutputFileCollection outputFiles =
translateWithMainCallParameters(mainCall, files, outputFile, outputPrefixFile, outputPostfixFile, config, astConsumer);
OutputUtilsPackage.writeAllTo(outputFiles, outputFile.getParentFile());
}
public static JsNode translateFilesAndGetAst(
@NotNull MainCallParameters mainCall,
@NotNull List<JetFile> files,
@NotNull File outputFile,
@Nullable File outputPrefixFile,
@Nullable File outputPostfixFile,
@NotNull Config config
) throws TranslationException, IOException {
File outputFile = new File(outputPath);
OutputFileCollection outputFiles = translateWithMainCallParameters(mainCall, files, outputFile, outputPrefixFile, outputPostfixFile, config);
OutputUtilsPackage.writeAllTo(outputFiles, outputFile.getParentFile());
final Ref<JsNode> ref = new Ref<JsNode>();
translateFiles(mainCall, files, outputFile, outputPrefixFile, outputPostfixFile, config, new Consumer<JsNode>() {
@Override
public void consume(JsNode node) {
ref.set(node);
}
});
return ref.get();
}
@NotNull
@@ -17,6 +17,7 @@
package org.jetbrains.k2js.facade;
import com.google.common.base.Predicates;
import com.google.dart.compiler.backend.js.ast.JsNode;
import com.google.dart.compiler.backend.js.ast.JsProgram;
import com.google.dart.compiler.util.TextOutputImpl;
import com.intellij.openapi.project.Project;
@@ -24,6 +25,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.util.Consumer;
import com.intellij.util.Function;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
@@ -67,12 +69,13 @@ public final class K2JSTranslator {
@NotNull File outputFile,
@Nullable File outputPrefixFile,
@Nullable File outputPostfixFile,
@NotNull Config config
@NotNull Config config,
@NotNull Consumer<JsNode> astConsumer // hack for tests
) throws TranslationException, IOException {
K2JSTranslator translator = new K2JSTranslator(config);
TextOutputImpl output = new TextOutputImpl();
SourceMapBuilder sourceMapBuilder = config.isSourcemap() ? new SourceMap3Builder(outputFile, output, new SourceMapBuilderConsumer()) : null;
String programCode = translator.generateProgramCode(files, mainCall, output, sourceMapBuilder);
String programCode = translator.generateProgramCode(files, mainCall, output, sourceMapBuilder, astConsumer);
String prefix = FileUtilsPackage.readTextOrEmpty(outputPrefixFile);
String postfix = FileUtilsPackage.readTextOrEmpty(outputPostfixFile);
@@ -125,7 +128,8 @@ public final class K2JSTranslator {
@NotNull
public String generateProgramCode(@NotNull List<JetFile> files, @NotNull MainCallParameters mainCallParameters)
throws TranslationException {
return generateProgramCode(files, mainCallParameters, new TextOutputImpl(), null);
//noinspection unchecked
return generateProgramCode(files, mainCallParameters, new TextOutputImpl(), null, Consumer.EMPTY_CONSUMER);
}
@NotNull
@@ -133,11 +137,16 @@ public final class K2JSTranslator {
@NotNull List<JetFile> files,
@NotNull MainCallParameters mainCallParameters,
@NotNull TextOutputImpl output,
@Nullable SourceMapBuilder sourceMapBuilder
@Nullable SourceMapBuilder sourceMapBuilder,
@NotNull Consumer<JsNode> astConsumer
) throws TranslationException {
JsProgram program = generateProgram(files, mainCallParameters);
JsSourceGenerationVisitor sourceGenerator = new JsSourceGenerationVisitor(output, sourceMapBuilder);
program.accept(sourceGenerator);
astConsumer.consume(program);
return output.toString();
}
@@ -156,4 +165,4 @@ public final class K2JSTranslator {
private Project getProject() {
return config.getProject();
}
}
}