public void sdk_TemplateCreate()
        {
            Console.WriteLine("Exclusão do usuário 44: " + eqpt.Destroy <Users>(44));
            long idU = eqpt.Add <Users>(new Users()
            {
                id           = 44,
                name         = "Usuario com biometria",
                registration = "biometria"
            });

            Assert.IsTrue(idU == 44, "Erro ao incluir o usuário 44");
            Console.WriteLine("Incluído usuário 44");

            TemplateResult tr1 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo1.bmp"));
            TemplateResult tr2 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo2.bmp"));
            TemplateResult tr3 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo3.bmp"));

            Console.WriteLine("Templates extraidos: " + tr1.quality + " " + tr2.quality + " " + tr3.quality);

            StatusResult er = eqpt.TemplateCreate(idU, tr1.template, tr2.template, tr3.template);

            if (er.Codigo != 0)
            {
                Console.WriteLine(er.Codigo + ": " + er.Status);
                Assert.Inconclusive(er.Codigo + ": " + er.Status);
            }
            else
            {
                Console.WriteLine("Templates Adicionado!");
            }
        }
Esempio n. 2
0
        public TemplateResult Run(Config config, string assemblyPath)
        {
            var rv = new TemplateResult();

            AssemblyResolver.Create(Path.GetDirectoryName(assemblyPath));

            Assembly assembly = Assembly.LoadFile(assemblyPath);

            rv.Log($"Loaded {assemblyPath}");
            ITemplate template = (ITemplate)assembly.CreateInstance("MteTemplate");

            try
            {
                if (template != null)
                {
                    rv.Log($"Found template {template.GetType().FullName}");
                    return(template.Execute(config));
                }
                throw new Exception($"Could not find 'MteTemplate' in {assembly.FullName} @ '{assembly.Location}'");
            }
            catch (Exception e)
            {
                rv.Log($"Exception in Template {assemblyPath}\r\n{e}");
                throw;
            }
        }
        public void sdk_TemplateExtract()
        {
            TemplateResult tr = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo1.bmp"));

            Assert.IsTrue(tr.quality > 50 && !string.IsNullOrEmpty(tr.template), "Erro ao extrair template");
            Console.WriteLine("Quality: " + tr.quality + "\r\nTemplate: " + tr.template);
        }
        public bool TryGetDescriptorBinding(string shapeType, out ShapeBinding shapeBinding)
        {
            var processors = BuildShapeProcessors();

            TemplateResult templateResult = null;

            if (processors.TryGetValue(shapeType, out templateResult))
            {
                shapeBinding = new ShapeBinding {
                    BindingName = "Templates",
                    Binding     = ctx => CoerceHtmlString(_templateService.Execute(
                                                              templateResult.Template,
                                                              templateResult.Name,
                                                              templateResult.Processor, ctx.Value)),
                    ShapeDescriptor = new ShapeDescriptor {
                        ShapeType = shapeType
                    }
                };

                return(true);
            }

            shapeBinding = null;
            return(false);
        }
Esempio n. 5
0
        public async Task ValidateVMInExistingArmSubnetId()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM3"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualMachines.Add((await azureContextUSCommercialRetriever.GetAzureAsmCloudServices())[0].VirtualMachines[0]);
            TestHelper.SetTargetSubnets(artifacts);

            TemplateResult templateReault = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            JObject templateJson = templateReault.GenerateTemplate();

            // Validate VM
            var vmResource = templateJson["resources"].Where(
                j => j["type"].Value <string>() == "Microsoft.Compute/virtualMachines").Single();

            Assert.AreEqual("VM3-vm", vmResource["name"].Value <string>());
            StringAssert.Contains(vmResource["properties"]["networkProfile"]["networkInterfaces"][0]["id"].Value <string>(),
                                  "'" + ArmConst.ProviderNetworkInterfaces + "VM3-nic'");

            // Validate NIC
            var nicResource = templateJson["resources"].Where(
                j => j["type"].Value <string>() == "Microsoft.Network/networkInterfaces").Single();

            Assert.AreEqual("VM3-nic", nicResource["name"].Value <string>());
            StringAssert.Contains(nicResource["properties"]["ipConfigurations"][0]["properties"]["subnet"]["id"].Value <string>(),
                                  "/subscriptions/22222222-2222-2222-2222-222222222222/resourceGroups/dummygroup-rg/providers/Microsoft.Network/virtualNetworks/DummyVNet/subnets/subnet01");
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T">is the object type corresponing to the tempalte</typeparam>
        /// <param name="tPath">xls template path</param>
        /// <returns></returns>
        protected virtual ActionResult Template <T>(string tPath, T Model) where T : class
        {
            TemplateResult <T> tr = new TemplateResult <T>(tPath);

            tr.Object = (T)Model;
            return(tr);
        }
Esempio n. 7
0
        /// <summary>
        /// Write a template to storage
        /// </summary>
        internal static async Task <TemplateResult> WriteTemplate(string baseDirectory, ITemplate template)
        {
            var result = new TemplateResult
            {
                FilePath = Path.Combine(CreateFolder(baseDirectory, template.GetFilePath()), template.GetFileName())
            };

            string content = null;

            try
            {
                content = template.GetFileContent();
            }
            catch (Exception ex)
            {
                result.Error    = ex.ToString();
                result.HasError = true;

                Console.WriteLine(ex.ToString());

                return(result);
            }
            if (string.IsNullOrEmpty(content) || string.IsNullOrEmpty(result.FilePath))
            {
                // Skip if file is empty
            }
            else
            {
                result = await WriteAllText(result.FilePath, content);
            }

            return(result);
        }
Esempio n. 8
0
        public async Task ValidateVMInVnetButNotInTargetVNet()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM3"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualMachines.Add((await azureContextUSCommercialRetriever.GetAzureAsmCloudServices())[0].VirtualMachines[0]);

            bool exceptionThrown = false;

            try
            {
                TemplateResult templateResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);
            }
            catch (Exception exc)
            {
                if (exc.GetType() == typeof(ArgumentException) && exc.Message == "Target Virtual Network for ASM Virtual Machine 'VM3' must be specified.")
                {
                    exceptionThrown = true;
                }
            }

            Assert.IsFalse(!exceptionThrown, "Did not receive Null Target Virtual Network Argument Exception");
        }
Esempio n. 9
0
      /// <summary>
      /// Index action.
      /// </summary>
      public ActionResult Index()
      {
         // Setup the result to use Default.master as the master page.
         var result = new TemplateResult() { MasterPageFile = "~/Default.master" };
         // Setup some viewdata
         ViewData[ "title" ] = "Home"; // Master page needs title
         ViewData[ "MVC" ] = "Cool";

         // Load a plain ASP.NET user control into the Body template
         result.AddControl( "Body", "~/Controls/HelloWorld.ascx" );

         // Load a custom control instance into the Body template
         result.AddControl( "Body",
            new Block()
            {
               CssClass = "block",
               Text = String.Format( "Page processed at {0}", DateTime.Now )
            }
         );

         // Load an MVC view user control into the Right template
         result.AddControl( "Right", "~/Views/ViewDataDumper.ascx" );

         return result;
      }
Esempio n. 10
0
        //扫描箱码
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (e.KeyChar == 13)
                {
                    String result = HttpRequest.GetTemplates(QRanalyze.QRDecod(textBox1.Text.Substring(textBox1.Text.Length - 35, 35)), Session.Id);

                    TemplateResult Result = JsonConvert.DeserializeObject <TemplateResult>(result);

                    if (Result.success)
                    {
                        hashtable.Clear();
                        comboBox.Items.Clear();
                        foreach (UnitTemp unitTemp in Result.data.unitTemps)
                        {
                            foreach (TempDel Temp in unitTemp.tempDels)
                            {
                                comboBox.Items.Add(Temp.id);
                                hashtable.Add(Temp.id, Temp);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally {
                textBox1.Text = "";
            }
        }
        public void sdk_TemplateMatch()
        {
            Console.WriteLine("Exclusão do usuário 44: " + eqpt.Destroy <Users>(44));

            TemplateResult tr1 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo1.bmp"));

            Console.WriteLine("Quality: " + tr1.quality + "\r\nTemplate: " + tr1.template);
            TemplateResult tr2 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo2.bmp"));

            Console.WriteLine("Quality: " + tr2.quality + "\r\nTemplate: " + tr2.template);
            TemplateResult tr3 = eqpt.TemplateExtract(new Bitmap(@"..\..\dedo3.bmp"));

            Console.WriteLine("Quality: " + tr3.quality + "\r\nTemplate: " + tr3.template);

            string       cOther = "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";
            StatusResult er     = eqpt.TemplateMatch(tr1.template, cOther, tr3.template);

            Console.WriteLine("A) " + er.Codigo + ": " + er.Status);
            Assert.IsTrue(er.Codigo != 0, "Deveria ter resultado erro");

            // Tudo certo aqui
            er = eqpt.TemplateMatch(tr1.template, tr2.template, tr3.template);
            Console.WriteLine("B) " + er.Codigo + ": " + er.Status);
            Assert.IsTrue(er.Codigo == 0, "Deveria ter dado certo");
        }
Esempio n. 12
0
 public void Selected_item_is_maintained()
 {
     TemplateResult
     .HasElement("select")
     .HasElement(x => x.HasAttributeValue("value", "nothing"))
     .WithAttribute("selected").ShouldHaveValue("true");
 }
        public void TestPrimitiveHeaderGenerationWithDictionaryCollectionType()
        {
            ProjectMappingManagerSetup.InitializeManager(ServiceProvider, "ProjectMapping.DataContractDsl.Tests.xml");

            PrimitiveDataTypeCollection collectionElement =
                CreateDefaultPrimitiveDataTypeCollection(typeof(Dictionary <,>), PrimitiveDataElementType1);
            TemplateResult result = RunTemplateWithErrors(collectionElement);

            // should have a warning
            Assert.AreEqual <int>(1, result.Errors.Length);

            string content = result.ContentResults;

            Type generatedType = CompileAndGetType(content);

            Assert.IsTrue(generatedType.IsClass);
            Assert.AreEqual <Type>(typeof(Collection <int>), generatedType.BaseType);
            XmlRootAttribute xmlRootAttr = TypeAsserter.AssertAttribute <XmlRootAttribute>(generatedType);

            Assert.AreEqual <string>(ElementNamespace, xmlRootAttr.Namespace);
            Assert.IsFalse(xmlRootAttr.IsNullable);
            XmlTypeAttribute xmlTypeAttr = TypeAsserter.AssertAttribute <XmlTypeAttribute>(generatedType);

            Assert.AreEqual <string>(ElementNamespace, xmlTypeAttr.Namespace);
        }
Esempio n. 14
0
        private string RunTemplateInternal(ModelElement rootElement, ICodeGenerationService codeGenerationService)
        {
            TemplateResult result = RunTemplateReturningErrors(rootElement, codeGenerationService);

            Assert.AreNotEqual <string>("ErrorGeneratingOutput", result.ContentResults);
            return(result.ContentResults);
        }
Esempio n. 15
0
 public void Selected_item_is_updated()
 {
     TemplateResult
     .HasElement("select")
     .HasElement(x => x.HasAttributeValue("value", Entity.Name))
     .WithAttribute("selected").ShouldHaveValue("true");
 }
Esempio n. 16
0
        public async Task ValidateSingleVnetWithNoSubnetsGetsNewDefaultSubet()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET4"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualNetworks.Add(await azureContextUSCommercialRetriever.GetAzureAsmVirtualNetwork("asmnet"));

            TemplateResult templateResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            JObject templateJson = templateResult.GenerateTemplate();

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("asmnet-vnet", vnets.First()["name"].Value <string>());
            Assert.AreEqual("10.0.0.0/20", vnets.First()["properties"]["addressSpace"]["addressPrefixes"][0].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(1, subnets.Count());
            Assert.AreEqual("Subnet1", subnets[0]["name"].Value <string>());
            Assert.AreEqual("10.0.0.0/20", subnets[0]["properties"]["addressPrefix"].Value <string>());
        }
Esempio n. 17
0
        public async Task ValidateSingleVnetWithNsgAndRT()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET2"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualNetworks.Add(await azureContextUSCommercialRetriever.GetAzureAsmVirtualNetwork("asmtest"));
            artifacts.NetworkSecurityGroups.Add(await azureContextUSCommercialRetriever.GetAzureAsmNetworkSecurityGroup("asmnsg"));

            TemplateResult templateResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            JObject templateJson = templateResult.GenerateTemplate();

            // Validate NSG
            var nsgs = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/networkSecurityGroups");

            Assert.AreEqual(1, nsgs.Count());
            Assert.AreEqual("asmnsg-nsg", nsgs.First()["name"].Value <string>());

            // Validate NSG rules
            JArray rules = (JArray)nsgs.First()["properties"]["securityRules"];

            Assert.AreEqual(2, rules.Count());
            Assert.AreEqual("Enable-Internal-DNS", rules[0]["name"].Value <string>());
            Assert.AreEqual("Port-7777-rule", rules[1]["name"].Value <string>());

            // Validate RouteTable
            var rt = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/routeTables");

            Assert.AreEqual(1, rt.Count());
            Assert.AreEqual("asmrt", rt.First()["name"].Value <string>());

            // Validate Routes
            JArray routes = (JArray)rt.First()["properties"]["routes"];

            Assert.AreEqual(1, routes.Count());
            Assert.AreEqual("all-traffic-to-fw", routes[0]["name"].Value <string>());

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("asmtest-vnet", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(1, subnets.Count());
            Assert.AreEqual("Subnet-1", subnets.First()["name"].Value <string>());
            StringAssert.Contains(subnets.First()["properties"]["networkSecurityGroup"]["id"].Value <string>(), "networkSecurityGroups/asmnsg");
            StringAssert.Contains(subnets.First()["properties"]["routeTable"]["id"].Value <string>(), "routeTables/asmrt");
        }
Esempio n. 18
0
 private static void CaptureTemplateErrors <TTemplateContext>(TemplateResult templateResult, TemplateContext <TTemplateContext> templateContext, ValidationCategory validationCategory)
     where TTemplateContext : class
 {
     foreach (var templateError in templateContext.Errors)
     {
         templateResult.CaptureError(templateError.Message, ErrorLevel.ERROR, validationCategory, templateError.LineInfo);
     }
 }
Esempio n. 19
0
 protected override bool ProcessItem(ITaskItem item, Config config, TemplateResult result)
 {
     if (Path.GetFileName(item.GetMetadata("FullPath"))?.StartsWith("TemporaryGeneratedFile") == true)
     {
         return(true);
     }
     return(base.ProcessItem(item, config, result));
 }
Esempio n. 20
0
        public async Task ValidateSingleVnetWithExpressRouteGateway()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET3"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualNetworks.Add(await azureContextUSCommercialRetriever.GetAzureAsmVirtualNetwork("vnet3"));

            TemplateResult templateResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            JObject templateJson = templateResult.GenerateTemplate();

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("vnet3-vnet", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(2, subnets.Count());

            // Validate gateway
            var gw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworkGateways");

            Assert.AreEqual(1, gw.Count());
            Assert.AreEqual("vnet3-gw", gw.First()["name"].Value <string>());
            Assert.AreEqual("ExpressRoute", gw.First()["properties"]["gatewayType"].Value <string>());

            // Validate no local network
            var localGw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/localNetworkGateways");

            Assert.AreEqual(0, localGw.Count());

            // Validate connection
            var conn = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/connections");

            Assert.AreEqual(1, conn.Count());
            Assert.AreEqual("vnet3-gw-localsite-connection", conn.First()["name"].Value <string>());
            Assert.AreEqual("ExpressRoute", conn.First()["properties"]["connectionType"].Value <string>());
            Assert.IsNotNull(conn.First()["properties"]["peer"]["id"].Value <string>());

            // Validate message
            Assert.AreEqual(1, templateResult.Messages.Count);
            StringAssert.Contains(templateResult.Messages[0], "ExpressRoute");
        }
Esempio n. 21
0
        protected virtual bool ProcessItem(ITaskItem item, Config config, TemplateResult result)
        {
            string fullPath = item.GetMetadata("FullPath");
            //TODO: ensure this is actually a C# file
            var        tree    = CSharpSyntaxTree.ParseText(File.ReadAllText(fullPath));
            SyntaxNode newRoot = Visit(tree.GetRoot());

            newRoot = Formatter.Format(newRoot, newRoot.FullSpan, new AdhocWorkspace());
            WriteFile(newRoot, item, config, result);
            return(true);
        }
Esempio n. 22
0
		/// <summary>
		/// Don't use this unless you're implementing ICodeTemplateWidget. Use Insert instead.
		/// </summary>
		public TemplateResult InsertTemplateContents (MonoDevelop.Ide.Gui.Document document)
		{
			ProjectDom dom = document.Dom;
			ParsedDocument doc = document.ParsedDocument ?? MonoDevelop.Projects.Dom.Parser.ProjectDomService.GetParsedDocument (dom, document.FileName);
			MonoDevelop.Ide.Gui.TextEditor editor = document.TextEditor;

			Mono.TextEditor.TextEditorData data = document.TextEditorData;

			int offset = editor.CursorPosition;
			int line, col;
			editor.GetLineColumnFromPosition (offset, out line, out col);
//			string leadingWhiteSpace = GetLeadingWhiteSpace (editor, editor.CursorLine);
			
			TemplateContext context = new TemplateContext {
				Template = this,
				Document = document,
				ProjectDom = dom,
				ParsedDocument = doc,
				InsertPosition = new DomLocation (line, col),
				LineIndent = GetIndent (editor, line, 0),
				TemplateCode = IndentCode (Code, document.TextEditorData.EolMarker, GetIndent (editor, line, 0))
			};

			if (data.IsSomethingSelected) {
				int start = data.SelectionRange.Offset;
				while (Char.IsWhiteSpace (data.Document.GetCharAt (start))) {
					start++;
				}
				int end = data.SelectionRange.EndOffset;
				while (Char.IsWhiteSpace (data.Document.GetCharAt (end - 1))) {
					end--;
				}
				context.LineIndent = GetIndent (editor, data.Document.OffsetToLineNumber (start) + 1, 0);
				context.SelectedText = RemoveIndent (data.Document.GetTextBetween (start, end), context.LineIndent);
				data.Remove (start, end - start);
				offset = start;
			} else {
				string word = GetWordBeforeCaret (editor).Trim ();
				if (word.Length > 0)
					offset = DeleteWordBeforeCaret (editor);
			}
			
			TemplateResult template = FillVariables (context);
			template.InsertPosition = offset;
			document.TextEditorData.Insert (offset, template.Code);
			
			if (template.CaretEndOffset >= 0) {
				document.TextEditorData.Caret.Offset = offset + template.CaretEndOffset; 
			} else {
				document.TextEditorData.Caret.Offset= offset + template.Code.Length; 
			}
			return template;
		}
Esempio n. 23
0
        public bool TryGetDescriptorBinding(string shapeType, out ShapeBinding shapeBinding)
        {
            var processors = BuildShapeProcessors();

            var acceptableRenderingModes = new List <RenderingMode>()
            {
                RenderingMode.FrontEndAndAdmin
            };

            if (AdminFilter.IsApplied(_requestContext))
            {
                acceptableRenderingModes.Add(RenderingMode.Admin);
            }
            else
            {
                acceptableRenderingModes.Add(RenderingMode.FrontEnd);
            }

            var            templateResults      = processors[shapeType].Where(template => acceptableRenderingModes.Contains(template.RenderingMode));
            TemplateResult templateResult       = null;
            var            templateResultsCount = templateResults.Count();

            if (templateResultsCount == 1)
            {
                templateResult = templateResults.FirstOrDefault();
            }
            else if (templateResultsCount > 1)
            {
                // Templates with the same name but specified rendering mode are prioritized.
                templateResult = templateResults.FirstOrDefault(template => template.RenderingMode != RenderingMode.FrontEndAndAdmin);
            }

            if (templateResult != null)
            {
                shapeBinding = new ShapeBinding {
                    BindingName = "Templates",
                    Binding     = ctx => CoerceHtmlString(_templateService.Execute(
                                                              templateResult.Template,
                                                              templateResult.Name,
                                                              templateResult.Processor, ctx.Value)),
                    ShapeDescriptor = new ShapeDescriptor {
                        ShapeType = shapeType
                    }
                };

                return(true);
            }

            shapeBinding = null;
            return(false);
        }
Esempio n. 24
0
        //关联模板集合
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                String result = HttpRequest.GetTemplates(QRanalyze.QRDecod(txtTemplates.Text), Session.Id);

                TemplateResult TemplateResult = JsonConvert.DeserializeObject <TemplateResult>(result);

                Console.WriteLine(result);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }
Esempio n. 25
0
        private Dictionary <string, string> GetProcessedItems(TemplateResult templateResult)
        {
            Dictionary <string, string> processedItems = new Dictionary <string, string>();

            foreach (ArmResource resource in templateResult.Resources)
            {
                if (!processedItems.ContainsKey(resource.type + resource.name))
                {
                    processedItems.Add(resource.type + resource.name, resource.location);
                }
            }

            return(processedItems);
        }
Esempio n. 26
0
        public async Task ValidateComplexSingleVnet()
        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET1"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualNetworks.Add(await azureContextUSCommercialRetriever.GetAzureAsmVirtualNetwork("10.2.0.0"));

            TemplateResult templateResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            JObject templateJson = templateResult.GenerateTemplate();

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("10.2.0.0-vnet", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(8, subnets.Count());

            // Validate gateway
            var gw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworkGateways");

            Assert.AreEqual(1, gw.Count());
            Assert.AreEqual("10.2.0.0-gw", gw.First()["name"].Value <string>());

            var localGw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/localNetworkGateways");

            Assert.AreEqual(2, localGw.Count());
            Assert.AreEqual("MOBILEDATACENTER-LocalGateway", localGw.First()["name"].Value <string>());
            Assert.AreEqual("EastUSNet-LocalGateway", localGw.Last()["name"].Value <string>());

            var pips = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/publicIPAddresses");

            Assert.AreEqual(1, pips.Count());
            Assert.AreEqual("10.2.0.0-gw-pip", pips.First()["name"].Value <string>());
            Assert.AreEqual("Dynamic", pips.First()["properties"]["publicIPAllocationMethod"].Value <string>());
        }
        public void ShouldErrorWhenPrimitivePartHasEmptyType()
        {
            ProjectMappingManagerSetup.InitializeManager(ServiceProvider, "ProjectMapping.ServiceContractDsl.Tests.xml");
            Message rootElement = CreateRoot <Message>(MessageContractElementName, MessageContractElementNamespace);

            rootElement.ServiceContractModel.ProjectMappingTable = "WCF";
            PrimitiveMessagePart primitivePart = new PrimitiveMessagePart(Store);

            primitivePart.Name = "TestProperty";
            primitivePart.Type = string.Empty;
            rootElement.MessageParts.Add(primitivePart);

            TemplateResult result = RunTemplateWithErrors(rootElement);

            Assert.AreEqual <int>(1, result.Errors.Length);
            //StringAssert.Contains(result.Errors[0], "Cannot generate Message Contract due to invalid type");
        }
Esempio n. 28
0
        private bool RunTemplate(string assemblyPath, Config config)
        {
            AppDomain domain = null;

            try
            {
                var setup = new AppDomainSetup
                {
                    ApplicationBase    = Path.GetDirectoryName(typeof(Runner).Assembly.Location),
                    ConfigurationFile  = $"{assemblyPath}.config",
                    LoaderOptimization = LoaderOptimization.MultiDomain
                };
                Log.LogMessage($"Creating app domain for: {assemblyPath}");
                domain = AppDomain.CreateDomain(Path.GetFileNameWithoutExtension(assemblyPath) + "MteDomain", null,
                                                setup);
                //
                ////domain = AppDomain.CreateDomain(Path.GetFileNameWithoutExtension(assemblyPath) + "MteDomain");
                //
                //Log.LogMessage($"MTE.Internal: {typeof(Runner).Assembly.Location}");
                //
                var runner =
                    (Runner)domain.CreateInstanceFromAndUnwrap(typeof(Runner).Assembly.Location, typeof(Runner).FullName);

                Log.LogMessage("Created runner");
                TemplateResult result = runner.Run(config, assemblyPath);
                Log.LogMessage($"Got TemplateResult {result.Success}");
                foreach (var message in result.Messages ?? Enumerable.Empty <string>())
                {
                    Log.LogMessage($" ==> {message}");
                }
                if (result.Success)
                {
                    RemoveItems = result.RemovedItems.ToArray();
                    NewItems    = result.AddedItems.Select(x => new TaskItem(x.FilePath)).Cast <ITaskItem>().ToArray();
                }
                return(true);
            }
            finally
            {
                if (domain != null)
                {
                    AppDomain.Unload(domain);
                }
            }
        }
Esempio n. 29
0
        private async Task <JObject> GenerateSingleVMTemplate()

        {
            AzureContext       azureContextUSCommercial          = TestHelper.SetupAzureContext();
            TemplateGenerator  templateGenerator                 = TestHelper.SetupTemplateGenerator(azureContextUSCommercial);
            FakeAzureRetriever azureContextUSCommercialRetriever = (FakeAzureRetriever)azureContextUSCommercial.AzureRetriever;

            azureContextUSCommercialRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM1"));

            var artifacts = new AsmArtifacts();

            artifacts.VirtualMachines.Add((await azureContextUSCommercialRetriever.GetAzureAsmCloudServices())[0].VirtualMachines[0]);
            TestHelper.SetTargetSubnets(artifacts);

            TemplateResult tempalteResult = await templateGenerator.GenerateTemplate(TestHelper.GetTestAzureSubscription(), TestHelper.GetTestAzureSubscription(), artifacts, await TestHelper.GetTargetResourceGroup(azureContextUSCommercial), AppDomain.CurrentDomain.BaseDirectory);

            return(tempalteResult.GenerateTemplate());
        }
        public void TestPrimitiveHeaderGenerationWithArrayCollectionType()
        {
            ProjectMappingManagerSetup.InitializeManager(ServiceProvider, "ProjectMapping.DataContractDsl.Tests.xml");

            PrimitiveDataTypeCollection collectionElement =
                CreateDefaultPrimitiveDataTypeCollection(typeof(Array), PrimitiveDataElementType1);
            TemplateResult result = RunTemplateWithErrors(collectionElement);

            // should have a warning
            Assert.AreEqual <int>(1, result.Errors.Length);

            string content = result.ContentResults;

            Type generatedType = CompileAndGetType(content);

            Assert.IsTrue(generatedType.IsClass);
            Assert.AreEqual <Type>(typeof(Collection <int>), generatedType.BaseType);
        }
Esempio n. 31
0
        /// <summary>
        /// Write text to a file
        /// </summary>
        internal static async Task <TemplateResult> WriteAllText(string path, string contents)
        {
            var result = new TemplateResult
            {
                FilePath = path
            };

            byte[] existingFile = null;
            byte[] newFile      = null;
            if (File.Exists(result.FilePath))
            {
                var existingFileInfo = new FileInfo(path);
                using (var existingStream = existingFileInfo.OpenRead())
                {
                    existingFile = System.Security.Cryptography.MD5.Create().ComputeHash(existingStream);
                }
                newFile = System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(contents));
            }

            if (existingFile == null && newFile == null)
            {
                // Then a new file so continue
            }
            else if (IsHashEqual(existingFile, newFile))
            {
                // files the same so skip
                return(result);
            }
            // else files different so continue

            try
            {
                await File.WriteAllTextAsync(path, contents);
            }
            catch (Exception ex)
            {
                result.Error    = ex.ToString();
                result.HasError = true;

                Console.WriteLine(ex.ToString());
            }
            return(result);
        }
Esempio n. 32
0
		public TemplateResult FillVariables (TemplateContext context)
		{
			var expansion = CodeTemplateService.GetExpansionObject (this);
			var result = new TemplateResult ();
			var sb = new StringBuilder ();
			int lastOffset = 0;
			string code = context.Editor.FormatString (context.InsertPosition, context.TemplateCode);
			result.TextLinks = new List<TextLink> ();
			foreach (System.Text.RegularExpressions.Match match in variableRegEx.Matches (code)) {
				string name = match.Groups [1].Value;
				sb.Append (code.Substring (lastOffset, match.Index - lastOffset));
				lastOffset = match.Index + match.Length;
				if (string.IsNullOrEmpty (name)) { // $$ is interpreted as $
					sb.Append ("$");
				} else if (name == "end") {
					result.CaretEndOffset = sb.Length;
				} else if (name == "selected") {
					if (!string.IsNullOrEmpty (context.SelectedText)) {
						string indent = GetIndent (sb);
						string selection = Reindent (context.SelectedText, indent);
						sb.Append (selection);
					}
				}
				if (!variableDecarations.ContainsKey (name))
					continue;
				var link = result.TextLinks.Find (l => l.Name == name);
				bool isNew = link == null;
				if (isNew) {
					link = new TextLink (name);
					if (!string.IsNullOrEmpty (variableDecarations [name].ToolTip))
						link.Tooltip = GettextCatalog.GetString (variableDecarations [name].ToolTip);
					link.Values = new CodeTemplateListDataProvider (variableDecarations [name].Values);
					if (!string.IsNullOrEmpty (variableDecarations [name].Function)) {
						link.Values = expansion.RunFunction (context, null, variableDecarations [name].Function);
					}
					result.TextLinks.Add (link);
				}
				link.IsEditable = variableDecarations [name].IsEditable;
				link.IsIdentifier = variableDecarations [name].IsIdentifier;
				if (!string.IsNullOrEmpty (variableDecarations [name].Function)) {
					IListDataProvider<string > functionResult = expansion.RunFunction (context, null, variableDecarations [name].Function);
					if (functionResult != null && functionResult.Count > 0) {
						string s = (string)functionResult [functionResult.Count - 1];
						if (s == null) {
							if (variableDecarations.ContainsKey (name)) 
								s = variableDecarations [name].Default;
						}
						if (s != null) {
							link.AddLink (new TextSegment (sb.Length, s.Length));
							if (isNew) {
								link.GetStringFunc = delegate (Func<string, string> callback) {
									return expansion.RunFunction (context, callback, variableDecarations [name].Function);
								};
							}
							sb.Append (s);
						}
					} else {
						AddDefaultValue (sb, link, name);
					}
				} else {
					AddDefaultValue (sb, link, name);
				}
			}
			sb.Append (code.Substring (lastOffset, code.Length - lastOffset));
			
			// format & indent template code
			var data = TextEditorFactory.CreateNewDocument ();
			data.Text = sb.ToString ();
			data.TextChanged += delegate(object sender, MonoDevelop.Core.Text.TextChangeEventArgs e) {
				int delta = e.InsertionLength - e.RemovalLength;

				foreach (var link in result.TextLinks) {
					link.Links = link.Links.AdjustSegments (e).ToList ();
				}
				if (result.CaretEndOffset > e.Offset)
					result.CaretEndOffset += delta;
			};

			IndentCode (data, context.LineIndent);
			result.Code = data.Text;
			return result;
		}
Esempio n. 33
0
		public TemplateResult FillVariables (TemplateContext context)
		{
			ExpansionObject expansion = CodeTemplateService.GetExpansionObject (this);
			TemplateResult result = new TemplateResult ();
			StringBuilder sb = new StringBuilder ();
			int lastOffset = 0;
			string code = context.Document.Editor.FormatString (context.InsertPosition, context.TemplateCode);
			result.TextLinks = new List<TextLink> ();
			foreach (Match match in variableRegEx.Matches (code)) {
				string name = match.Groups [1].Value;
				sb.Append (code.Substring (lastOffset, match.Index - lastOffset));
				lastOffset = match.Index + match.Length;
				if (string.IsNullOrEmpty (name)) { // $$ is interpreted as $
					sb.Append ("$");
				} else if (name == "end") {
					result.CaretEndOffset = sb.Length;
				} else if (name == "selected") {
					if (!string.IsNullOrEmpty (context.SelectedText)) {
						string indent = GetIndent (sb);
						string selection = Reindent (context.SelectedText, indent);
						sb.Append (selection);
					}
				}
				if (!variableDecarations.ContainsKey (name))
					continue;
				TextLink link = result.TextLinks.Find (l => l.Name == name);
				bool isNew = link == null;
				if (isNew) {
					link = new TextLink (name);
					if (!string.IsNullOrEmpty (variableDecarations [name].ToolTip))
						link.Tooltip = GettextCatalog.GetString (variableDecarations [name].ToolTip);
					link.Values = new CodeTemplateListDataProvider (variableDecarations [name].Values);
					if (!string.IsNullOrEmpty (variableDecarations [name].Function)) {
						link.Values = expansion.RunFunction (context, null, variableDecarations [name].Function);
					}
					result.TextLinks.Add (link);
				}
				link.IsEditable = variableDecarations [name].IsEditable;
				link.IsIdentifier = variableDecarations [name].IsIdentifier;
				if (!string.IsNullOrEmpty (variableDecarations [name].Function)) {
					IListDataProvider<string > functionResult = expansion.RunFunction (context, null, variableDecarations [name].Function);
					if (functionResult != null && functionResult.Count > 0) {
						string s = (string)functionResult [functionResult.Count - 1];
						if (s == null) {
							if (variableDecarations.ContainsKey (name)) 
								s = variableDecarations [name].Default;
						}
						if (s != null) {
							link.AddLink (new Segment (sb.Length, s.Length));
							if (isNew) {
								link.GetStringFunc = delegate (Func<string, string> callback) {
									return expansion.RunFunction (context, callback, variableDecarations [name].Function);
								};
							}
							sb.Append (s);
						}
					} else {
						AddDefaultValue (sb, link, name);
					}
				} else {
					AddDefaultValue (sb, link, name);
				}
			}
			sb.Append (code.Substring (lastOffset, code.Length - lastOffset));
			
			// format & indent template code
			TextEditorData data = new TextEditorData ();
			data.Text = sb.ToString ();
			data.Document.TextReplaced += delegate(object sender, ReplaceEventArgs e) {
				int delta = -e.Count + (e.Value != null ? e.Value.Length : 0);
				foreach (var link in result.TextLinks) {
					foreach (var segment in link.Links) {
						if (segment.Offset > e.Offset) {
							segment.Offset += delta;
						}
					}
				}
				if (result.CaretEndOffset > e.Offset)
					result.CaretEndOffset += delta;
			};
			
			var formatter = CodeFormatterService.GetFormatter (context.Document.Editor.Document.MimeType);
			if (formatter != null && context.Document.HasProject) {
				formatter.OnTheFlyFormat (context.Document.Project.Policies, data, 0, data.Length);
			}
			
			IndentCode (data, context.LineIndent);
			result.Code = data.Text;
			data.Dispose ();
			return result;
		}
Esempio n. 34
0
		public TemplateResult FillVariables (TemplateContext context)
		{
			ExpansionObject expansion = CodeTemplateService.GetExpansionObject (this);
			TemplateResult result = new TemplateResult ();
			StringBuilder sb = new StringBuilder ();
			int lastOffset = 0;
			string code = context.Document.Editor.FormatString (context.InsertPosition, context.TemplateCode);
			
			result.TextLinks = new List<TextLink> ();
			foreach (Match match in variableRegEx.Matches (code)) {
				string name = match.Groups[1].Value;
				sb.Append (code.Substring (lastOffset, match.Index - lastOffset));
				lastOffset = match.Index + match.Length;
				if (string.IsNullOrEmpty (name)) { // $$ is interpreted as $
					sb.Append ("$");
				} else if (name == "end") {
					result.CaretEndOffset = sb.Length;
				} else if (name == "selected") {
					if (!string.IsNullOrEmpty (context.SelectedText)) {
						string indent = GetIndent (sb);
						string selection = Reindent (context.SelectedText, indent);
						sb.Append (selection);
					}
				}
				if (!variableDecarations.ContainsKey (name))
					continue;
				TextLink link = result.TextLinks.Find (l => l.Name == name);
				bool isNew = link == null;
				if (isNew) {
					link         = new TextLink (name);
					if (!string.IsNullOrEmpty (variableDecarations[name].ToolTip))
						link.Tooltip = GettextCatalog.GetString (variableDecarations[name].ToolTip);
					link.Values  = new CodeTemplateListDataProvider (variableDecarations[name].Values);
					if (!string.IsNullOrEmpty (variableDecarations[name].Function)) {
						link.Values  = expansion.RunFunction (context, null, variableDecarations[name].Function);
					}
					result.TextLinks.Add (link);
				}
				link.IsEditable = variableDecarations[name].IsEditable;
				link.IsIdentifier = variableDecarations[name].IsIdentifier;
				if (!string.IsNullOrEmpty (variableDecarations[name].Function)) {
					IListDataProvider<string> functionResult = expansion.RunFunction (context, null, variableDecarations[name].Function);
					if (functionResult != null && functionResult.Count > 0) {
						string s = (string)functionResult[functionResult.Count - 1];
						if (s == null) {
							if (variableDecarations.ContainsKey (name)) 
								s = variableDecarations[name].Default;
						}
						if (s != null) {
							link.AddLink (new Segment (sb.Length, s.Length));
							if (isNew) {
								link.GetStringFunc = delegate (Func<string, string> callback) {
									return expansion.RunFunction (context, callback, variableDecarations[name].Function);
								};
							}
							sb.Append (s);
						}
					} else {
						AddDefaultValue (sb, link, name);
					}
				} else  {
					AddDefaultValue (sb, link, name);
				}
			}
			sb.Append (code.Substring (lastOffset, code.Length - lastOffset));
			result.Code = sb.ToString ();
			return result;
		}