Beispiel #1
0
        public async Task GenerateNamedMutationIsCorrect()
        {
            var logger         = new FakeLogger();
            var settingsLoader = new CodeGeneratorSettingsLoader(logger);

            var paths = "./Files/Issue_19/named.gql";

            var settings = settingsLoader.GenerateSettings(new CodeGeneratorSettingsLoaderDefaults(), new[] { paths });

            var generator = new CodeGenerator(logger, settings.Single());

            await generator.LoadSource();

            generator.Parse();
            generator.Render();
            var code = generator.GeneratedCode;

            Assert.Contains("mutation IfNamedUseNameInstead($repositoyId: ID!)", code);
        }
Beispiel #2
0
        public async Task DoesNotErrorRendering()
        {
            var logger         = new FakeLogger();
            var settingsLoader = new CodeGeneratorSettingsLoader(logger);

            var paths = "./Files/GithubTemplateError/History.gql";

            var settings = settingsLoader.GenerateSettings(new CodeGeneratorSettingsLoaderDefaults(), new[] { paths });

            var generator = new CodeGenerator(logger, settings.Single());

            await generator.LoadSource();

            generator.Parse();
            generator.Render();
            var code = generator.GeneratedCode;

            Assert.Empty(logger.ErrorMessages);
        }
Beispiel #3
0
        public async Task CorrectExceptionTestData()
        {
            var logger         = new FakeLogger();
            var settingsLoader = new CodeGeneratorSettingsLoader(logger);

            var paths = "./Files/GithubTemplateError/History.gql";

            var settings = settingsLoader.GenerateSettings(new CodeGeneratorSettingsLoaderDefaults(), new[] { paths });

            var generator = new CodeGenerator(logger, settings.Single());

            await generator.LoadSource();

            generator.Parse();
            generator.Render();
            Assert.Empty(logger.ErrorMessages);

            Assert.Contains("public IEnumerable<string> ErrorMessages { get; private set; }", generator.GeneratedCode);
        }
Beispiel #4
0
 public SchemaFiles()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #5
0
 public TypescriptCodeGen()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #6
0
 public Issue_8()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #7
0
 public Includes()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #8
0
 public CodeGeneratorTester()
 {
     this.logger         = new FakeLogger();
     this.settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
 public StringifiedEnums()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #10
0
        public static void MainApplication(CommandLineApplication app)
        {
            CommandArgument sourceArgument       = app.Argument("source", "The query files for gerating the code from", true);
            CommandOption   msbuildMode          = app.Option("--msbuild-outputdir", "The directory", CommandOptionType.SingleValue);
            CommandOption   format               = app.Option("--format", "The export format", CommandOptionType.SingleValue);
            CommandOption   overrideSettingsPath = app.Option("--settings", "The path to a settings file to override values", CommandOptionType.SingleValue);
            CommandOption   defaultSettingsPath  = app.Option("--default-settings", "The path to a settings file to load in first before walking the tree", CommandOptionType.SingleValue);

            app.OnExecute(async() =>
            {
                // based on the list of *.gql/*.graphql files we extract settings
                // from comment headers and based on that we generate blocks of settings
                // the same query each setting value can be repeated and that will cause
                // the collection to be duplicated too.
                var inMsbuildMode = msbuildMode.HasValue();

                var consoleLoger = new ConsoleLogger(inMsbuildMode);
                CodeGeneratorSettingsLoader settingsLoader = new CodeGeneratorSettingsLoader(consoleLoger);

                var loaderSettings    = new CodeGeneratorSettingsLoaderDefaults();
                loaderSettings.Format = format.HasValue() ? format.Value() : "cs";
                if (inMsbuildMode)
                {
                    var targetPattern = Path.Combine(msbuildMode.Value(), "{classname}.cs");

                    var oldFF = loaderSettings.FixFile;
                    loaderSettings.FixFile = (f) =>
                    {
                        oldFF?.Invoke(f);

                        if (f.Format == "cs")
                        {
                            f.OutputPath = targetPattern;
                        }
                    };
                }

                if (defaultSettingsPath.HasValue())
                {
                    loaderSettings.DefaultPath = Path.GetFullPath(defaultSettingsPath.Value());
                }
                if (overrideSettingsPath.HasValue())
                {
                    loaderSettings.OverridesPath = Path.GetFullPath(overrideSettingsPath.Value());
                }

                IEnumerable <CodeGeneratorSettings> settings = settingsLoader.GenerateSettings(loaderSettings, sourceArgument.Values);
                HashSet <string> generatedFiles = new HashSet <string>();
                HashSet <string> failedFiles    = new HashSet <string>();
                var semaphore = new SemaphoreSlim(Environment.ProcessorCount, Environment.ProcessorCount);
                var tasks     = settings.Select(Generate).ToList();

                Task Generate(CodeGeneratorSettings s)
                {
                    return(Task.Run(async() =>
                    {
                        await semaphore.WaitAsync();
                        try
                        {
                            CodeGenerator generator = new CodeGenerator(consoleLoger, s);
                            if (await generator.GenerateAsync())
                            {
                                // generated code in here
                                generatedFiles.Add(s.OutputPath);
                            }
                            else
                            {
                                failedFiles.Add(s.OutputPath);
                            }
                        }
                        finally
                        {
                            semaphore.Release();
                        }
                    }));
                }

                await Task.WhenAll(tasks);

                if (inMsbuildMode)
                {
                    foreach (string result in generatedFiles)
                    {
                        Console.WriteLine(result);
                    }
                }

                if (failedFiles.Any())
                {
                    return(-1);
                }

                return(0);
            });
        }
Beispiel #11
0
 public GithubTemplateError()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #12
0
 public ParseFieldsFromFragments()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #13
0
 public ClientOnlyDirectives()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #14
0
 public ToggleJsonConverter()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }
Beispiel #15
0
 public TemplateSettingsInJson()
 {
     logger         = new FakeLogger();
     settingsLoader = new CodeGeneratorSettingsLoader(logger);
 }