Esempio n. 1
0
        public bool Execute()
        {
            var files = InputFiles
                        .Select(x => x.ItemSpec)
                        .Where(Generator.IsMetaSharpFile)
                        .ToImmutableArray();
            var buildConstants = new BuildConstants(
                intermediateOutputPath: IntermediateOutputPath,
                targetPath: OutDir,
                generatorMode: GeneratorMode.MsBuild
                );
            var code = RealEnvironmentGenerator.Generate(
                files,
                buildConstants,
                error => BuildEngine.LogErrorEvent(ToBuildError(error)),
                output => OutputFiles = output.Select(x => new TaskItem(x)).ToArray()
                );

            return(code == GeneratorResultCode.Success);

            //var type = compilation.GlobalNamespace.GetNamespaceMembers().ElementAt(0).GetNamespaceMembers().ElementAt(0).GetTypeMembers().Single();
            //var tree = type.Locations.Single().SourceTree;
            //if(tree == compilation.SyntaxTrees.Single()) {
            //}
            //var node = compilation.SyntaxTrees.Single().GetRoot().DescendantNodes().OfType<ClassDeclarationSyntax>().First();
            //var model = compilation.GetSemanticModel(compilation.SyntaxTrees.Single());
            //var symbol = model.GetDeclaredSymbol(node);
            //if(symbol == type) {
            //}
        }
Esempio n. 2
0
        static int Process(string[] args)
        {
            var parser = GetParser();
            var result = parser.Parse(args);

            //Debugger.Launch();

            if (result.HasErrors)
            {
                System.Console.WriteLine(result.ErrorText);
                return((int)GeneratorResultCode.Error);
            }

            Directory.SetCurrentDirectory(parser.Object.ProjectPath);
            var files = Directory.GetFiles(Directory.GetCurrentDirectory(), "*." + Generator.DefaultInputFileEnd, SearchOption.AllDirectories)
                        .ToImmutableArray();
            var buildConstants = new BuildConstants(
                intermediateOutputPath: null,
                targetPath: parser.Object.TargetPath,
                generatorMode: GeneratorMode.ConsoleApp
                );

            var code = RealEnvironmentGenerator.Generate(
                files,
                buildConstants,
                error => System.Console.WriteLine(error.ToString()),
                output => { }
                );

            return((int)code);
        }
Esempio n. 3
0
        public bool Execute()
        {
            var files = InputFiles
                .Select(x => x.ItemSpec)
                .Where(Generator.IsMetaSharpFile)
                .ToImmutableArray();
            var buildConstants = new BuildConstants(
                intermediateOutputPath: IntermediateOutputPath,
                targetPath: OutDir,
                generatorMode: GeneratorMode.MsBuild
            );
            var code = RealEnvironmentGenerator.Generate(
                files,
                buildConstants,
                error => BuildEngine.LogErrorEvent(ToBuildError(error)),
                output => OutputFiles = output.Select(x => new TaskItem(x)).ToArray()
             );
            return code == GeneratorResultCode.Success;

            //var type = compilation.GlobalNamespace.GetNamespaceMembers().ElementAt(0).GetNamespaceMembers().ElementAt(0).GetTypeMembers().Single();
            //var tree = type.Locations.Single().SourceTree;
            //if(tree == compilation.SyntaxTrees.Single()) {
            //}
            //var node = compilation.SyntaxTrees.Single().GetRoot().DescendantNodes().OfType<ClassDeclarationSyntax>().First();
            //var model = compilation.GetSemanticModel(compilation.SyntaxTrees.Single());
            //var symbol = model.GetDeclaredSymbol(node);
            //if(symbol == type) {
            //}
        }
Esempio n. 4
0
 protected static void AssertSingleFileOutput(string input, string output, BuildConstants buildConstants = null, bool ignoreEmptyLines = false)
 {
     AssertMultipleFilesOutput(
         new TestFile(SingleInputFileName, input).YieldToImmutable(),
         new TestFile(GetOutputFileName(SingleInputFileName), output).YieldToImmutable(),
         buildConstants,
         ignoreEmptyLines
         );
 }
Esempio n. 5
0
        static TestEnvironment CreateEnvironment(BuildConstants buildConstants)
        {
            var files       = new Dictionary <string, string>();
            var environment = new Environment(
                readText: fileName => files[fileName],
                writeText: (fileName, text) => files[fileName] = text,
                buildConstants: buildConstants ?? CreateBuildConstants()
                );

            return(new TestEnvironment(files, environment));
        }
Esempio n. 6
0
 static TestEnvironment CreateEnvironment(BuildConstants buildConstants) {
     var files = new Dictionary<string, string>();
     var environment = new Environment(
         readText: fileName => files[fileName],
         writeText: (fileName, text) => files[fileName] = text,
         buildConstants: buildConstants ?? CreateBuildConstants()
     );
     return new TestEnvironment(files, environment);
 }
Esempio n. 7
0
 protected static void AssertSingleFileOutput(string input, string output, BuildConstants buildConstants = null, bool ignoreEmptyLines = false) {
     AssertMultipleFilesOutput(
         new TestFile(SingleInputFileName, input).YieldToImmutable(),
         new TestFile(GetOutputFileName(SingleInputFileName), output).YieldToImmutable(),
         buildConstants,
         ignoreEmptyLines
     );
 }
Esempio n. 8
0
 protected static void AssertMultipleFilesErrors(ImmutableArray<TestFile> input, Action<IEnumerable<MetaError>> assertErrors, BuildConstants buildConstants = null) {
     AssertMultipleFilesResult(input, (result, testEnvironment) => {
         Assert.NotEmpty(result.ToLeft());
         Assert.Equal(input.Length, testEnvironment.FileCount);
         assertErrors(result.ToLeft().OrderBy(x => x.File));
     }, buildConstants);
 }
Esempio n. 9
0
 protected static void AssertMultipleFilesOutput(ImmutableArray<TestFile> input, ImmutableArray<TestFile> output, BuildConstants buildConstants = null, bool ignoreEmptyLines = false) {
     AssertMultipleFilesResult(input, (result, testEnvironment) => {
         Assert.Equal<string>(
             output
                 .Where(x => x.IsInFlow)
                 .Select(x => x.Name)
                 .OrderBy(x => x), 
             result.ToRight().OrderBy(x => x));
         Assert.Equal(input.Length + output.Length, testEnvironment.FileCount);
         AssertFiles(output, testEnvironment, ignoreEmptyLines);
     }, buildConstants);
 }
Esempio n. 10
0
 static void AssertMultipleFilesResult(ImmutableArray<TestFile> input, Action<GeneratorResult, TestEnvironment> assertion, BuildConstants buildConstants) {
     var testEnvironment = CreateEnvironment(buildConstants);
     input.ForEach(file => testEnvironment.Environment.WriteText(file.Name, file.Text));
     var result = Generator.Generate(input.Where(file => file.IsInFlow).Select(file => file.Name).ToImmutableArray(), testEnvironment.Environment);
     AssertFiles(input, testEnvironment, ignoreEmptyLines: false);
     assertion(result, testEnvironment);
 }
Esempio n. 11
0
 protected static void AssertMultipleFilesErrors(ImmutableArray <TestFile> input, Action <IEnumerable <MetaError> > assertErrors, BuildConstants buildConstants = null)
 {
     AssertMultipleFilesResult(input, (result, testEnvironment) => {
         Assert.NotEmpty(result.ToLeft());
         Assert.Equal(input.Length, testEnvironment.FileCount);
         assertErrors(result.ToLeft().OrderBy(x => x.File));
     }, buildConstants);
 }
Esempio n. 12
0
 protected static void AssertMultipleFilesOutput(ImmutableArray <TestFile> input, ImmutableArray <TestFile> output, BuildConstants buildConstants = null, bool ignoreEmptyLines = false)
 {
     AssertMultipleFilesResult(input, (result, testEnvironment) => {
         result.Match(errors => {
             Assert.False(errors.Any(), string.Join(System.Environment.NewLine, errors));
         }, msgs => {
             Assert.Equal <string>(
                 output
                 .Where(x => x.IsInFlow)
                 .Select(x => x.Name)
                 .OrderBy(x => x),
                 msgs.OrderBy(x => x));
         });
         Assert.Equal(input.Length + output.Length, testEnvironment.FileCount);
         AssertFiles(output, testEnvironment, ignoreEmptyLines);
     }, buildConstants);
 }
Esempio n. 13
0
        static void AssertMultipleFilesResult(ImmutableArray <TestFile> input, Action <GeneratorResult, TestEnvironment> assertion, BuildConstants buildConstants)
        {
            var testEnvironment = CreateEnvironment(buildConstants);

            input.ForEach(file => testEnvironment.Environment.WriteText(file.Name, file.Text));
            var result = Generator.Generate(input.Where(file => file.IsInFlow).Select(file => file.Name).ToImmutableArray(), testEnvironment.Environment);

            AssertFiles(input, testEnvironment, ignoreEmptyLines: false);
            assertion(result, testEnvironment);
        }
Esempio n. 14
0
        static int Process(string[] args)
        {
            var parser = GetParser();
            var result = parser.Parse(args);

            //Debugger.Launch();

            if(result.HasErrors) {
                System.Console.WriteLine(result.ErrorText);
                return (int)GeneratorResultCode.Error;
            }

            Directory.SetCurrentDirectory(parser.Object.ProjectPath);
            var files = Directory.GetFiles(Directory.GetCurrentDirectory(), "*." + Generator.DefaultInputFileEnd, SearchOption.AllDirectories)
                .ToImmutableArray();
            var buildConstants = new BuildConstants(
                intermediateOutputPath: null,
                targetPath: parser.Object.TargetPath,
                generatorMode: GeneratorMode.ConsoleApp
            );

            var code = RealEnvironmentGenerator.Generate(
                files,
                buildConstants,
                error => System.Console.WriteLine(error.ToString()),
                output => { }
            );

            return (int)code;
        }