예제 #1
0
    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);
    }
예제 #2
0
    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);
    }
예제 #3
0
    public void ShouldCorrectlyEvaluateConstantsOrProduceSyntaxError(ConstEvalTestData testData)
    {
        var outNiceJs = ConstEvalTestCore(testData);

        Assert.Equal(testData.ExpectedNiceJs, outNiceJs);
    }