// This test asserts that we can generate snippets with @odata properties public void GenerateSnippetsWithOdataProperties() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); const string directoryObj = "{\r\n \"@odata.id\": \"https://graph.microsoft.com/v1.0/users/{id}\"\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Put, "https://graph.microsoft.com/v1.0/users/{id}/manager/$ref") { Content = new StringContent(directoryObj) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const directoryObject = {\r\n" + " '@odata.id': 'https://graph.microsoft.com/v1.0/users/{id}'\r\n" + "};\r\n" + "\r\n" + "await client.api('/users/{id}/manager/$ref')\r\n" + "\t.put(directoryObject);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
/// <summary> /// Entry point to generate snippets from the payload /// </summary> /// <param name="language"></param> /// <param name="httpRequestMessage"></param> /// <returns>String of snippet generated</returns> public string ProcessPayloadRequest(HttpRequestMessage httpRequestMessage, string language) { var(edmModel, serviceRootUri) = GetModelAndServiceUriTuple(httpRequestMessage.RequestUri); var snippetModel = new SnippetModel(httpRequestMessage, serviceRootUri.AbsoluteUri, edmModel); switch (language.ToLower()) { case "c#": var csharpGenerator = new CSharpGenerator(edmModel, IsCommandLine); return(csharpGenerator.GenerateCodeSnippet(snippetModel, CSharpExpressions)); case "javascript": return(JavaScriptGenerator.GenerateCodeSnippet(snippetModel, JavascriptExpressions)); case "objective-c": var objectiveCGenerator = new ObjectiveCGenerator(edmModel); return(objectiveCGenerator.GenerateCodeSnippet(snippetModel, ObjectiveCExpressions)); case "java": var javaGenerator = new JavaGenerator(edmModel); return(javaGenerator.GenerateCodeSnippet(snippetModel, JavaExpressions)); default: throw new Exception("Invalid Language selected"); } }
public static void Main() { // Read the Vale code from roguelike-small.vale. string valeCode = File.ReadAllText("roguelike-small.vale"); Console.WriteLine("Compiling..."); // This sends a request to the Vale compile server, and // results in some JSON representing VIR (Vale Intermediate Representation). string astJson = ValeHelper.Build(valeCode); // Uncomment this to see it! // Console.WriteLine(astJson); // Deserialize the VIR into AstModel instances. var ast = (IProgram)Json.Deserialize <AstModel>(astJson); Console.WriteLine("Cross-compiling to Javascript..."); // Convert the VIR into Javascript, and write to output.js using (var outputFileStream = File.Create("output.js")) { using (var outputFileStreamWriter = new StreamWriter(outputFileStream, Encoding.ASCII)) { foreach (var code in JavaScriptGenerator.Generate(ast)) { outputFileStreamWriter.Write(code); } } } // We're done! Console.WriteLine("Compiling done! Now run with:"); Console.WriteLine(" node output.js"); }
//This tests asserts that we can generate snippets from json objects with nested arrays inside them. public void GeneratesPatchRequestSnippetFromJsonObject() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested objects string array const string userJsonObject = "{\r\n \"accountEnabled\": true,\r\n " + "\"businessPhones\": [\r\n \"businessPhones-value\",\"businessPhones-value2\",\"businessPhones-value3\"\r\n ],\r\n " +//nested ArrayObject with 3 items "\"city\": \"city-value\"\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Patch, "https://graph.microsoft.com/v1.0/me") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n " + "accountEnabled: true,\r\n " + "businessPhones: [\r\n" + " 'businessPhones-value','businessPhones-value2','businessPhones-value3'\r\n" + " ],\r\n " + "city: 'city-value'\r\n" + "};\r\n" + "\r\n" + "await client.api('/me')\r\n\t.update(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
public void JavaScript_Complex() { var generator = new JavaScriptGenerator(); var generated = generator.Generate(Ast.Complex()); Console.WriteLine(generated); }
private void populateLists() { IProxyGenerator gen1 = new CSharpGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen1.GetName(), gen1)); IProxyGenerator gen2 = new JavaScriptGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen2.GetName(), gen2)); IProxyGenerator gen3 = new JavaScriptDojoAMDGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen3.GetName(), gen3)); IProxyGenerator gen4 = new JavaGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen4.GetName(), gen4)); IProxyGenerator gen5 = new ObjectiveCGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen5.GetName(), gen5)); IProxyGenerator gen6 = new FlexGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen6.GetName(), gen6)); IProxyGenerator gen7 = new AngularGenerator(); cmbGenerator.Items.Add(new GeneratorItem(gen7.GetName(), gen7)); cmbTypeMap.Items.Add(new TypeMapItem("No Type Map", null)); ResourceManager resMan = new ResourceManager(); foreach (TypeMap tm in resMan.GetTypeMaps()) { TypeMapItem item = new TypeMapItem(tm.Name, tm); cmbTypeMap.Items.Add(item); } cmbTypeMap.Items.Add(new TypeMapItem("Custom", null)); }
public ActionResult JavaScript(Block block) { var generator = new JavaScriptGenerator(); var generated = generator.Generate(block); return(Content(generated)); }
// This test asserts that single quotes inside strings are escaped public void GenerateSnippetsWithSingleQuotesInsideString() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); const string actionResultParts = "{\r\n" + " \"values\": [\r\n" + " {\r\n" + " \"@odata.type\": \"microsoft.graph.aadUserConversationMember\",\r\n" + " \"roles\":[],\r\n" + " \"[email protected]\": \"https://graph.microsoft.com/beta/users('18a80140-b0fb-4489-b360-2f6efaf225a0')\"\r\n" + " },\r\n" + " {\r\n" + " \"@odata.type\": \"microsoft.graph.aadUserConversationMember\",\r\n" + " \"roles\":[\"owner\"],\r\n" + " \"[email protected]\": \"https://graph.microsoft.com/beta/users('86503198-b81b-43fe-81ee-ad45b8848ac9')\"\r\n" + " }\r\n" + " ]\r\n" + "}"; var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/beta/teams/e4183b04-c9a2-417c-bde4-70e3ee46a6dc/members/add") { Content = new StringContent(actionResultParts) }; var betaServiceRootUrl = "https://graph.microsoft.com/beta"; var betaEdmModel = CsdlReader.Parse(XmlReader.Create(CommonGeneratorShould.CleanBetaMetadata)); var snippetModel = new SnippetModel(requestPayload, betaServiceRootUrl, betaEdmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const actionResultPart = {\r\n" + " values: [\r\n" + " {\r\n" + " '@odata.type': 'microsoft.graph.aadUserConversationMember',\r\n" + " roles: [],\r\n" + " '*****@*****.**': 'https://graph.microsoft.com/beta/users(\\'18a80140-b0fb-4489-b360-2f6efaf225a0\\')'\r\n" + " },\r\n" + " {\r\n" + " '@odata.type': 'microsoft.graph.aadUserConversationMember',\r\n" + " roles: ['owner'],\r\n" + " '*****@*****.**': 'https://graph.microsoft.com/beta/users(\\'86503198-b81b-43fe-81ee-ad45b8848ac9\\')'\r\n" + " }\r\n" + " ]\r\n" + "};\r\n" + "\r\n" + "await client.api('/teams/e4183b04-c9a2-417c-bde4-70e3ee46a6dc/members/add')\r\n" + "\t.version('beta')\r\n" + "\t.post(actionResultPart);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
public void GenerateExampleApiTypeScript_IncludesEnums() { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; var parser = new FsdParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName) !; Assert.IsNotNull(stream); using (var reader = new StreamReader(stream)) service = parser.ParseDefinition(new ServiceDefinitionText(Path.GetFileName(fileName), reader.ReadToEnd())); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = true, NewLine = "\n", }; var result = generator.GenerateOutput(service); Assert.IsNotNull(result); var typesFile = result.Files.Single(f => f.Name == "exampleApiTypes.ts"); const string expectedEnums = @" /** Identifies a widget field. */ export enum WidgetField { /** The 'id' field. */ id = 'id', /** The 'name' field. */ name = 'name', /** * The 'weight' field. * @deprecated */ weight = 'weight', } /** * An obsolete enum. * @deprecated */ export enum ObsoleteEnum { unused = 'unused', }"; Assert.That(typesFile.Text, Contains.Substring(expectedEnums)); const string expectedEnumUsage = @"widgetField?: WidgetField;"; Assert.That(typesFile.Text, Contains.Substring(expectedEnumUsage)); }
//This tests asserts that we can generate snippets with query options present public void GeneratesSnippetsWithQueryOptions() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2017-01-01T19:00:00.0000000&endDateTime=2017-01-07T19:00:00.0000000"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "let calendarView = await client.api('/me/calendar/calendarView?startDateTime=2017-01-01T19:00:00.0000000&endDateTime=2017-01-07T19:00:00.0000000')\r\n\t.get();"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
void convertButton_Click(object sender, EventArgs e) { CompileResult result = JavaScriptGenerator.Generate(basicSourceTB.Text); if (result.IsSuccessful) { javascriptSourceTB.Text = @" function runProgram() { run('console', 22, 40, " + result.StartFunction + @"); } "; javascriptSourceTB.Text += result.JavaScript; } else { javascriptSourceTB.Text = "COMPILE ERROR" + Environment.NewLine + Environment.NewLine + result.ResultMessage; } }
public void GenerateExampleApiSuccess(bool typeScript) { ServiceInfo service; const string fileName = "Facility.CodeGen.JavaScript.UnitTests.ExampleApi.fsd"; var parser = new FsdParser(); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName); Assert.IsNotNull(stream); using (var reader = new StreamReader(stream)) service = parser.ParseDefinition(new ServiceDefinitionText(Path.GetFileName(fileName), reader.ReadToEnd())); var generator = new JavaScriptGenerator { GeneratorName = "JavaScriptGeneratorTests", TypeScript = typeScript, }; generator.GenerateOutput(service); }
//This tests asserts that we can generate snippets from json objects with nested objects inside them. public void GeneratesPostRequestSnippetFromJsonObject() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested object properties const string userJsonObject = "{\r\n \"accountEnabled\": true,\r\n " + "\"displayName\": \"displayName-value\",\r\n " + "\"mailNickname\": \"mailNickname-value\",\r\n " + "\"userPrincipalName\": \"[email protected]\",\r\n " + " \"passwordProfile\" : {\r\n \"forceChangePasswordNextSignIn\": true,\r\n \"password\": \"password-value\"\r\n }\r\n}";//nested passwordProfile Object var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/users") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n" + " accountEnabled: true,\r\n" + " displayName: 'displayName-value',\r\n" + " mailNickname: 'mailNickname-value',\r\n" + " userPrincipalName: '*****@*****.**',\r\n" + " passwordProfile: {\r\n" + " forceChangePasswordNextSignIn: true,\r\n" + " password: '******'\r\n" + " }\r\n" + "};\r\n" + "\r\n" + "await client.api('/users')\r\n" + "\t.post(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
//This tests asserts that we can generate snippets from json objects with nested objects inside them. public void GeneratesCorrectCreateCalendarEventJavascriptSnippet() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested object properties const string userJsonObject = "{\r\n \"subject\": \"Let's go for lunch\",\r\n" + " \"body\": {\r\n" + " \"contentType\": \"HTML\",\r\n" + " \"content\": \"Does mid month work for you?\"\r\n" + " },\r\n" + " \"start\": {\r\n" + " \"dateTime\": \"2019-03-15T12:00:00\",\r\n" + " \"timeZone\": \"Pacific Standard Time\"\r\n" + " },\r\n " + "\"end\": {\r\n" + " \"dateTime\": \"2019-03-15T14:00:00\",\r\n" + " \"timeZone\": \"Pacific Standard Time\"\r\n" + " },\r\n" + " \"location\":{\r\n" + " \"displayName\":\"Harry's Bar\"\r\n" + " },\r\n" + " \"attendees\": [\r\n" + " {\r\n" + " \"emailAddress\": {\r\n" + " \"address\":\"[email protected]\",\r\n" + " \"name\": \"Adele Vance\"\r\n" + " },\r\n" + " \"type\": \"required\"\r\n" + " }\r\n" + " ]" + "\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/users") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n" + " subject: 'Let\\'s go for lunch',\r\n" + " body: {\r\n" + " contentType: 'HTML',\r\n" + " content: 'Does mid month work for you?'\r\n" + " },\r\n" + " start: {\r\n" + " dateTime: '2019-03-15T12:00:00',\r\n" + " timeZone: 'Pacific Standard Time'\r\n" + " },\r\n" + " end: {\r\n" + " dateTime: '2019-03-15T14:00:00',\r\n" + " timeZone: 'Pacific Standard Time'\r\n" + " },\r\n" + " location: {\r\n" + " displayName: 'Harry\\'s Bar'\r\n" + " },\r\n" + " attendees: [\r\n" + " {\r\n" + " emailAddress: {\r\n" + " address: '*****@*****.**',\r\n" + " name: 'Adele Vance'\r\n" + " },\r\n" + " type: 'required'\r\n" + " }\r\n" + " ]\r\n" + "};\r\n" + "\r\n" + "await client.api('/users')\r\n" + "\t.post(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
public ContentItemsComponent(IWebDriver driver) { virtualCanvasPage = driver; scriptGenerator = new JavaScriptGenerator(); }
private void processClientCode(NameValueCollection queryString, HttpContext context) { IProxyGenerator generator = null; ResourceManager resMan = new ResourceManager(); string platform = queryString["platform"]; if (string.IsNullOrEmpty(platform)) { context.Response.ContentType = "text/plain"; context.Response.Write("No Platform is Specified"); return; } platform = platform.ToLower(); if (platform == "csharp") { TypeMap tm = resMan.GetTypeMap("dotnet-csharp.typemap"); generator = new CSharpGenerator(tm); } else if (platform == "java") { TypeMap tm = resMan.GetTypeMap("dotnet-java.typemap"); generator = new JavaGenerator(tm); } else if (platform == "js-angularjs") { generator = new AngularGenerator(); } else if (platform == "js-dojo") { generator = new JavaScriptGenerator(); } else if (platform == "js-dojo-amd") { generator = new JavaScriptDojoAMDGenerator(); } else if (platform == "flex") { generator = new FlexGenerator(); } else if (platform == "objc") { TypeMap tm = resMan.GetTypeMap("dotnet-objc.typemap"); generator = new ObjectiveCGenerator(tm); } if (generator == null) { context.Response.ContentType = "text/plain"; context.Response.Write("Unknown Platform"); return; } string format = queryString["format"]; format = format == null ? "zip" : format.ToLower(); Service svc = createService(); IDictionary<string, string> files = generator.Generate(svc); if (format == "zip") { byte[] buffer = ZipExporter.Export(files); MemoryStream ms = new MemoryStream(buffer); //context.Response.ContentType = "application/zip"; context.Response.ContentType = "application/octet-stream"; string fileName = string.Format("{0}_{1}.zip", svc.Name, platform); context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); ms.CopyTo(context.Response.OutputStream); context.Response.OutputStream.Close(); } else if (format == "json") { string s = JsonConvert.SerializeObject(files); context.Response.ContentType = "text/json"; context.Response.Write(s); } else if (format == "xml") { } }