public static string ConstEvalTestCore(ConstEvalTestData testData) { string outNiceJs; try { var files = new TestImportResolver(); var ctx = new ResolvingConstEvalCtx(testData.InputFileName, files); var parser = new Parser(new Options(), testData.InputContent); var toplevel = parser.Parse(); new ScopeParser().FigureOutScope(toplevel); var lastStatement = ((AstSimpleStatement)toplevel.Body.Last).Body; var val = lastStatement.ConstValue(ctx); outNiceJs = val != null ? "Const\n" : "Not const\n"; if (val != null) { var valAst = TypeConverter.ToAst(val); var outputOptions = new OutputOptions { Beautify = true }; outNiceJs += valAst.PrintToString(outputOptions); } } catch (SyntaxError e) { outNiceJs = e.Message; } return(outNiceJs); }
public static string ModuleParserTestCore(ConstEvalTestData testData) { string outNiceJs; try { var sf = Njsast.Bundler.BundlerHelpers.BuildSourceFile(testData.InputFileName, testData.InputContent, null, Resolver); outNiceJs = sf.Ast.PrintToString(new OutputOptions { Beautify = true }); if (sf.Requires.Count > 0) { outNiceJs += "Requires:\n"; foreach (var name in sf.Requires) { outNiceJs += name + "\n"; } } if (sf.LazyRequires.Count > 0) { outNiceJs += "Lazy requires:\n"; foreach (var name in sf.LazyRequires) { outNiceJs += name + "\n"; } } if (sf.SelfExports.Count > 0) { outNiceJs += "Self exports:\n"; foreach (var selfExport in sf.SelfExports) { outNiceJs += selfExport + "\n"; } } if (sf.Exports != null && sf.Exports.TryFindLongestPrefix(new ReadOnlySpan <string>(), out _, out var wholeExport)) { outNiceJs += "Whole Export: " + wholeExport !.PrintToString() + "\n"; } foreach (var import in sf.NeedsImports) { outNiceJs += "Uses " + import.Item1 + " " + string.Join('.', import.Item2) + "\n"; } } catch (SyntaxError e) { outNiceJs = e.Message; } return(outNiceJs); }
public void ShouldCorrectlyEvaluateConstantsOrProduceSyntaxError(ConstEvalTestData testData) { var outNiceJs = ConstEvalTestCore(testData); Assert.Equal(testData.ExpectedNiceJs, outNiceJs); }