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) { //} }
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); }
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) { //} }
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 ); }
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)); }
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); }
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 ); }
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); }
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); }
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); }
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); }
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); }
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); }
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; }