JS test: JS AST access from tests
This commit is contained in:
committed by
Zalim Bashorov
parent
1dcc096753
commit
987708680f
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user