public void Decompiler_handles_banned_function_replacement(string expression, string type, string expectedValue) { var template = @"{ ""$schema"": ""https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#"", ""contentVersion"": ""1.0.0.0"", ""parameters"": {}, ""variables"": { ""a"": true, ""b"": false, ""c"": true }, ""resources"": [], ""outputs"": { ""calculated"": { ""type"": """ + type + @""", ""value"": ""[" + expression + @"]"" } } }"; var fileUri = new Uri("file:///path/to/main.json"); var fileResolver = new InMemoryFileResolver(new Dictionary <Uri, string> { [fileUri] = template, }); var(entryPointUri, filesToSave) = TemplateDecompiler.DecompileFileWithModules(TestTypeHelper.CreateEmptyProvider(), fileResolver, fileUri); filesToSave[entryPointUri].Should().Contain($"output calculated {type} = ({expectedValue})"); }
public void Decompiler_handles_strings_with_newlines(string newline, string escapedNewline) { var template = @"{ ""$schema"": ""https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#"", ""contentVersion"": ""1.0.0.0"", ""parameters"": {}, ""variables"": { ""multilineString"": ""multi line string"" }, ""resources"": [], ""outputs"": {} }"; // replace newlines with the style passed in template = string.Join(newline, Regex.Split(template, "\r?\n")); var fileUri = new Uri("file:///path/to/main.json"); var fileResolver = new InMemoryFileResolver(new Dictionary <Uri, string> { [fileUri] = template, });; var(entryPointUri, filesToSave) = TemplateDecompiler.DecompileFileWithModules(TestTypeHelper.CreateEmptyProvider(), fileResolver, fileUri); // this behavior is actually controlled by newtonsoft's deserializer, but we should assert it anyway to avoid regressions. filesToSave[entryPointUri].Should().Contain($"var multilineString = 'multi{escapedNewline} line{escapedNewline} string'"); }
private static Compilation GetCompilation(string text) { var fileName = "/main.bicep"; var fileResolver = new InMemoryFileResolver(new Dictionary <string, string> { [fileName] = text }, filePath => "Modules are not supported in the Bicep Playground"); var syntaxTreeGrouping = SyntaxTreeGroupingBuilder.Build(fileResolver, fileName); return(new Compilation(resourceTypeProvider, syntaxTreeGrouping)); }
private async Task <LanguageServerHelper> StartServerWithClientConnectionAsync(MultipleMessageListener <PublishDiagnosticsParams> diagsListener) { var fileSystemDict = new Dictionary <Uri, string>(); var fileResolver = new InMemoryFileResolver(fileSystemDict); var serverOptions = new Server.CreationOptions(FileResolver: fileResolver); return(await LanguageServerHelper.StartServerWithClientConnectionAsync( TestContext, options => { options.OnPublishDiagnostics(diags => diagsListener.AddMessage(diags)); }, serverOptions)); }
private async Task <(ILanguageClient, MultipleMessageListener <PublishDiagnosticsParams>, string testOutputPath)> StartServerWithClientConnectionAsync() { var fileSystemDict = new Dictionary <Uri, string>(); var fileResolver = new InMemoryFileResolver(fileSystemDict); var diagsListener = new MultipleMessageListener <PublishDiagnosticsParams>(); var serverOptions = new Server.CreationOptions(FileResolver: fileResolver); var client = await IntegrationTestHelper.StartServerWithClientConnectionAsync( TestContext, options => { options.OnPublishDiagnostics(diags => diagsListener.AddMessage(diags)); }, serverOptions); var testOutputPath = Path.Combine(TestContext.ResultsDirectory, Guid.NewGuid().ToString()); return(client, diagsListener, testOutputPath); }
public DecompileResult Decompile(string jsonContent) { var jsonUri = new Uri("inmemory:///main.json"); var fileResolver = new InMemoryFileResolver(new Dictionary <Uri, string> { [jsonUri] = jsonContent, }); try { var(entrypointUri, filesToSave) = TemplateDecompiler.DecompileFileWithModules(resourceTypeProvider, fileResolver, jsonUri); return(new DecompileResult(filesToSave[entrypointUri], null)); } catch (Exception exception) { return(new DecompileResult(null, exception.Message)); } }
public DecompileResult Decompile(string jsonContent) { var jsonUri = new Uri("inmemory:///main.json"); var fileResolver = new InMemoryFileResolver(new Dictionary <Uri, string> { [jsonUri] = jsonContent, }); try { var bicepUri = PathHelper.ChangeToBicepExtension(jsonUri); var decompiler = new TemplateDecompiler(namespaceProvider, fileResolver, new EmptyModuleRegistryProvider(), new ConfigurationManager(new IOFileSystem())); var(entrypointUri, filesToSave) = decompiler.DecompileFileWithModules(jsonUri, bicepUri); return(new DecompileResult(filesToSave[entrypointUri], null)); } catch (Exception exception) { return(new DecompileResult(null, exception.Message)); } }
public static SyntaxTreeGrouping CreateForFiles(IReadOnlyDictionary <string, string> files, string entryFileName) { var fileResolver = new InMemoryFileResolver(files); return(SyntaxTreeGroupingBuilder.Build(fileResolver, entryFileName)); }