Initial commit from CodePlex 2017-09-02
0 parents
Showing
33 changed files
with
2836 additions
and
0 deletions
WebServicePluginForWebTest.sln
0 → 100644
1 | | ||
2 | Microsoft Visual Studio Solution File, Format Version 12.00 | ||
3 | # Visual Studio 2012 | ||
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServicePluginForWebTestMessageEditor", "WebTestWebServiceMessageEditor\WebServicePluginForWebTestMessageEditor.csproj", "{23707A49-589B-4A36-BDAA-2896E647D07D}" | ||
5 | EndProject | ||
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServicePluginForWebTestResultTab", "WebTestWebServiceResultAddin\WebServicePluginForWebTestResultTab.csproj", "{48B3509E-1FD8-4875-8FC6-137647EB83AA}" | ||
7 | EndProject | ||
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServicePluginForWebTestRuntime", "WebTestWebServiceRuntime\WebServicePluginForWebTestRuntime.csproj", "{F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}" | ||
9 | EndProject | ||
10 | Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WebServicePluginsSetup", "WebTestWebServiceSetup\WebServicePluginsSetup.wixproj", "{73ACCDA5-47C1-40C9-B63E-AFF657E046E4}" | ||
11 | EndProject | ||
12 | Global | ||
13 | GlobalSection(TeamFoundationVersionControl) = preSolution | ||
14 | SccNumberOfProjects = 4 | ||
15 | SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} | ||
16 | SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs03 | ||
17 | SccProjectUniqueName0 = WebTestWebServiceRuntime\\WebServicePluginForWebTestRuntime.csproj | ||
18 | SccProjectName0 = WebTestWebServiceRuntime | ||
19 | SccAuxPath0 = https://tfs.codeplex.com/tfs/tfs03 | ||
20 | SccLocalPath0 = WebTestWebServiceRuntime | ||
21 | SccProvider0 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} | ||
22 | SccProjectUniqueName1 = WebTestWebServiceResultAddin\\WebServicePluginForWebTestResultTab.csproj | ||
23 | SccProjectName1 = WebTestWebServiceResultAddin | ||
24 | SccAuxPath1 = https://tfs.codeplex.com/tfs/tfs03 | ||
25 | SccLocalPath1 = WebTestWebServiceResultAddin | ||
26 | SccProvider1 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} | ||
27 | SccProjectUniqueName2 = WebTestWebServiceMessageEditor\\WebServicePluginForWebTestMessageEditor.csproj | ||
28 | SccProjectName2 = WebTestWebServiceMessageEditor | ||
29 | SccAuxPath2 = https://tfs.codeplex.com/tfs/tfs03 | ||
30 | SccLocalPath2 = WebTestWebServiceMessageEditor | ||
31 | SccProvider2 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} | ||
32 | SccProjectUniqueName3 = WebTestWebServiceSetup\\WebServicePluginsSetup.wixproj | ||
33 | SccProjectName3 = WebTestWebServiceSetup | ||
34 | SccAuxPath3 = https://tfs.codeplex.com/tfs/tfs03 | ||
35 | SccLocalPath3 = WebTestWebServiceSetup | ||
36 | SccProvider3 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} | ||
37 | EndGlobalSection | ||
38 | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
39 | Debug|Any CPU = Debug|Any CPU | ||
40 | Debug|Mixed Platforms = Debug|Mixed Platforms | ||
41 | Debug|x86 = Debug|x86 | ||
42 | Release|Any CPU = Release|Any CPU | ||
43 | Release|Mixed Platforms = Release|Mixed Platforms | ||
44 | Release|x86 = Release|x86 | ||
45 | EndGlobalSection | ||
46 | GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
47 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
48 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
49 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | ||
50 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | ||
51 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Debug|x86.ActiveCfg = Debug|Any CPU | ||
52 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
53 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Release|Any CPU.Build.0 = Release|Any CPU | ||
54 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | ||
55 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Release|Mixed Platforms.Build.0 = Release|Any CPU | ||
56 | {23707A49-589B-4A36-BDAA-2896E647D07D}.Release|x86.ActiveCfg = Release|Any CPU | ||
57 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
58 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
59 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | ||
60 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | ||
61 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Debug|x86.ActiveCfg = Debug|Any CPU | ||
62 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
63 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Release|Any CPU.Build.0 = Release|Any CPU | ||
64 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | ||
65 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Release|Mixed Platforms.Build.0 = Release|Any CPU | ||
66 | {48B3509E-1FD8-4875-8FC6-137647EB83AA}.Release|x86.ActiveCfg = Release|Any CPU | ||
67 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
68 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
69 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | ||
70 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | ||
71 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Debug|x86.ActiveCfg = Debug|Any CPU | ||
72 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
73 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Release|Any CPU.Build.0 = Release|Any CPU | ||
74 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | ||
75 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Release|Mixed Platforms.Build.0 = Release|Any CPU | ||
76 | {F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}.Release|x86.ActiveCfg = Release|Any CPU | ||
77 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Debug|Any CPU.ActiveCfg = Debug|x86 | ||
78 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 | ||
79 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Debug|Mixed Platforms.Build.0 = Debug|x86 | ||
80 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Debug|x86.ActiveCfg = Debug|x86 | ||
81 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Debug|x86.Build.0 = Debug|x86 | ||
82 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Release|Any CPU.ActiveCfg = Release|x86 | ||
83 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Release|Mixed Platforms.ActiveCfg = Release|x86 | ||
84 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Release|Mixed Platforms.Build.0 = Release|x86 | ||
85 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Release|x86.ActiveCfg = Release|x86 | ||
86 | {73ACCDA5-47C1-40C9-B63E-AFF657E046E4}.Release|x86.Build.0 = Release|x86 | ||
87 | EndGlobalSection | ||
88 | GlobalSection(SolutionProperties) = preSolution | ||
89 | HideSolutionNode = FALSE | ||
90 | EndGlobalSection | ||
91 | EndGlobal |
1 | //************************************************************************************************* | ||
2 | // MessageEditor.Designer.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // UI of Editor for Web Service Request Body | ||
6 | // The Web Service response can be plain XML or 'application/soap+msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) or JSON | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | namespace WebTest.WebService.Plugin.MessageEditors | ||
12 | { | ||
13 | partial class MessageEditor | ||
14 | { | ||
15 | /// <summary> | ||
16 | /// Required designer variable. | ||
17 | /// </summary> | ||
18 | private System.ComponentModel.IContainer components = null; | ||
19 | |||
20 | /// <summary> | ||
21 | /// Clean up any resources being used. | ||
22 | /// </summary> | ||
23 | /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | ||
24 | protected override void Dispose(bool disposing) | ||
25 | { | ||
26 | if (disposing && (components != null)) | ||
27 | { | ||
28 | components.Dispose(); | ||
29 | } | ||
30 | base.Dispose(disposing); | ||
31 | } | ||
32 | |||
33 | #region Component Designer generated code | ||
34 | |||
35 | /// <summary> | ||
36 | /// Required method for Designer support - do not modify | ||
37 | /// the contents of this method with the code editor. | ||
38 | /// </summary> | ||
39 | private void InitializeComponent() | ||
40 | { | ||
41 | this.requestTextBox = new System.Windows.Forms.TextBox(); | ||
42 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); | ||
43 | this.tabControl1 = new System.Windows.Forms.TabControl(); | ||
44 | this.tabPage1 = new System.Windows.Forms.TabPage(); | ||
45 | this.treeViewRequest = new System.Windows.Forms.TreeView(); | ||
46 | this.tabPage2 = new System.Windows.Forms.TabPage(); | ||
47 | this.panel1 = new System.Windows.Forms.Panel(); | ||
48 | this.requestXMLEditor = new System.Windows.Forms.LinkLabel(); | ||
49 | this.tableLayoutPanel1.SuspendLayout(); | ||
50 | this.tabControl1.SuspendLayout(); | ||
51 | this.tabPage1.SuspendLayout(); | ||
52 | this.tabPage2.SuspendLayout(); | ||
53 | this.panel1.SuspendLayout(); | ||
54 | this.SuspendLayout(); | ||
55 | // | ||
56 | // requestTextBox | ||
57 | // | ||
58 | this.requestTextBox.Dock = System.Windows.Forms.DockStyle.Fill; | ||
59 | this.requestTextBox.Location = new System.Drawing.Point(3, 3); | ||
60 | this.requestTextBox.Multiline = true; | ||
61 | this.requestTextBox.Name = "requestTextBox"; | ||
62 | this.requestTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; | ||
63 | this.requestTextBox.Size = new System.Drawing.Size(326, 166); | ||
64 | this.requestTextBox.TabIndex = 0; | ||
65 | this.requestTextBox.WordWrap = false; | ||
66 | // | ||
67 | // tableLayoutPanel1 | ||
68 | // | ||
69 | this.tableLayoutPanel1.ColumnCount = 1; | ||
70 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); | ||
71 | this.tableLayoutPanel1.Controls.Add(this.tabControl1, 0, 1); | ||
72 | this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0); | ||
73 | this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; | ||
74 | this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); | ||
75 | this.tableLayoutPanel1.Name = "tableLayoutPanel1"; | ||
76 | this.tableLayoutPanel1.RowCount = 2; | ||
77 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); | ||
78 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||
79 | this.tableLayoutPanel1.Size = new System.Drawing.Size(346, 229); | ||
80 | this.tableLayoutPanel1.TabIndex = 1; | ||
81 | // | ||
82 | // tabControl1 | ||
83 | // | ||
84 | this.tabControl1.Controls.Add(this.tabPage1); | ||
85 | this.tabControl1.Controls.Add(this.tabPage2); | ||
86 | this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; | ||
87 | this.tabControl1.Location = new System.Drawing.Point(3, 28); | ||
88 | this.tabControl1.Name = "tabControl1"; | ||
89 | this.tabControl1.SelectedIndex = 0; | ||
90 | this.tabControl1.Size = new System.Drawing.Size(340, 198); | ||
91 | this.tabControl1.TabIndex = 0; | ||
92 | // | ||
93 | // tabPage1 | ||
94 | // | ||
95 | this.tabPage1.Controls.Add(this.treeViewRequest); | ||
96 | this.tabPage1.Location = new System.Drawing.Point(4, 22); | ||
97 | this.tabPage1.Name = "tabPage1"; | ||
98 | this.tabPage1.Padding = new System.Windows.Forms.Padding(3); | ||
99 | this.tabPage1.Size = new System.Drawing.Size(332, 172); | ||
100 | this.tabPage1.TabIndex = 0; | ||
101 | this.tabPage1.Text = "TreeView"; | ||
102 | this.tabPage1.UseVisualStyleBackColor = true; | ||
103 | // | ||
104 | // treeViewRequest | ||
105 | // | ||
106 | this.treeViewRequest.Dock = System.Windows.Forms.DockStyle.Fill; | ||
107 | this.treeViewRequest.LabelEdit = true; | ||
108 | this.treeViewRequest.Location = new System.Drawing.Point(3, 3); | ||
109 | this.treeViewRequest.Name = "treeViewRequest"; | ||
110 | this.treeViewRequest.Size = new System.Drawing.Size(326, 166); | ||
111 | this.treeViewRequest.TabIndex = 0; | ||
112 | // | ||
113 | // tabPage2 | ||
114 | // | ||
115 | this.tabPage2.Controls.Add(this.requestTextBox); | ||
116 | this.tabPage2.Location = new System.Drawing.Point(4, 22); | ||
117 | this.tabPage2.Name = "tabPage2"; | ||
118 | this.tabPage2.Padding = new System.Windows.Forms.Padding(3); | ||
119 | this.tabPage2.Size = new System.Drawing.Size(332, 172); | ||
120 | this.tabPage2.TabIndex = 1; | ||
121 | this.tabPage2.Text = "Text View"; | ||
122 | this.tabPage2.UseVisualStyleBackColor = true; | ||
123 | // | ||
124 | // panel1 | ||
125 | // | ||
126 | this.panel1.Controls.Add(this.requestXMLEditor); | ||
127 | this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; | ||
128 | this.panel1.Location = new System.Drawing.Point(3, 3); | ||
129 | this.panel1.Name = "panel1"; | ||
130 | this.panel1.Size = new System.Drawing.Size(340, 19); | ||
131 | this.panel1.TabIndex = 1; | ||
132 | // | ||
133 | // requestXMLEditor | ||
134 | // | ||
135 | this.requestXMLEditor.AutoSize = true; | ||
136 | this.requestXMLEditor.Location = new System.Drawing.Point(4, 4); | ||
137 | this.requestXMLEditor.Name = "requestXMLEditor"; | ||
138 | this.requestXMLEditor.Size = new System.Drawing.Size(96, 13); | ||
139 | this.requestXMLEditor.TabIndex = 0; | ||
140 | this.requestXMLEditor.TabStop = true; | ||
141 | this.requestXMLEditor.Text = "View in XML Editor"; | ||
142 | this.requestXMLEditor.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.requestXMLEditor_LinkClicked); | ||
143 | // | ||
144 | // UserControl1 | ||
145 | // | ||
146 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | ||
147 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | ||
148 | this.Controls.Add(this.tableLayoutPanel1); | ||
149 | this.Name = "UserControl1"; | ||
150 | this.Size = new System.Drawing.Size(346, 229); | ||
151 | this.tableLayoutPanel1.ResumeLayout(false); | ||
152 | this.tabControl1.ResumeLayout(false); | ||
153 | this.tabPage1.ResumeLayout(false); | ||
154 | this.tabPage2.ResumeLayout(false); | ||
155 | this.tabPage2.PerformLayout(); | ||
156 | this.panel1.ResumeLayout(false); | ||
157 | this.panel1.PerformLayout(); | ||
158 | this.ResumeLayout(false); | ||
159 | |||
160 | } | ||
161 | |||
162 | #endregion | ||
163 | |||
164 | private System.Windows.Forms.TextBox requestTextBox; | ||
165 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; | ||
166 | private System.Windows.Forms.TabControl tabControl1; | ||
167 | private System.Windows.Forms.TabPage tabPage1; | ||
168 | private System.Windows.Forms.TabPage tabPage2; | ||
169 | private System.Windows.Forms.TreeView treeViewRequest; | ||
170 | private System.Windows.Forms.Panel panel1; | ||
171 | private System.Windows.Forms.LinkLabel requestXMLEditor; | ||
172 | } | ||
173 | } |
1 | //************************************************************************************************* | ||
2 | // MessageEditor.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // UI of Editor for Web Service Request Body | ||
6 | // The Web Service response can be plain XML or 'application/soap+msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) or JSON | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | using System; | ||
12 | using System.Collections.Generic; | ||
13 | using System.ComponentModel; | ||
14 | using System.Drawing; | ||
15 | using System.Data; | ||
16 | using System.Linq; | ||
17 | using System.Text; | ||
18 | using System.Windows.Forms; | ||
19 | using System.Xml; | ||
20 | using WebTest.WebService.Plugin.ResultTab; | ||
21 | using WebTest.WebService.Plugin.Runtime; | ||
22 | |||
23 | namespace WebTest.WebService.Plugin.MessageEditors | ||
24 | { | ||
25 | internal partial class MessageEditor : UserControl | ||
26 | { | ||
27 | /// <summary> | ||
28 | /// | ||
29 | /// </summary> | ||
30 | /// <param name="contentHandler">Handler for given content type</param> | ||
31 | public MessageEditor(ContentHandler contentHandler) | ||
32 | { | ||
33 | InitializeComponent(); | ||
34 | |||
35 | this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabChanged); | ||
36 | this.xmlTreeView = new XmlTreeView(this.treeViewRequest); | ||
37 | |||
38 | this.contentHandler = contentHandler; | ||
39 | this.xmlTreeView.ShowXML(contentHandler.XmlDocument); | ||
40 | this.requestTextBox.Text = contentHandler.XmlString; | ||
41 | |||
42 | ContextMenu treeContextMenu = new ContextMenu(); | ||
43 | this.treeParameterizeMenuItem = new MenuItem("Parameterize"); | ||
44 | treeContextMenu.MenuItems.Add(treeParameterizeMenuItem); | ||
45 | this.treeViewRequest.ContextMenu = treeContextMenu; | ||
46 | |||
47 | |||
48 | this.treeParameterizeMenuItem.MenuItems.Clear(); | ||
49 | this.treeParameterizeMenuItem.MenuItems.Add(new MenuItem("Type Parameter", AddParameter)); | ||
50 | |||
51 | Connect connect = Connect.GetInstance(); | ||
52 | if (connect != null) | ||
53 | { | ||
54 | this.webTestDetail = connect.GetActiveWebTest(); | ||
55 | } | ||
56 | requestXMLEditor.Visible = (this.webTestDetail != null); | ||
57 | if (this.webTestDetail != null) | ||
58 | { | ||
59 | List<string> parameters = this.webTestDetail.GetParameterList(); | ||
60 | |||
61 | foreach (string parameter in parameters) | ||
62 | { | ||
63 | this.treeParameterizeMenuItem.MenuItems.Add(new MenuItem(parameter, AddParameter)); | ||
64 | } | ||
65 | } | ||
66 | } | ||
67 | |||
68 | /// <summary> | ||
69 | /// Makes sure both tabs are synced with the current changes that are done in Text Box | ||
70 | /// </summary> | ||
71 | public void UpdateContent() | ||
72 | { | ||
73 | if (this.tabControl1.SelectedTab.Equals(this.tabPage2)) | ||
74 | { | ||
75 | this.contentHandler.XmlString = this.requestTextBox.Text; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | private void AddParameter(object sender, EventArgs e) | ||
80 | { | ||
81 | MenuItem menuItem = sender as MenuItem; | ||
82 | if (menuItem == null) | ||
83 | { | ||
84 | return; | ||
85 | } | ||
86 | this.xmlTreeView.AddParameter(menuItem.Text); | ||
87 | } | ||
88 | |||
89 | private void TabChanged(object sender, EventArgs e) | ||
90 | { | ||
91 | if (this.tabControl1.SelectedTab.Equals(this.tabPage1)) | ||
92 | { | ||
93 | this.contentHandler.XmlString = this.requestTextBox.Text; | ||
94 | xmlTreeView.ShowXML(this.contentHandler.XmlDocument); | ||
95 | } | ||
96 | else | ||
97 | { | ||
98 | this.requestTextBox.Text = this.contentHandler.XmlString; | ||
99 | } | ||
100 | } | ||
101 | |||
102 | private void requestXMLEditor_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) | ||
103 | { | ||
104 | Connect.GetInstance().ShowInXMLEditor("Request Content", this.requestTextBox.Text); | ||
105 | } | ||
106 | |||
107 | private ContentHandler contentHandler; | ||
108 | |||
109 | private WebTestDetail webTestDetail; | ||
110 | private XmlTreeView xmlTreeView; | ||
111 | private MenuItem treeParameterizeMenuItem; | ||
112 | } | ||
113 | } |
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <root> | ||
3 | <!-- | ||
4 | Microsoft ResX Schema | ||
5 | |||
6 | Version 2.0 | ||
7 | |||
8 | The primary goals of this format is to allow a simple XML format | ||
9 | that is mostly human readable. The generation and parsing of the | ||
10 | various data types are done through the TypeConverter classes | ||
11 | associated with the data types. | ||
12 | |||
13 | Example: | ||
14 | |||
15 | ... ado.net/XML headers & schema ... | ||
16 | <resheader name="resmimetype">text/microsoft-resx</resheader> | ||
17 | <resheader name="version">2.0</resheader> | ||
18 | <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||
19 | <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||
20 | <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||
21 | <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||
22 | <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||
23 | <value>[base64 mime encoded serialized .NET Framework object]</value> | ||
24 | </data> | ||
25 | <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||
26 | <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||
27 | <comment>This is a comment</comment> | ||
28 | </data> | ||
29 | |||
30 | There are any number of "resheader" rows that contain simple | ||
31 | name/value pairs. | ||
32 | |||
33 | Each data row contains a name, and value. The row also contains a | ||
34 | type or mimetype. Type corresponds to a .NET class that support | ||
35 | text/value conversion through the TypeConverter architecture. | ||
36 | Classes that don't support this are serialized and stored with the | ||
37 | mimetype set. | ||
38 | |||
39 | The mimetype is used for serialized objects, and tells the | ||
40 | ResXResourceReader how to depersist the object. This is currently not | ||
41 | extensible. For a given mimetype the value must be set accordingly: | ||
42 | |||
43 | Note - application/x-microsoft.net.object.binary.base64 is the format | ||
44 | that the ResXResourceWriter will generate, however the reader can | ||
45 | read any of the formats listed below. | ||
46 | |||
47 | mimetype: application/x-microsoft.net.object.binary.base64 | ||
48 | value : The object must be serialized with | ||
49 | : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||
50 | : and then encoded with base64 encoding. | ||
51 | |||
52 | mimetype: application/x-microsoft.net.object.soap.base64 | ||
53 | value : The object must be serialized with | ||
54 | : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||
55 | : and then encoded with base64 encoding. | ||
56 | |||
57 | mimetype: application/x-microsoft.net.object.bytearray.base64 | ||
58 | value : The object must be serialized into a byte array | ||
59 | : using a System.ComponentModel.TypeConverter | ||
60 | : and then encoded with base64 encoding. | ||
61 | --> | ||
62 | <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
63 | <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
64 | <xsd:element name="root" msdata:IsDataSet="true"> | ||
65 | <xsd:complexType> | ||
66 | <xsd:choice maxOccurs="unbounded"> | ||
67 | <xsd:element name="metadata"> | ||
68 | <xsd:complexType> | ||
69 | <xsd:sequence> | ||
70 | <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
71 | </xsd:sequence> | ||
72 | <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
73 | <xsd:attribute name="type" type="xsd:string" /> | ||
74 | <xsd:attribute name="mimetype" type="xsd:string" /> | ||
75 | <xsd:attribute ref="xml:space" /> | ||
76 | </xsd:complexType> | ||
77 | </xsd:element> | ||
78 | <xsd:element name="assembly"> | ||
79 | <xsd:complexType> | ||
80 | <xsd:attribute name="alias" type="xsd:string" /> | ||
81 | <xsd:attribute name="name" type="xsd:string" /> | ||
82 | </xsd:complexType> | ||
83 | </xsd:element> | ||
84 | <xsd:element name="data"> | ||
85 | <xsd:complexType> | ||
86 | <xsd:sequence> | ||
87 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
88 | <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
89 | </xsd:sequence> | ||
90 | <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||
91 | <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||
92 | <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||
93 | <xsd:attribute ref="xml:space" /> | ||
94 | </xsd:complexType> | ||
95 | </xsd:element> | ||
96 | <xsd:element name="resheader"> | ||
97 | <xsd:complexType> | ||
98 | <xsd:sequence> | ||
99 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
100 | </xsd:sequence> | ||
101 | <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
102 | </xsd:complexType> | ||
103 | </xsd:element> | ||
104 | </xsd:choice> | ||
105 | </xsd:complexType> | ||
106 | </xsd:element> | ||
107 | </xsd:schema> | ||
108 | <resheader name="resmimetype"> | ||
109 | <value>text/microsoft-resx</value> | ||
110 | </resheader> | ||
111 | <resheader name="version"> | ||
112 | <value>2.0</value> | ||
113 | </resheader> | ||
114 | <resheader name="reader"> | ||
115 | <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
116 | </resheader> | ||
117 | <resheader name="writer"> | ||
118 | <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
119 | </resheader> | ||
120 | </root> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | //************************************************************************************************* | ||
2 | // Msbin1MessageEditor.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Web Test Plugin for editing 'application/soap+msbin1' content type Web Service Requests | ||
6 | // (used by Silverlight application with WCF RIA) | ||
7 | // | ||
8 | // Copyright(c) Microsoft Corporation, 2010 | ||
9 | //************************************************************************************************* | ||
10 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
11 | using WebTest.WebService.Plugin.ResultTab; | ||
12 | using WebTest.WebService.Plugin.Runtime; | ||
13 | |||
14 | namespace WebTest.WebService.Plugin.MessageEditors | ||
15 | { | ||
16 | /// <summary> | ||
17 | /// Editor for MSBin1 content type (WCF messages) | ||
18 | /// </summary> | ||
19 | public class Msbin1MessageEditor : IBinaryHttpBodyEditorPlugin | ||
20 | { | ||
21 | /// <summary> | ||
22 | /// | ||
23 | /// </summary> | ||
24 | public Msbin1MessageEditor() | ||
25 | { | ||
26 | } | ||
27 | |||
28 | /// <summary> | ||
29 | /// Determine if this plugin supports a content type. | ||
30 | /// </summary> | ||
31 | /// <param name="contentType">The content type to test.</param> | ||
32 | /// <returns>Returns true if the plugin supports the specified content type.</returns> | ||
33 | public bool SupportsContentType(string contentType) | ||
34 | { | ||
35 | return contentType.ToLower().Contains("msbin1"); | ||
36 | } | ||
37 | |||
38 | /// <summary> | ||
39 | /// Create a UserControl to edit the specified bytes. This control will be hosted in the | ||
40 | /// plugin dialog which provides OK and Cancel buttons. | ||
41 | /// </summary> | ||
42 | /// <param name="contentType">The content type of the BinaryHttpBody.</param> | ||
43 | /// <param name="initialValue"> | ||
44 | /// The bytes to edit. The bytes are the payload of a BinaryHttpBody. | ||
45 | /// </param> | ||
46 | /// <returns> | ||
47 | /// A UserControl capable of displaying and editing the byte array value of | ||
48 | /// the specified content type. | ||
49 | /// </returns> | ||
50 | public object CreateEditor(string contentType, byte[] initialValue) | ||
51 | { | ||
52 | contentHandler = new Msbin1ContentHandler(contentType.ToLower().Contains("soap")); | ||
53 | contentHandler.MessageBytes = initialValue; | ||
54 | messageEditor = new MessageEditor(contentHandler); | ||
55 | return messageEditor; | ||
56 | } | ||
57 | |||
58 | /// <summary> | ||
59 | /// Gets the edited bytes after the OK button is clicked on the plugin dialog. | ||
60 | /// </summary> | ||
61 | public byte[] GetNewValue() | ||
62 | { | ||
63 | messageEditor.UpdateContent(); | ||
64 | return contentHandler.MessageBytes; | ||
65 | } | ||
66 | |||
67 | private MessageEditor messageEditor = null; | ||
68 | private Msbin1ContentHandler contentHandler = null; | ||
69 | } | ||
70 | } |
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("ClassLibrary1")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("Microsoft IT")] | ||
12 | [assembly: AssemblyProduct("ClassLibrary1")] | ||
13 | [assembly: AssemblyCopyright("Copyright © Microsoft IT 2010")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("fe8ec1e0-7f8a-4935-b5f3-00f482453031")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Build and Revision Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | // [assembly: AssemblyVersion("1.0.*")] | ||
35 | [assembly: AssemblyVersion("1.0.0.0")] | ||
36 | [assembly: AssemblyFileVersion("1.0.0.0")] |
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
3 | <PropertyGroup> | ||
4 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
5 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
6 | <ProductVersion>8.0.30703</ProductVersion> | ||
7 | <SchemaVersion>2.0</SchemaVersion> | ||
8 | <ProjectGuid>{23707A49-589B-4A36-BDAA-2896E647D07D}</ProjectGuid> | ||
9 | <OutputType>Library</OutputType> | ||
10 | <AppDesignerFolder>Properties</AppDesignerFolder> | ||
11 | <RootNamespace>WebTest.WebService.Plugin.MessageEditors</RootNamespace> | ||
12 | <AssemblyName>WebTest.WebService.Plugin.MessageEditors</AssemblyName> | ||
13 | <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | ||
14 | <FileAlignment>512</FileAlignment> | ||
15 | <SccProjectName>SAK</SccProjectName> | ||
16 | <SccLocalPath>SAK</SccLocalPath> | ||
17 | <SccAuxPath>SAK</SccAuxPath> | ||
18 | <SccProvider>SAK</SccProvider> | ||
19 | <TargetFrameworkProfile /> | ||
20 | </PropertyGroup> | ||
21 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
22 | <DebugSymbols>true</DebugSymbols> | ||
23 | <DebugType>full</DebugType> | ||
24 | <Optimize>false</Optimize> | ||
25 | <OutputPath>bin\Debug\</OutputPath> | ||
26 | <DefineConstants>DEBUG;TRACE</DefineConstants> | ||
27 | <ErrorReport>prompt</ErrorReport> | ||
28 | <WarningLevel>4</WarningLevel> | ||
29 | <Prefer32Bit>false</Prefer32Bit> | ||
30 | </PropertyGroup> | ||
31 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
32 | <DebugType>pdbonly</DebugType> | ||
33 | <Optimize>true</Optimize> | ||
34 | <OutputPath>bin\Release\</OutputPath> | ||
35 | <DefineConstants>TRACE</DefineConstants> | ||
36 | <ErrorReport>prompt</ErrorReport> | ||
37 | <WarningLevel>4</WarningLevel> | ||
38 | <Prefer32Bit>false</Prefer32Bit> | ||
39 | </PropertyGroup> | ||
40 | <ItemGroup> | ||
41 | <Reference Include="Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
42 | <EmbedInteropTypes>True</EmbedInteropTypes> | ||
43 | </Reference> | ||
44 | <Reference Include="Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | ||
45 | <Reference Include="System" /> | ||
46 | <Reference Include="System.Core" /> | ||
47 | <Reference Include="System.Drawing" /> | ||
48 | <Reference Include="System.Windows.Forms" /> | ||
49 | <Reference Include="System.Xml.Linq" /> | ||
50 | <Reference Include="System.Data.DataSetExtensions" /> | ||
51 | <Reference Include="Microsoft.CSharp" /> | ||
52 | <Reference Include="System.Data" /> | ||
53 | <Reference Include="System.Xml" /> | ||
54 | </ItemGroup> | ||
55 | <ItemGroup> | ||
56 | <Compile Include="Msbin1MessageEditor.cs" /> | ||
57 | <Compile Include="Properties\AssemblyInfo.cs" /> | ||
58 | <Compile Include="MessageEditor.cs"> | ||
59 | <SubType>UserControl</SubType> | ||
60 | </Compile> | ||
61 | <Compile Include="MessageEditor.Designer.cs"> | ||
62 | <DependentUpon>MessageEditor.cs</DependentUpon> | ||
63 | </Compile> | ||
64 | <Compile Include="WebServicePostRecording.cs" /> | ||
65 | <Compile Include="XmlMessageEditor.cs" /> | ||
66 | </ItemGroup> | ||
67 | <ItemGroup> | ||
68 | <EmbeddedResource Include="MessageEditor.resx"> | ||
69 | <DependentUpon>MessageEditor.cs</DependentUpon> | ||
70 | </EmbeddedResource> | ||
71 | </ItemGroup> | ||
72 | <ItemGroup> | ||
73 | <ProjectReference Include="..\WebTestWebServiceResultAddin\WebServicePluginForWebTestResultTab.csproj"> | ||
74 | <Project>{48B3509E-1FD8-4875-8FC6-137647EB83AA}</Project> | ||
75 | <Name>WebServicePluginForWebTestResultTab</Name> | ||
76 | </ProjectReference> | ||
77 | <ProjectReference Include="..\WebTestWebServiceRuntime\WebServicePluginForWebTestRuntime.csproj"> | ||
78 | <Project>{F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}</Project> | ||
79 | <Name>WebServicePluginForWebTestRuntime</Name> | ||
80 | </ProjectReference> | ||
81 | </ItemGroup> | ||
82 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||
83 | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | ||
84 | Other similar extension points exist, see Microsoft.Common.targets. | ||
85 | <Target Name="BeforeBuild"> | ||
86 | </Target> | ||
87 | <Target Name="AfterBuild"> | ||
88 | </Target> | ||
89 | --> | ||
90 | </Project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | //************************************************************************************************* | ||
2 | // WebServicePostRecording.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // WebTestRecorderPlugin Implementation: | ||
6 | // Web Test Plugin for adding references to the other Web Service plugins | ||
7 | // (Extraction/Validation rules etc) to the WebTest after completing recording. | ||
8 | // This gets executed if user selects the plugin in the dialog that gets displayed | ||
9 | // before a record session. | ||
10 | // | ||
11 | // Copyright(c) Microsoft Corporation, 2010 | ||
12 | //************************************************************************************************* | ||
13 | using System.ComponentModel; | ||
14 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
15 | using System.Diagnostics.CodeAnalysis; | ||
16 | using WebTest.WebService.Plugin.ResultTab; | ||
17 | using WebTest.WebService.Plugin.Runtime; | ||
18 | |||
19 | namespace WebTest.WebService.Plugin.MessageEditors | ||
20 | { | ||
21 | [DisplayName("Plugin for Web Service Messages")] | ||
22 | [Description("XPath extraction/validation rules that extract data from Web Service responses for various content types")] | ||
23 | class WebServicePostRecording : WebTestRecorderPlugin | ||
24 | { | ||
25 | /// <summary> | ||
26 | /// Parameters: | ||
27 | /// sender: | ||
28 | /// The source of the event. | ||
29 | /// | ||
30 | /// e: | ||
31 | /// A Microsoft.VisualStudio.TestTools.WebTesting.PostWebTestRecordingEventArgs | ||
32 | /// that contains the event data. | ||
33 | /// </summary> | ||
34 | /// <param name="sender"></param> | ||
35 | /// <param name="e"></param> | ||
36 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
37 | public override void PostWebTestDynamicParameterDetection(object sender, PostWebTestRecordingEventArgs e) | ||
38 | { | ||
39 | Connect connect = Connect.GetInstance(); | ||
40 | if (connect != null) | ||
41 | { | ||
42 | connect.AddWebTestRecording(e.RecordedWebTest); | ||
43 | } | ||
44 | |||
45 | bool pluginFound = false; | ||
46 | foreach (WebTestPluginReference pluginReference1 in e.RecordedWebTest.WebTestPluginReferences) | ||
47 | { | ||
48 | if (pluginReference1.Type.ToString().Equals(typeof(WebServicePlugin).ToString())) | ||
49 | { | ||
50 | pluginFound = true; | ||
51 | break; | ||
52 | } | ||
53 | } | ||
54 | |||
55 | if (!pluginFound) | ||
56 | { | ||
57 | WebTestPluginReference pluginReference = new WebTestPluginReference(); | ||
58 | pluginReference.Type = typeof(WebServicePlugin); | ||
59 | e.RecordedWebTest.WebTestPluginReferences.Add(pluginReference); | ||
60 | } | ||
61 | |||
62 | // Mark it as modified | ||
63 | e.RecordedWebTestModified = true; | ||
64 | } | ||
65 | } | ||
66 | } |
1 | //************************************************************************************************* | ||
2 | // XmlMessageEditor.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Web Test Plugin for editing XML string type Web Service Requests | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
10 | using WebTest.WebService.Plugin.ResultTab; | ||
11 | using WebTest.WebService.Plugin.Runtime; | ||
12 | |||
13 | namespace WebTest.WebService.Plugin.MessageEditors | ||
14 | { | ||
15 | /// <summary> | ||
16 | /// Editor for generic text based hierarchical messages such as XML, JSON etc | ||
17 | /// </summary> | ||
18 | public class XmlMessageEditor : IStringHttpBodyEditorPlugin | ||
19 | { | ||
20 | public XmlMessageEditor() | ||
21 | { | ||
22 | } | ||
23 | |||
24 | /// <summary> | ||
25 | /// Determine if this plugin supports a content type. | ||
26 | /// </summary> | ||
27 | /// <param name="contentType">The content type to test.</param> | ||
28 | /// <returns>Returns true if the plugin supports the specified content type.</returns> | ||
29 | public bool SupportsContentType(string contentType) | ||
30 | { | ||
31 | return (ContentHandlerFactory.GetHandler(contentType) != null); | ||
32 | } | ||
33 | |||
34 | /// <summary> | ||
35 | /// Create a UserControl to edit the specified bytes. This control will be hosted in the | ||
36 | /// plugin dialog which provides OK and Cancel buttons. | ||
37 | /// </summary> | ||
38 | /// <param name="contentType">The content type of the BinaryHttpBody.</param> | ||
39 | /// <param name="initialValue"> | ||
40 | /// The bytes to edit. The bytes are the payload of a BinaryHttpBody. | ||
41 | /// </param> | ||
42 | /// <returns>A UserControl capable of displaying and editing the byte array | ||
43 | /// value of the specified content type. | ||
44 | /// </returns> | ||
45 | public object CreateEditor(string contentType, string initialValue) | ||
46 | { | ||
47 | contentHandler = ContentHandlerFactory.GetHandler(contentType); | ||
48 | contentHandler.MessageString = initialValue; | ||
49 | messageEditor = new MessageEditor(contentHandler); | ||
50 | return messageEditor; | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Gets the edited bytes after the OK button is clicked on the plugin dialog. | ||
55 | /// </summary> | ||
56 | public string GetNewValue() | ||
57 | { | ||
58 | messageEditor.UpdateContent(); | ||
59 | return contentHandler.MessageString; | ||
60 | } | ||
61 | |||
62 | private MessageEditor messageEditor; | ||
63 | private ContentHandler contentHandler = null; | ||
64 | } | ||
65 | } |
WebTestWebServiceResultAddin/AssemblyInfo.cs
0 → 100644
No preview for this file type
WebTestWebServiceResultAddin/Connect.cs
0 → 100644
No preview for this file type
1 | //------------------------------------------------------------------------------ | ||
2 | // <auto-generated> | ||
3 | // This code was generated by a tool. | ||
4 | // Runtime Version:4.0.30319.17929 | ||
5 | // | ||
6 | // Changes to this file may cause incorrect behavior and will be lost if | ||
7 | // the code is regenerated. | ||
8 | // </auto-generated> | ||
9 | //------------------------------------------------------------------------------ | ||
10 | |||
11 | namespace WebTest.WebService.Plugin.ResultTab.Properties { | ||
12 | using System; | ||
13 | |||
14 | |||
15 | /// <summary> | ||
16 | /// A strongly-typed resource class, for looking up localized strings, etc. | ||
17 | /// </summary> | ||
18 | // This class was auto-generated by the StronglyTypedResourceBuilder | ||
19 | // class via a tool like ResGen or Visual Studio. | ||
20 | // To add or remove a member, edit your .ResX file then rerun ResGen | ||
21 | // with the /str option, or rebuild your VS project. | ||
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] | ||
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | ||
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | ||
25 | internal class Resources { | ||
26 | |||
27 | private static global::System.Resources.ResourceManager resourceMan; | ||
28 | |||
29 | private static global::System.Globalization.CultureInfo resourceCulture; | ||
30 | |||
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] | ||
32 | internal Resources() { | ||
33 | } | ||
34 | |||
35 | /// <summary> | ||
36 | /// Returns the cached ResourceManager instance used by this class. | ||
37 | /// </summary> | ||
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | ||
39 | internal static global::System.Resources.ResourceManager ResourceManager { | ||
40 | get { | ||
41 | if (object.ReferenceEquals(resourceMan, null)) { | ||
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WebTest.WebService.Plugin.ResultTab.Properties.Resources", typeof(Resources).Assembly); | ||
43 | resourceMan = temp; | ||
44 | } | ||
45 | return resourceMan; | ||
46 | } | ||
47 | } | ||
48 | |||
49 | /// <summary> | ||
50 | /// Overrides the current thread's CurrentUICulture property for all | ||
51 | /// resource lookups using this strongly typed resource class. | ||
52 | /// </summary> | ||
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | ||
54 | internal static global::System.Globalization.CultureInfo Culture { | ||
55 | get { | ||
56 | return resourceCulture; | ||
57 | } | ||
58 | set { | ||
59 | resourceCulture = value; | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | } |
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <root> | ||
3 | <!-- | ||
4 | Microsoft ResX Schema | ||
5 | |||
6 | Version 2.0 | ||
7 | |||
8 | The primary goals of this format is to allow a simple XML format | ||
9 | that is mostly human readable. The generation and parsing of the | ||
10 | various data types are done through the TypeConverter classes | ||
11 | associated with the data types. | ||
12 | |||
13 | Example: | ||
14 | |||
15 | ... ado.net/XML headers & schema ... | ||
16 | <resheader name="resmimetype">text/microsoft-resx</resheader> | ||
17 | <resheader name="version">2.0</resheader> | ||
18 | <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||
19 | <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||
20 | <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||
21 | <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||
22 | <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||
23 | <value>[base64 mime encoded serialized .NET Framework object]</value> | ||
24 | </data> | ||
25 | <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||
26 | <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||
27 | <comment>This is a comment</comment> | ||
28 | </data> | ||
29 | |||
30 | There are any number of "resheader" rows that contain simple | ||
31 | name/value pairs. | ||
32 | |||
33 | Each data row contains a name, and value. The row also contains a | ||
34 | type or mimetype. Type corresponds to a .NET class that support | ||
35 | text/value conversion through the TypeConverter architecture. | ||
36 | Classes that don't support this are serialized and stored with the | ||
37 | mimetype set. | ||
38 | |||
39 | The mimetype is used for serialized objects, and tells the | ||
40 | ResXResourceReader how to depersist the object. This is currently not | ||
41 | extensible. For a given mimetype the value must be set accordingly: | ||
42 | |||
43 | Note - application/x-microsoft.net.object.binary.base64 is the format | ||
44 | that the ResXResourceWriter will generate, however the reader can | ||
45 | read any of the formats listed below. | ||
46 | |||
47 | mimetype: application/x-microsoft.net.object.binary.base64 | ||
48 | value : The object must be serialized with | ||
49 | : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||
50 | : and then encoded with base64 encoding. | ||
51 | |||
52 | mimetype: application/x-microsoft.net.object.soap.base64 | ||
53 | value : The object must be serialized with | ||
54 | : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||
55 | : and then encoded with base64 encoding. | ||
56 | |||
57 | mimetype: application/x-microsoft.net.object.bytearray.base64 | ||
58 | value : The object must be serialized into a byte array | ||
59 | : using a System.ComponentModel.TypeConverter | ||
60 | : and then encoded with base64 encoding. | ||
61 | --> | ||
62 | <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
63 | <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
64 | <xsd:element name="root" msdata:IsDataSet="true"> | ||
65 | <xsd:complexType> | ||
66 | <xsd:choice maxOccurs="unbounded"> | ||
67 | <xsd:element name="metadata"> | ||
68 | <xsd:complexType> | ||
69 | <xsd:sequence> | ||
70 | <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
71 | </xsd:sequence> | ||
72 | <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
73 | <xsd:attribute name="type" type="xsd:string" /> | ||
74 | <xsd:attribute name="mimetype" type="xsd:string" /> | ||
75 | <xsd:attribute ref="xml:space" /> | ||
76 | </xsd:complexType> | ||
77 | </xsd:element> | ||
78 | <xsd:element name="assembly"> | ||
79 | <xsd:complexType> | ||
80 | <xsd:attribute name="alias" type="xsd:string" /> | ||
81 | <xsd:attribute name="name" type="xsd:string" /> | ||
82 | </xsd:complexType> | ||
83 | </xsd:element> | ||
84 | <xsd:element name="data"> | ||
85 | <xsd:complexType> | ||
86 | <xsd:sequence> | ||
87 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
88 | <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
89 | </xsd:sequence> | ||
90 | <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||
91 | <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||
92 | <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||
93 | <xsd:attribute ref="xml:space" /> | ||
94 | </xsd:complexType> | ||
95 | </xsd:element> | ||
96 | <xsd:element name="resheader"> | ||
97 | <xsd:complexType> | ||
98 | <xsd:sequence> | ||
99 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
100 | </xsd:sequence> | ||
101 | <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
102 | </xsd:complexType> | ||
103 | </xsd:element> | ||
104 | </xsd:choice> | ||
105 | </xsd:complexType> | ||
106 | </xsd:element> | ||
107 | </xsd:schema> | ||
108 | <resheader name="resmimetype"> | ||
109 | <value>text/microsoft-resx</value> | ||
110 | </resheader> | ||
111 | <resheader name="version"> | ||
112 | <value>2.0</value> | ||
113 | </resheader> | ||
114 | <resheader name="reader"> | ||
115 | <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
116 | </resheader> | ||
117 | <resheader name="writer"> | ||
118 | <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
119 | </resheader> | ||
120 | </root> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
No preview for this file type
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> | ||
3 | <PropertyGroup> | ||
4 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
5 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
6 | <ProductVersion>8.0.30424</ProductVersion> | ||
7 | <SchemaVersion>2.0</SchemaVersion> | ||
8 | <ProjectGuid>{48B3509E-1FD8-4875-8FC6-137647EB83AA}</ProjectGuid> | ||
9 | <OutputType>Library</OutputType> | ||
10 | <StartupObject> | ||
11 | </StartupObject> | ||
12 | <NoStandardLibraries>false</NoStandardLibraries> | ||
13 | <AssemblyName>WebTest.WebService.Plugin.ResultTab</AssemblyName> | ||
14 | <DeploymentDirectory>.\bin\</DeploymentDirectory> | ||
15 | <SccProjectName>SAK</SccProjectName> | ||
16 | <SccLocalPath>SAK</SccLocalPath> | ||
17 | <SccAuxPath>SAK</SccAuxPath> | ||
18 | <SccProvider>SAK</SccProvider> | ||
19 | <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | ||
20 | <TargetFrameworkProfile /> | ||
21 | </PropertyGroup> | ||
22 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
23 | <DebugSymbols>true</DebugSymbols> | ||
24 | <Optimize>false</Optimize> | ||
25 | <OutputPath>.\bin\Debug\</OutputPath> | ||
26 | <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging> | ||
27 | <DefineConstants>DEBUG;TRACE</DefineConstants> | ||
28 | <WarningLevel>4</WarningLevel> | ||
29 | <IncrementalBuild>false</IncrementalBuild> | ||
30 | <DocumentationFile>WebTest.WebService.Plugin.ResultTab.xml</DocumentationFile> | ||
31 | <Prefer32Bit>false</Prefer32Bit> | ||
32 | </PropertyGroup> | ||
33 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
34 | <DebugSymbols>false</DebugSymbols> | ||
35 | <Optimize>true</Optimize> | ||
36 | <OutputPath>.\bin\Release\</OutputPath> | ||
37 | <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging> | ||
38 | <DefineConstants>TRACE</DefineConstants> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <IncrementalBuild>false</IncrementalBuild> | ||
41 | <DocumentationFile>WebTest.WebService.Plugin.ResultTab.xml</DocumentationFile> | ||
42 | <Prefer32Bit>false</Prefer32Bit> | ||
43 | </PropertyGroup> | ||
44 | <PropertyGroup> | ||
45 | <RootNamespace>WebTest.WebService.Plugin.ResultTab</RootNamespace> | ||
46 | </PropertyGroup> | ||
47 | <ItemGroup> | ||
48 | <Reference Include="Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
49 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
50 | </Reference> | ||
51 | <Reference Include="Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
52 | <EmbedInteropTypes>True</EmbedInteropTypes> | ||
53 | </Reference> | ||
54 | <Reference Include="Microsoft.VisualStudio.QualityTools.LoadTestFramework" /> | ||
55 | <Reference Include="Microsoft.VisualStudio.QualityTools.LoadTestPackage"> | ||
56 | <HintPath>C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.QualityTools.LoadTestPackage.dll</HintPath> | ||
57 | <HintPath>C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.QualityTools.LoadTestPackage.dll</HintPath> | ||
58 | <Private>False</Private> | ||
59 | </Reference> | ||
60 | <Reference Include="Microsoft.VisualStudio.QualityTools.WebTestFramework" /> | ||
61 | <Reference Include="System" /> | ||
62 | <Reference Include="System.Core" /> | ||
63 | <Reference Include="System.Data" /> | ||
64 | <Reference Include="System.Drawing" /> | ||
65 | <Reference Include="System.Windows.Forms" /> | ||
66 | <Reference Include="System.Xml" /> | ||
67 | <Reference Include="Microsoft.CSharp" /> | ||
68 | <Reference Include="Microsoft.VisualStudio.Shell.11.0" /> | ||
69 | <Reference Include="Microsoft.VisualStudio.Shell.Immutable.11.0" /> | ||
70 | <Reference Include="Microsoft.VisualStudio.OLE.Interop" /> | ||
71 | <Reference Include="Microsoft.VisualStudio.Shell.Interop" /> | ||
72 | <Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0" /> | ||
73 | <Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0" /> | ||
74 | <Reference Include="Microsoft.VisualStudio.Shell.Interop.10.0" /> | ||
75 | <Reference Include="VSLangProj, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
76 | <EmbedInteropTypes>True</EmbedInteropTypes> | ||
77 | </Reference> | ||
78 | <Reference Include="VSLangProj2, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
79 | <EmbedInteropTypes>True</EmbedInteropTypes> | ||
80 | </Reference> | ||
81 | <Reference Include="VSLangProj80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||
82 | <EmbedInteropTypes>True</EmbedInteropTypes> | ||
83 | </Reference> | ||
84 | </ItemGroup> | ||
85 | <ItemGroup> | ||
86 | <Compile Include="AssemblyInfo.cs"> | ||
87 | <SubType>Code</SubType> | ||
88 | </Compile> | ||
89 | <Compile Include="Connect.cs"> | ||
90 | <SubType>Code</SubType> | ||
91 | </Compile> | ||
92 | <Compile Include="Properties\Resources.Designer.cs"> | ||
93 | <AutoGen>True</AutoGen> | ||
94 | <DesignTime>True</DesignTime> | ||
95 | <DependentUpon>Resources.resx</DependentUpon> | ||
96 | </Compile> | ||
97 | <Compile Include="WebServiceResult.cs"> | ||
98 | <SubType>UserControl</SubType> | ||
99 | </Compile> | ||
100 | <Compile Include="WebServiceResult.Designer.cs"> | ||
101 | <DependentUpon>WebServiceResult.cs</DependentUpon> | ||
102 | </Compile> | ||
103 | <Compile Include="WebTestDetail.cs" /> | ||
104 | <Compile Include="XmlTreeView.cs" /> | ||
105 | </ItemGroup> | ||
106 | <ItemGroup> | ||
107 | <COMReference Include="EnvDTE"> | ||
108 | <Guid>{80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2}</Guid> | ||
109 | <VersionMajor>8</VersionMajor> | ||
110 | <VersionMinor>0</VersionMinor> | ||
111 | <Lcid>0</Lcid> | ||
112 | <WrapperTool>primary</WrapperTool> | ||
113 | <Isolated>False</Isolated> | ||
114 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
115 | </COMReference> | ||
116 | <COMReference Include="EnvDTE100"> | ||
117 | <Guid>{26AD1324-4B7C-44BC-84F8-B86AED45729F}</Guid> | ||
118 | <VersionMajor>10</VersionMajor> | ||
119 | <VersionMinor>0</VersionMinor> | ||
120 | <Lcid>0</Lcid> | ||
121 | <WrapperTool>primary</WrapperTool> | ||
122 | <Isolated>False</Isolated> | ||
123 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
124 | </COMReference> | ||
125 | <COMReference Include="EnvDTE80"> | ||
126 | <Guid>{1A31287A-4D7D-413E-8E32-3B374931BD89}</Guid> | ||
127 | <VersionMajor>8</VersionMajor> | ||
128 | <VersionMinor>0</VersionMinor> | ||
129 | <Lcid>0</Lcid> | ||
130 | <WrapperTool>primary</WrapperTool> | ||
131 | <Isolated>False</Isolated> | ||
132 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
133 | </COMReference> | ||
134 | <COMReference Include="EnvDTE90"> | ||
135 | <Guid>{2CE2370E-D744-4936-A090-3FFFE667B0E1}</Guid> | ||
136 | <VersionMajor>9</VersionMajor> | ||
137 | <VersionMinor>0</VersionMinor> | ||
138 | <Lcid>0</Lcid> | ||
139 | <WrapperTool>primary</WrapperTool> | ||
140 | <Isolated>False</Isolated> | ||
141 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
142 | </COMReference> | ||
143 | <COMReference Include="Microsoft.VisualStudio.CommandBars"> | ||
144 | <Guid>{1CBA492E-7263-47BB-87FE-639000619B15}</Guid> | ||
145 | <VersionMajor>8</VersionMajor> | ||
146 | <VersionMinor>0</VersionMinor> | ||
147 | <Lcid>0</Lcid> | ||
148 | <WrapperTool>primary</WrapperTool> | ||
149 | <Isolated>False</Isolated> | ||
150 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
151 | </COMReference> | ||
152 | <COMReference Include="stdole"> | ||
153 | <Guid>{00020430-0000-0000-C000-000000000046}</Guid> | ||
154 | <VersionMajor>2</VersionMajor> | ||
155 | <VersionMinor>0</VersionMinor> | ||
156 | <Lcid>0</Lcid> | ||
157 | <WrapperTool>primary</WrapperTool> | ||
158 | <Isolated>False</Isolated> | ||
159 | <EmbedInteropTypes>False</EmbedInteropTypes> | ||
160 | </COMReference> | ||
161 | </ItemGroup> | ||
162 | <ItemGroup> | ||
163 | <Content Include="WebServicePluginForWebTestResultTab.AddIn"> | ||
164 | <SubType>Designer</SubType> | ||
165 | </Content> | ||
166 | </ItemGroup> | ||
167 | <ItemGroup> | ||
168 | <EmbeddedResource Include="Properties\Resources.resx"> | ||
169 | <Generator>ResXFileCodeGenerator</Generator> | ||
170 | <LastGenOutput>Resources.Designer.cs</LastGenOutput> | ||
171 | </EmbeddedResource> | ||
172 | <EmbeddedResource Include="WebServiceResult.resx"> | ||
173 | <DependentUpon>WebServiceResult.cs</DependentUpon> | ||
174 | </EmbeddedResource> | ||
175 | </ItemGroup> | ||
176 | <ItemGroup> | ||
177 | <ProjectReference Include="..\WebTestWebServiceRuntime\WebServicePluginForWebTestRuntime.csproj"> | ||
178 | <Project>{F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}</Project> | ||
179 | <Name>WebServicePluginForWebTestRuntime</Name> | ||
180 | <Private>False</Private> | ||
181 | </ProjectReference> | ||
182 | </ItemGroup> | ||
183 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
184 | <PropertyGroup> | ||
185 | <PreBuildEvent> | ||
186 | </PreBuildEvent> | ||
187 | <PostBuildEvent> | ||
188 | </PostBuildEvent> | ||
189 | </PropertyGroup> | ||
190 | <ProjectExtensions /> | ||
191 | <Target Name="AfterBuild"> | ||
192 | <PropertyGroup> | ||
193 | <DllName>$(AssemblyName).dll</DllName> | ||
194 | <PdbName>$(AssemblyName).pdb</PdbName> | ||
195 | <DocFileName>$(AssemblyName).xml</DocFileName> | ||
196 | </PropertyGroup> | ||
197 | <Delete Condition="Exists('$(DeploymentDirectory)$(DllName)')" Files="$(DeploymentDirectory)$(DllName)"> | ||
198 | </Delete> | ||
199 | <Delete Condition="Exists('$(DeploymentDirectory)$(PdbName)')" Files="$(DeploymentDirectory)$(PdbName)"> | ||
200 | </Delete> | ||
201 | <Delete Condition="Exists('$(DeploymentDirectory)$(DocFileName)')" Files="$(DeploymentDirectory)$(DocFileName)"> | ||
202 | </Delete> | ||
203 | <Copy Condition="Exists('$(OutputPath)$(DllName)')" SourceFiles="$(OutputPath)$(DllName)" DestinationFolder="$(DeploymentDirectory)"> | ||
204 | <Output TaskParameter="DestinationFiles" ItemName="FileWrites" /> | ||
205 | </Copy> | ||
206 | <Copy Condition="Exists('$(OutputPath)$(PdbName)')" SourceFiles="$(OutputPath)$(PdbName)" DestinationFolder="$(DeploymentDirectory)"> | ||
207 | <Output TaskParameter="DestinationFiles" ItemName="FileWrites" /> | ||
208 | </Copy> | ||
209 | <Copy Condition="Exists('$(OutputPath)$(DocFileName)')" SourceFiles="$(OutputPath)$(DocFileName)" DestinationFolder="$(DeploymentDirectory)"> | ||
210 | <Output TaskParameter="DestinationFiles" ItemName="FileWrites" /> | ||
211 | </Copy> | ||
212 | </Target> | ||
213 | </Project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <root> | ||
3 | <!-- | ||
4 | Microsoft ResX Schema | ||
5 | |||
6 | Version 2.0 | ||
7 | |||
8 | The primary goals of this format is to allow a simple XML format | ||
9 | that is mostly human readable. The generation and parsing of the | ||
10 | various data types are done through the TypeConverter classes | ||
11 | associated with the data types. | ||
12 | |||
13 | Example: | ||
14 | |||
15 | ... ado.net/XML headers & schema ... | ||
16 | <resheader name="resmimetype">text/microsoft-resx</resheader> | ||
17 | <resheader name="version">2.0</resheader> | ||
18 | <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||
19 | <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||
20 | <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||
21 | <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||
22 | <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||
23 | <value>[base64 mime encoded serialized .NET Framework object]</value> | ||
24 | </data> | ||
25 | <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||
26 | <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||
27 | <comment>This is a comment</comment> | ||
28 | </data> | ||
29 | |||
30 | There are any number of "resheader" rows that contain simple | ||
31 | name/value pairs. | ||
32 | |||
33 | Each data row contains a name, and value. The row also contains a | ||
34 | type or mimetype. Type corresponds to a .NET class that support | ||
35 | text/value conversion through the TypeConverter architecture. | ||
36 | Classes that don't support this are serialized and stored with the | ||
37 | mimetype set. | ||
38 | |||
39 | The mimetype is used for serialized objects, and tells the | ||
40 | ResXResourceReader how to depersist the object. This is currently not | ||
41 | extensible. For a given mimetype the value must be set accordingly: | ||
42 | |||
43 | Note - application/x-microsoft.net.object.binary.base64 is the format | ||
44 | that the ResXResourceWriter will generate, however the reader can | ||
45 | read any of the formats listed below. | ||
46 | |||
47 | mimetype: application/x-microsoft.net.object.binary.base64 | ||
48 | value : The object must be serialized with | ||
49 | : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||
50 | : and then encoded with base64 encoding. | ||
51 | |||
52 | mimetype: application/x-microsoft.net.object.soap.base64 | ||
53 | value : The object must be serialized with | ||
54 | : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||
55 | : and then encoded with base64 encoding. | ||
56 | |||
57 | mimetype: application/x-microsoft.net.object.bytearray.base64 | ||
58 | value : The object must be serialized into a byte array | ||
59 | : using a System.ComponentModel.TypeConverter | ||
60 | : and then encoded with base64 encoding. | ||
61 | --> | ||
62 | <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
63 | <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
64 | <xsd:element name="root" msdata:IsDataSet="true"> | ||
65 | <xsd:complexType> | ||
66 | <xsd:choice maxOccurs="unbounded"> | ||
67 | <xsd:element name="metadata"> | ||
68 | <xsd:complexType> | ||
69 | <xsd:sequence> | ||
70 | <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
71 | </xsd:sequence> | ||
72 | <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
73 | <xsd:attribute name="type" type="xsd:string" /> | ||
74 | <xsd:attribute name="mimetype" type="xsd:string" /> | ||
75 | <xsd:attribute ref="xml:space" /> | ||
76 | </xsd:complexType> | ||
77 | </xsd:element> | ||
78 | <xsd:element name="assembly"> | ||
79 | <xsd:complexType> | ||
80 | <xsd:attribute name="alias" type="xsd:string" /> | ||
81 | <xsd:attribute name="name" type="xsd:string" /> | ||
82 | </xsd:complexType> | ||
83 | </xsd:element> | ||
84 | <xsd:element name="data"> | ||
85 | <xsd:complexType> | ||
86 | <xsd:sequence> | ||
87 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
88 | <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
89 | </xsd:sequence> | ||
90 | <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||
91 | <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||
92 | <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||
93 | <xsd:attribute ref="xml:space" /> | ||
94 | </xsd:complexType> | ||
95 | </xsd:element> | ||
96 | <xsd:element name="resheader"> | ||
97 | <xsd:complexType> | ||
98 | <xsd:sequence> | ||
99 | <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
100 | </xsd:sequence> | ||
101 | <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
102 | </xsd:complexType> | ||
103 | </xsd:element> | ||
104 | </xsd:choice> | ||
105 | </xsd:complexType> | ||
106 | </xsd:element> | ||
107 | </xsd:schema> | ||
108 | <resheader name="resmimetype"> | ||
109 | <value>text/microsoft-resx</value> | ||
110 | </resheader> | ||
111 | <resheader name="version"> | ||
112 | <value>2.0</value> | ||
113 | </resheader> | ||
114 | <resheader name="reader"> | ||
115 | <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
116 | </resheader> | ||
117 | <resheader name="writer"> | ||
118 | <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
119 | </resheader> | ||
120 | </root> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | //************************************************************************************************* | ||
2 | // WebTestDetail.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Details of WebTest | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using System; | ||
10 | using System.IO; | ||
11 | using System.Collections.Generic; | ||
12 | using System.Linq; | ||
13 | using System.Text; | ||
14 | using EnvDTE80; | ||
15 | using EnvDTE; | ||
16 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
17 | |||
18 | namespace WebTest.WebService.Plugin.ResultTab | ||
19 | { | ||
20 | /// <summary> | ||
21 | /// Details of a Declarative WebTest project Item | ||
22 | /// </summary> | ||
23 | public class WebTestDetail | ||
24 | { | ||
25 | /// <summary> | ||
26 | /// | ||
27 | /// </summary> | ||
28 | /// <param name="fullPath"></param> | ||
29 | /// <param name="applicationObject"></param> | ||
30 | public WebTestDetail(string fullPath, DTE2 applicationObject) | ||
31 | { | ||
32 | this.FullPath = fullPath; | ||
33 | this._applicationObject = applicationObject; | ||
34 | } | ||
35 | |||
36 | /// <summary> | ||
37 | /// Web Test object | ||
38 | /// </summary> | ||
39 | public DeclarativeWebTest WebTest | ||
40 | { | ||
41 | get | ||
42 | { | ||
43 | if (webTest == null || (new FileInfo(FullPath).LastWriteTime > LastSavedTimeStamp)) | ||
44 | { | ||
45 | webTest = DeclarativeWebTestSerializer.Open(FullPath); | ||
46 | LastSavedTimeStamp = new FileInfo(FullPath).LastWriteTime; | ||
47 | } | ||
48 | return webTest; | ||
49 | } | ||
50 | set | ||
51 | { | ||
52 | webTest = value; | ||
53 | LastSavedTimeStamp = new FileInfo(FullPath).LastWriteTime; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | /// <summary> | ||
58 | /// Path to the WebTest file | ||
59 | /// </summary> | ||
60 | public string FullPath | ||
61 | { | ||
62 | get; | ||
63 | set; | ||
64 | } | ||
65 | |||
66 | /// <summary> | ||
67 | /// LastSavedTimeStamp | ||
68 | /// </summary> | ||
69 | public DateTime LastSavedTimeStamp | ||
70 | { | ||
71 | get; | ||
72 | set; | ||
73 | } | ||
74 | |||
75 | /// <summary> | ||
76 | /// ProjectItem of DTE | ||
77 | /// </summary> | ||
78 | public ProjectItem ProjectItem | ||
79 | { | ||
80 | get; | ||
81 | set; | ||
82 | } | ||
83 | |||
84 | /// <summary> | ||
85 | /// If there are pending changes, save first, as we are going to make our | ||
86 | /// changes to the file directly. | ||
87 | /// </summary> | ||
88 | public void PrepareToSave() | ||
89 | { | ||
90 | if (this.ProjectItem != null && this.ProjectItem.Document != null) | ||
91 | { | ||
92 | this.ProjectItem.Document.Close(vsSaveChanges.vsSaveChangesPrompt); | ||
93 | } | ||
94 | } | ||
95 | |||
96 | /// <summary> | ||
97 | /// Save WebTest to file | ||
98 | /// </summary> | ||
99 | public void Save() | ||
100 | { | ||
101 | DeclarativeWebTestSerializer.Save(this.WebTest, this.FullPath); | ||
102 | this.LastSavedTimeStamp = DateTime.Now; | ||
103 | |||
104 | if (this.ProjectItem != null) | ||
105 | { | ||
106 | Window window = this.ProjectItem.Open(); | ||
107 | window.Activate(); | ||
108 | } | ||
109 | } | ||
110 | |||
111 | /// <summary> | ||
112 | /// Parse parameters from all items of Web Test | ||
113 | /// </summary> | ||
114 | /// <returns></returns> | ||
115 | public List<string> GetParameterList() | ||
116 | { | ||
117 | List<string> list = new List<string>(); | ||
118 | |||
119 | DeclarativeWebTest w = WebTest; | ||
120 | |||
121 | for (int i = 1; i <= w.Items.Count; i++) | ||
122 | { | ||
123 | WebTestRequest requestInWebTest = webTest.GetItem(i) as WebTestRequest; | ||
124 | if (requestInWebTest != null) | ||
125 | { | ||
126 | foreach (ExtractionRuleReference reference in requestInWebTest.ExtractionRuleReferences) | ||
127 | { | ||
128 | list.Add(reference.ContextParameterName); | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | |||
133 | return list; | ||
134 | } | ||
135 | |||
136 | private DTE2 _applicationObject; | ||
137 | private DeclarativeWebTest webTest = null; | ||
138 | } | ||
139 | } |
WebTestWebServiceResultAddin/XmlTreeView.cs
0 → 100644
1 | //************************************************************************************************* | ||
2 | // XmlTreeView.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Wrapper for TreeView that bings XML to TreeView | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using System; | ||
10 | using System.Collections.Generic; | ||
11 | using System.Linq; | ||
12 | using System.Text; | ||
13 | using System.Windows.Forms; | ||
14 | using System.Xml; | ||
15 | |||
16 | namespace WebTest.WebService.Plugin.ResultTab | ||
17 | { | ||
18 | /// <summary> | ||
19 | /// Wrapper for TreeView to enable XML content view | ||
20 | /// </summary> | ||
21 | public class XmlTreeView | ||
22 | { | ||
23 | private TreeView treeView; | ||
24 | private XmlDocument dom; | ||
25 | |||
26 | /// <summary> | ||
27 | /// Wrapper for TreeView to enable XML content view | ||
28 | /// </summary> | ||
29 | /// <param name="treeView">TreeView where XML content needs to be shown</param> | ||
30 | public XmlTreeView(TreeView treeView) | ||
31 | { | ||
32 | this.treeView = treeView; | ||
33 | treeView.BeforeExpand += new TreeViewCancelEventHandler(TreeExpanded); | ||
34 | treeView.AfterLabelEdit += new NodeLabelEditEventHandler(treeViewRequest_AfterLabelEdit); | ||
35 | } | ||
36 | |||
37 | /// <summary> | ||
38 | /// Show XML in tree | ||
39 | /// </summary> | ||
40 | /// <param name="xmlString"></param> | ||
41 | /// <returns></returns> | ||
42 | public XmlDocument ShowXML(string xmlString) | ||
43 | { | ||
44 | try | ||
45 | { | ||
46 | // Load the XML file. | ||
47 | this.dom = new XmlDocument(); | ||
48 | dom.LoadXml(xmlString); | ||
49 | ShowXML(dom); | ||
50 | return dom; | ||
51 | } | ||
52 | catch (Exception) | ||
53 | { | ||
54 | //MessageBox.Show(ex.Message, "Error"); | ||
55 | } | ||
56 | return null; | ||
57 | } | ||
58 | |||
59 | /// <summary> | ||
60 | /// Show XML in tree | ||
61 | /// </summary> | ||
62 | /// <param name="reader"></param> | ||
63 | /// <returns></returns> | ||
64 | public XmlDocument ShowXML(XmlReader reader) | ||
65 | { | ||
66 | try | ||
67 | { | ||
68 | // Load the XML file. | ||
69 | this.dom = new XmlDocument(); | ||
70 | dom.Load(reader); | ||
71 | ShowXML(dom); | ||
72 | return dom; | ||
73 | } | ||
74 | catch (Exception) | ||
75 | { | ||
76 | //MessageBox.Show(ex.Message, "Error"); | ||
77 | } | ||
78 | return null; | ||
79 | } | ||
80 | |||
81 | /// <summary> | ||
82 | /// Show XML in tree | ||
83 | /// </summary> | ||
84 | /// <param name="dom"></param> | ||
85 | public void ShowXML(XmlDocument dom) | ||
86 | { | ||
87 | try | ||
88 | { | ||
89 | this.dom = dom; | ||
90 | XmlNode xNode = dom.DocumentElement; | ||
91 | |||
92 | // Load the XML into the TreeView. | ||
93 | treeView.Nodes.Clear(); | ||
94 | |||
95 | TreeNode treeNode = new TreeNode(xNode.Name); | ||
96 | treeNode.Tag = xNode; | ||
97 | if (xNode.HasChildNodes) | ||
98 | { | ||
99 | treeNode.Nodes.Add(new TreeNode("dummy")); | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | treeNode.Text = xNode.InnerXml.Trim(); | ||
104 | } | ||
105 | |||
106 | treeView.Nodes.Add(treeNode); | ||
107 | treeNode.Collapse(); | ||
108 | } | ||
109 | catch (Exception ex) | ||
110 | { | ||
111 | MessageBox.Show(ex.Message, "Error"); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | /// <summary> | ||
116 | /// Indicates whether message has been edited since last update | ||
117 | /// </summary> | ||
118 | public bool MessageEdited | ||
119 | { | ||
120 | get; | ||
121 | set; | ||
122 | } | ||
123 | |||
124 | /// <summary> | ||
125 | /// replaces currently selected XML node's contents with given parameter name | ||
126 | /// </summary> | ||
127 | /// <param name="parameterName">name of the parameter</param> | ||
128 | public void AddParameter(string parameterName) | ||
129 | { | ||
130 | TreeNode treeNode = this.treeView.SelectedNode; | ||
131 | TreeNode parentTreeNode = treeNode.Parent; | ||
132 | if (treeNode != null && parentTreeNode != null) | ||
133 | { | ||
134 | if (parameterName.Equals("Type Parameter")) | ||
135 | { | ||
136 | if (!treeNode.IsEditing) | ||
137 | { | ||
138 | treeNode.BeginEdit(); | ||
139 | } | ||
140 | return; | ||
141 | } | ||
142 | |||
143 | ParameterizeNode(treeNode, "{{" + parameterName + "}}"); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | private void treeViewRequest_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e) | ||
148 | { | ||
149 | if (e.Label != null) | ||
150 | { | ||
151 | if (e.Label.Length > 0) | ||
152 | { | ||
153 | //Stop editing without canceling the label change. | ||
154 | e.Node.EndEdit(false); | ||
155 | ParameterizeNode(e.Node, e.Label); | ||
156 | } | ||
157 | else | ||
158 | { | ||
159 | // Cancel the label edit action, inform the user, and | ||
160 | // place the node in edit mode again | ||
161 | e.CancelEdit = true; | ||
162 | MessageBox.Show("Invalid input.\nThe label cannot be blank", | ||
163 | "Node Label Edit"); | ||
164 | e.Node.BeginEdit(); | ||
165 | } | ||
166 | } | ||
167 | } | ||
168 | |||
169 | private void TreeExpanded(object sender, TreeViewCancelEventArgs e) | ||
170 | { | ||
171 | if (e.Node.Nodes.Count == 1 && e.Node.Nodes[0].Text.Equals("dummy")) | ||
172 | { | ||
173 | e.Node.Nodes.Clear(); | ||
174 | XmlNode parentNode = e.Node.Tag as XmlNode; | ||
175 | XmlNodeList nodeList = parentNode.ChildNodes; | ||
176 | for (int i = 0; i <= nodeList.Count - 1; i++) | ||
177 | { | ||
178 | XmlNode xNode = parentNode.ChildNodes[i]; | ||
179 | TreeNode treeNode = new TreeNode(); | ||
180 | treeNode.Tag = xNode; | ||
181 | if (xNode.NodeType.Equals(XmlNodeType.Element)) | ||
182 | { | ||
183 | treeNode.Text = xNode.Name; | ||
184 | if (xNode.HasChildNodes) | ||
185 | { | ||
186 | treeNode.Nodes.Add(new TreeNode("dummy")); | ||
187 | } | ||
188 | else | ||
189 | { | ||
190 | treeNode.Nodes.Add(new TreeNode(xNode.Value)); | ||
191 | } | ||
192 | } | ||
193 | else | ||
194 | { | ||
195 | treeNode.Text = xNode.Value; | ||
196 | } | ||
197 | |||
198 | e.Node.Nodes.Add(treeNode); | ||
199 | treeNode.Collapse(); | ||
200 | } | ||
201 | } | ||
202 | } | ||
203 | |||
204 | private void ParameterizeNode(TreeNode treeNode, string parameter) | ||
205 | { | ||
206 | TreeNode parentTreeNode = treeNode.Parent; | ||
207 | XmlNode xNode = treeNode.Tag as XmlNode; | ||
208 | if (xNode != null) | ||
209 | { | ||
210 | XmlNode parentXNode = parentTreeNode.Tag as XmlNode; | ||
211 | treeNode.Text = parameter; | ||
212 | if (xNode is XmlText) | ||
213 | { | ||
214 | xNode.Value = parameter; | ||
215 | } | ||
216 | else | ||
217 | { | ||
218 | XmlText textNode = dom.CreateTextNode(parameter); | ||
219 | parentXNode.ReplaceChild(textNode, xNode); | ||
220 | treeNode.Tag = textNode; | ||
221 | treeNode.Nodes.Clear(); | ||
222 | } | ||
223 | this.MessageEdited = true; | ||
224 | } | ||
225 | } | ||
226 | } | ||
227 | } |
WebTestWebServiceRuntime/ContentHandler.cs
0 → 100644
1 | //************************************************************************************************* | ||
2 | // ContentHandler.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Base class for handling a content type | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using System; | ||
10 | using System.Collections.Generic; | ||
11 | using System.Linq; | ||
12 | using System.Text; | ||
13 | using System.Xml; | ||
14 | using System.IO; | ||
15 | using System.Xml.XPath; | ||
16 | |||
17 | namespace WebTest.WebService.Plugin.Runtime | ||
18 | { | ||
19 | /// <summary> | ||
20 | /// Base class for handling a content type | ||
21 | /// </summary> | ||
22 | public class ContentHandler | ||
23 | { | ||
24 | private string xmlString = string.Empty; | ||
25 | private XmlDocument xmlDocument = null; | ||
26 | |||
27 | /// <summary> | ||
28 | /// Is it a binary format? | ||
29 | /// </summary> | ||
30 | public virtual bool IsBinary | ||
31 | { | ||
32 | get | ||
33 | { | ||
34 | return false; | ||
35 | } | ||
36 | } | ||
37 | |||
38 | /// <summary> | ||
39 | /// Raw binary content | ||
40 | /// </summary> | ||
41 | public virtual Byte[] MessageBytes | ||
42 | { | ||
43 | get | ||
44 | { | ||
45 | throw new NotImplementedException(); | ||
46 | } | ||
47 | set | ||
48 | { | ||
49 | throw new NotImplementedException(); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Raw string content | ||
55 | /// </summary> | ||
56 | public virtual string MessageString | ||
57 | { | ||
58 | get | ||
59 | { | ||
60 | return XmlToString(this.XmlDocument); | ||
61 | } | ||
62 | set | ||
63 | { | ||
64 | this.xmlString = value; | ||
65 | this.xmlDocument = null; | ||
66 | } | ||
67 | } | ||
68 | |||
69 | /// <summary> | ||
70 | /// message converted to XML | ||
71 | /// </summary> | ||
72 | public string XmlString | ||
73 | { | ||
74 | get | ||
75 | { | ||
76 | return XmlToIndentedString(this.XmlDocument); | ||
77 | } | ||
78 | set | ||
79 | { | ||
80 | this.xmlString = value; | ||
81 | this.xmlDocument = null; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | /// <summary> | ||
86 | /// XML Document of the message | ||
87 | /// </summary> | ||
88 | public XmlDocument XmlDocument | ||
89 | { | ||
90 | get | ||
91 | { | ||
92 | if (this.xmlDocument == null) | ||
93 | { | ||
94 | if (string.IsNullOrEmpty(this.xmlString)) | ||
95 | { | ||
96 | this.LoadDocument(); | ||
97 | } | ||
98 | else | ||
99 | { | ||
100 | try | ||
101 | { | ||
102 | this.xmlDocument = new XmlDocument(); | ||
103 | this.xmlDocument.LoadXml(this.xmlString); | ||
104 | } | ||
105 | catch (Exception) | ||
106 | { | ||
107 | // Try setting it as a native format message | ||
108 | this.MessageString = this.xmlString; | ||
109 | this.LoadDocument(); | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | |||
114 | return xmlDocument; | ||
115 | } | ||
116 | set | ||
117 | { | ||
118 | this.xmlDocument = value; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | /// <summary> | ||
123 | /// XPath document of XML | ||
124 | /// </summary> | ||
125 | public virtual XPathDocument XPathDocument | ||
126 | { | ||
127 | get | ||
128 | { | ||
129 | return new XPathDocument(new StringReader(this.xmlString)); | ||
130 | } | ||
131 | } | ||
132 | |||
133 | /// <summary> | ||
134 | /// Evaluates XPath | ||
135 | /// </summary> | ||
136 | /// <param name="xPath">xPath expression</param> | ||
137 | /// <returns></returns> | ||
138 | public XPathNodeIterator EvaluateXPath(string xPath) | ||
139 | { | ||
140 | XPathDocument x = this.XPathDocument; | ||
141 | XPathNavigator nav = x.CreateNavigator(); | ||
142 | XmlNamespaceManager context = new XmlNamespaceManager(nav.NameTable); | ||
143 | while (nav.MoveToFollowing(XPathNodeType.Element)) | ||
144 | { | ||
145 | IDictionary<string, string> whatever = nav.GetNamespacesInScope(XmlNamespaceScope.All); | ||
146 | foreach (KeyValuePair<string, string> key in whatever) | ||
147 | { | ||
148 | context.AddNamespace(key.Key, key.Value); | ||
149 | } | ||
150 | } | ||
151 | |||
152 | // Compile a standard XPath expression | ||
153 | XPathExpression expr; | ||
154 | expr = nav.Compile(xPath); | ||
155 | expr.SetContext(context); | ||
156 | return nav.Select(expr); | ||
157 | } | ||
158 | |||
159 | /// <summary> | ||
160 | /// Override to perform custom load | ||
161 | /// </summary> | ||
162 | protected virtual void LoadDocument() | ||
163 | { | ||
164 | } | ||
165 | |||
166 | /// <summary> | ||
167 | /// Converts XmlDocument to String | ||
168 | /// </summary> | ||
169 | /// <param name="dom"></param> | ||
170 | /// <returns></returns> | ||
171 | public static string XmlToString(XmlDocument dom) | ||
172 | { | ||
173 | string message = string.Empty; | ||
174 | System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); | ||
175 | using (var stream = new MemoryStream()) | ||
176 | { | ||
177 | using (XmlTextWriter writer = new XmlTextWriter(stream, encoding)) | ||
178 | { | ||
179 | dom.WriteTo(writer); | ||
180 | } | ||
181 | message = encoding.GetString(stream.ToArray()); | ||
182 | } | ||
183 | |||
184 | return message; | ||
185 | } | ||
186 | |||
187 | /// <summary> | ||
188 | /// Converts XmlDocument to String | ||
189 | /// </summary> | ||
190 | /// <param name="dom"></param> | ||
191 | /// <returns></returns> | ||
192 | public static string XmlToIndentedString(XmlDocument dom) | ||
193 | { | ||
194 | string message = string.Empty; | ||
195 | System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); | ||
196 | using (var stream = new MemoryStream()) | ||
197 | { | ||
198 | using (XmlTextWriter writer = new XmlTextWriter(stream, encoding)) | ||
199 | { | ||
200 | writer.Formatting = Formatting.Indented; | ||
201 | dom.WriteTo(writer); | ||
202 | } | ||
203 | message = encoding.GetString(stream.ToArray()); | ||
204 | } | ||
205 | |||
206 | return message; | ||
207 | } | ||
208 | |||
209 | /// <summary> | ||
210 | /// Parses XML in string form and returns XmlDocument | ||
211 | /// </summary> | ||
212 | /// <param name="xmlString"></param> | ||
213 | /// <returns></returns> | ||
214 | public static XmlDocument StringToXml(string xmlString) | ||
215 | { | ||
216 | XmlDocument dom = new XmlDocument(); | ||
217 | dom.LoadXml(xmlString); | ||
218 | return dom; | ||
219 | } | ||
220 | } | ||
221 | } |
1 | //************************************************************************************************* | ||
2 | // ContentHandlerFactory.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Creates appropriate handler for a given content type | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using System; | ||
10 | using System.Collections.Generic; | ||
11 | using System.Linq; | ||
12 | using System.Text; | ||
13 | |||
14 | namespace WebTest.WebService.Plugin.Runtime | ||
15 | { | ||
16 | /// <summary> | ||
17 | /// Creates appropriate handler for a given content type | ||
18 | /// </summary> | ||
19 | public class ContentHandlerFactory | ||
20 | { | ||
21 | /// <summary> | ||
22 | /// Creates appropriate handler for a given content type | ||
23 | /// </summary> | ||
24 | /// <param name="contentType">content type</param> | ||
25 | /// <returns></returns> | ||
26 | public static ContentHandler GetHandler(string contentType) | ||
27 | { | ||
28 | if (contentType.ToLower().Contains("msbin1")) | ||
29 | { | ||
30 | return new Msbin1ContentHandler(contentType.ToLower().Contains("soap")); | ||
31 | } | ||
32 | else if (contentType.ToLower().Contains("json")) | ||
33 | { | ||
34 | return new JsonContentHandler(); | ||
35 | } | ||
36 | else if (contentType.ToLower().Contains("xml")) | ||
37 | { | ||
38 | return new ContentHandler(); | ||
39 | } | ||
40 | else | ||
41 | { | ||
42 | return null; | ||
43 | } | ||
44 | } | ||
45 | } | ||
46 | } |
This diff is collapsed.
Click to expand it.
1 | //************************************************************************************************* | ||
2 | // JsonContentHandler.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Encode/decode JSON format for Web Service response. converts JSON into XML back and forth | ||
6 | // | ||
7 | // Copyright(c) Microsoft Corporation, 2010 | ||
8 | //************************************************************************************************* | ||
9 | using System; | ||
10 | using System.Collections.Generic; | ||
11 | using System.Linq; | ||
12 | using System.Text; | ||
13 | using System.Xml; | ||
14 | using System.Runtime.Serialization.Json; | ||
15 | using System.IO; | ||
16 | using System.Xml.XPath; | ||
17 | |||
18 | namespace WebTest.WebService.Plugin.Runtime | ||
19 | { | ||
20 | public class JsonContentHandler : ContentHandler | ||
21 | { | ||
22 | public override string MessageString | ||
23 | { | ||
24 | get | ||
25 | { | ||
26 | string message = string.Empty; | ||
27 | System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); | ||
28 | |||
29 | using (var stream = new MemoryStream()) | ||
30 | { | ||
31 | using (XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding)) | ||
32 | { | ||
33 | this.XmlDocument.WriteTo(writer); | ||
34 | } | ||
35 | message = encoding.GetString(stream.ToArray()); | ||
36 | } | ||
37 | |||
38 | return message; | ||
39 | } | ||
40 | set | ||
41 | { | ||
42 | this.jsonMessage = value; | ||
43 | this.XmlString = string.Empty; | ||
44 | } | ||
45 | } | ||
46 | |||
47 | public override XPathDocument XPathDocument | ||
48 | { | ||
49 | get | ||
50 | { | ||
51 | return new XPathDocument(GetReader()); | ||
52 | } | ||
53 | } | ||
54 | |||
55 | protected override void LoadDocument() | ||
56 | { | ||
57 | try | ||
58 | { | ||
59 | this.XmlDocument = new XmlDocument(); | ||
60 | this.XmlDocument.Load(GetReader()); | ||
61 | } | ||
62 | catch (Exception) | ||
63 | { | ||
64 | // try setting it as an XML | ||
65 | this.XmlString = jsonMessage; | ||
66 | } | ||
67 | } | ||
68 | |||
69 | private XmlDictionaryReader GetReader() | ||
70 | { | ||
71 | System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); | ||
72 | |||
73 | XmlDictionaryReader jsonReader = | ||
74 | System.Runtime.Serialization.Json.JsonReaderWriterFactory.CreateJsonReader( | ||
75 | encoding.GetBytes(this.jsonMessage), | ||
76 | XmlDictionaryReaderQuotas.Max); | ||
77 | |||
78 | return jsonReader; | ||
79 | } | ||
80 | |||
81 | private string jsonMessage = string.Empty; | ||
82 | } | ||
83 | } |
1 | //************************************************************************************************* | ||
2 | // Msbin1ContentHandler.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // Encode/decode MSBin1 binary format for Web Service response | ||
6 | // When the Web Service response is 'application/soap+msbin1 or application/msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | using System; | ||
12 | using System.Collections.Generic; | ||
13 | using System.Linq; | ||
14 | using System.Text; | ||
15 | using System.Xml; | ||
16 | using System.ServiceModel.Channels; | ||
17 | using System.IO; | ||
18 | |||
19 | namespace WebTest.WebService.Plugin.Runtime | ||
20 | { | ||
21 | public class Msbin1ContentHandler : ContentHandler | ||
22 | { | ||
23 | private static readonly BufferManager _bufferManager = BufferManager.CreateBufferManager(int.MaxValue, int.MaxValue); | ||
24 | |||
25 | public Msbin1ContentHandler(bool isSoapMessage) | ||
26 | { | ||
27 | soapMessage = isSoapMessage; | ||
28 | } | ||
29 | |||
30 | public override Byte[] MessageBytes | ||
31 | { | ||
32 | get | ||
33 | { | ||
34 | MemoryStream memStream = new MemoryStream(); | ||
35 | if (soapMessage) | ||
36 | { | ||
37 | // Encrypt result back into binary data | ||
38 | XmlWriter meWrite = XmlWriter.Create(memStream); | ||
39 | meWrite.WriteRaw(this.MessageString); | ||
40 | meWrite.Flush(); | ||
41 | memStream.Position = 0; | ||
42 | |||
43 | XmlReader meRead = XmlReader.Create(memStream); | ||
44 | Message newMessage = Message.CreateMessage(meRead, int.MaxValue, originalMessage.Version); | ||
45 | var bindingElement = new BinaryMessageEncodingBindingElement(); | ||
46 | var factory = bindingElement.CreateMessageEncoderFactory(); | ||
47 | using (MemoryStream memoryStream = new MemoryStream()) | ||
48 | { | ||
49 | factory.Encoder.WriteMessage(newMessage, memoryStream); | ||
50 | return memoryStream.ToArray(); | ||
51 | } | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | XmlDictionaryWriter meWrite = XmlDictionaryWriter.CreateBinaryWriter(memStream); | ||
56 | XmlDocument document = StringToXml(this.MessageString); | ||
57 | document.Save(meWrite); | ||
58 | return memStream.ToArray(); | ||
59 | } | ||
60 | } | ||
61 | set | ||
62 | { | ||
63 | this.messageBytes = value; | ||
64 | // Decrypt body bytes to string | ||
65 | |||
66 | if (soapMessage) | ||
67 | { | ||
68 | var bindingElement = new BinaryMessageEncodingBindingElement(); | ||
69 | var factory = bindingElement.CreateMessageEncoderFactory(); | ||
70 | originalMessage = factory.Encoder.ReadMessage(new ArraySegment<byte>(messageBytes), _bufferManager); | ||
71 | this.MessageString = originalMessage.ToString(); | ||
72 | } | ||
73 | else | ||
74 | { | ||
75 | XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(messageBytes, XmlDictionaryReaderQuotas.Max); | ||
76 | |||
77 | XmlDocument document = new XmlDocument(); | ||
78 | document.Load(reader); | ||
79 | this.MessageString = XmlToString(document); | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | |||
84 | public override bool IsBinary | ||
85 | { | ||
86 | get | ||
87 | { | ||
88 | return true; | ||
89 | } | ||
90 | } | ||
91 | |||
92 | private byte[] messageBytes = null; | ||
93 | private Message originalMessage = null; | ||
94 | private bool soapMessage = false; | ||
95 | } | ||
96 | } |
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("WebTestSilverLightPlugin")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("Microsoft IT")] | ||
12 | [assembly: AssemblyProduct("WebTestSilverLightPlugin")] | ||
13 | [assembly: AssemblyCopyright("Copyright © Microsoft IT 2010")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("88c51893-3ea0-4a7b-8942-cf06ba21bf79")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Build and Revision Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | // [assembly: AssemblyVersion("1.0.*")] | ||
35 | [assembly: AssemblyVersion("1.0.0.0")] | ||
36 | [assembly: AssemblyFileVersion("1.0.0.0")] |
WebTestWebServiceRuntime/WebServicePlugin.cs
0 → 100644
1 | //************************************************************************************************* | ||
2 | // WebServicePlugin.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // This Web Test plugin performs Data Binding on binary format for Web Service response | ||
6 | // When the Web Service response is 'application/soap+msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
12 | using System.Diagnostics.CodeAnalysis; | ||
13 | |||
14 | namespace WebTest.WebService.Plugin.Runtime | ||
15 | { | ||
16 | public class WebServicePlugin : WebTestPlugin | ||
17 | { | ||
18 | /// Summary: | ||
19 | /// When overridden in a derived class, represents the method that will handle | ||
20 | /// the event associated with the completion of a Web page. | ||
21 | /// | ||
22 | /// Parameters: | ||
23 | /// sender: | ||
24 | /// The source of the event. | ||
25 | /// | ||
26 | /// e: | ||
27 | /// A PostPageEventArgs that contains the event data. | ||
28 | /// | ||
29 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
30 | public override void PostPage(object sender, PostPageEventArgs e) | ||
31 | { | ||
32 | } | ||
33 | |||
34 | // | ||
35 | // Summary: | ||
36 | // When overridden in a derived class, represents the method that will handle | ||
37 | // the event associated with the completion of an HTTP request. | ||
38 | // | ||
39 | // Parameters: | ||
40 | // sender: | ||
41 | // The source of the event. | ||
42 | // | ||
43 | // e: | ||
44 | // A PostRequestEventArgs that contains the event data. | ||
45 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
46 | public override void PostRequest(object sender, PostRequestEventArgs e) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | // | ||
51 | // Summary: | ||
52 | // When overridden in a derived class, represents the method that will handle | ||
53 | // the event associated with the completion of a transaction that is defined | ||
54 | // in the Web test. | ||
55 | // | ||
56 | // Parameters: | ||
57 | // sender: | ||
58 | // The source of the event. | ||
59 | // | ||
60 | // e: | ||
61 | // A PostTransactionEventArgs that contains the event data. | ||
62 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
63 | public override void PostTransaction(object sender, PostTransactionEventArgs e) | ||
64 | { | ||
65 | } | ||
66 | |||
67 | // | ||
68 | // Summary: | ||
69 | // When overridden in a derived class, represents the method that will handle | ||
70 | // the event associated with the end of a Web test. | ||
71 | // | ||
72 | // Parameters: | ||
73 | // sender: | ||
74 | // The source of the event. | ||
75 | // | ||
76 | // e: | ||
77 | // A Microsoft.VisualStudio.TestTools.WebTesting.PostWebTestEventArgs that contains | ||
78 | // the event data. | ||
79 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
80 | public override void PostWebTest(object sender, PostWebTestEventArgs e) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | // | ||
85 | // Summary: | ||
86 | // When overridden in a derived class, represents the method that will handle | ||
87 | // the event associated with the start of a Web page. | ||
88 | // | ||
89 | // Parameters: | ||
90 | // sender: | ||
91 | // The source of the event. | ||
92 | // | ||
93 | // e: | ||
94 | // A PrePageEventArgs that contains the event data. | ||
95 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
96 | public override void PrePage(object sender, PrePageEventArgs e) | ||
97 | { | ||
98 | } | ||
99 | |||
100 | // | ||
101 | // Summary: | ||
102 | // When overridden in a derived class, represents the method that will handle | ||
103 | // the event associated with the start of an HTTP request. | ||
104 | // | ||
105 | // Parameters: | ||
106 | // sender: | ||
107 | // The source of the event. | ||
108 | // | ||
109 | // e: | ||
110 | // A PreRequestEventArgs that contains the event data. | ||
111 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
112 | public override void PreRequest(object sender, PreRequestEventArgs e) | ||
113 | { | ||
114 | } | ||
115 | |||
116 | /// <summary> | ||
117 | /// This method performs Data Binding on MSBin1 binray format for Web Service response | ||
118 | /// When the Web Service response is 'application/soap+msbin1' | ||
119 | // (binary - used by Silverlight application with WCF RIA) | ||
120 | /// </summary> | ||
121 | /// <param name="sender"></param> | ||
122 | /// <param name="e"></param> | ||
123 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
124 | public override void PreRequestDataBinding(object sender, PreRequestDataBindingEventArgs e) | ||
125 | { | ||
126 | BinaryHttpBody binaryHttpBody = e.Request.Body as BinaryHttpBody; | ||
127 | if (binaryHttpBody == null || string.IsNullOrEmpty(binaryHttpBody.ContentType)) | ||
128 | { | ||
129 | return; | ||
130 | } | ||
131 | |||
132 | if (!binaryHttpBody.ContentType.Contains("msbin1")) | ||
133 | { | ||
134 | return; | ||
135 | } | ||
136 | |||
137 | ContentHandler contentHandler = ContentHandlerFactory.GetHandler(binaryHttpBody.ContentType); | ||
138 | if (contentHandler != null) | ||
139 | { | ||
140 | contentHandler.MessageBytes = binaryHttpBody.Data; | ||
141 | |||
142 | string text = contentHandler.MessageString; | ||
143 | |||
144 | // do Data Binding on the string version of binary data | ||
145 | string newText = DataBindingHelper.UpdateBindingSites(e.WebTest.Context, text); | ||
146 | |||
147 | contentHandler.MessageString = newText; | ||
148 | |||
149 | // set the new binary data into http body | ||
150 | binaryHttpBody.Data = contentHandler.MessageBytes; | ||
151 | } | ||
152 | } | ||
153 | |||
154 | // | ||
155 | // Summary: | ||
156 | // When overridden in a derived class, represents the method that will handle | ||
157 | // the event associated with the start of a transaction that is defined in the | ||
158 | // Web test. | ||
159 | // | ||
160 | // Parameters: | ||
161 | // sender: | ||
162 | // The source of the event. | ||
163 | // | ||
164 | // e: | ||
165 | // A PreTransactionEventArgs that contains the event data. | ||
166 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
167 | public override void PreTransaction(object sender, PreTransactionEventArgs e) | ||
168 | { | ||
169 | } | ||
170 | |||
171 | // | ||
172 | // Summary: | ||
173 | // When overridden in a derived class, represents the method that will handle | ||
174 | // the event associated with the start of a Web test. | ||
175 | // | ||
176 | // Parameters: | ||
177 | // sender: | ||
178 | // The source of the event. | ||
179 | // | ||
180 | // e: | ||
181 | // A Microsoft.VisualStudio.TestTools.WebTesting.PostWebTestEventArgs that contains | ||
182 | // the event data. | ||
183 | [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] | ||
184 | public override void PreWebTest(object sender, PreWebTestEventArgs e) | ||
185 | { | ||
186 | } | ||
187 | } | ||
188 | } |
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
3 | <PropertyGroup> | ||
4 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
5 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
6 | <ProductVersion>8.0.30703</ProductVersion> | ||
7 | <SchemaVersion>2.0</SchemaVersion> | ||
8 | <ProjectGuid>{F9E36CFA-A657-4DD4-BD17-BA3D91EB469F}</ProjectGuid> | ||
9 | <OutputType>Library</OutputType> | ||
10 | <AppDesignerFolder>Properties</AppDesignerFolder> | ||
11 | <RootNamespace>WebTest.WebService.Plugin.Runtime</RootNamespace> | ||
12 | <AssemblyName>WebTest.WebService.Plugin.Runtime</AssemblyName> | ||
13 | <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | ||
14 | <FileAlignment>512</FileAlignment> | ||
15 | <SccProjectName>SAK</SccProjectName> | ||
16 | <SccLocalPath>SAK</SccLocalPath> | ||
17 | <SccAuxPath>SAK</SccAuxPath> | ||
18 | <SccProvider>SAK</SccProvider> | ||
19 | <TargetFrameworkProfile /> | ||
20 | </PropertyGroup> | ||
21 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
22 | <DebugSymbols>true</DebugSymbols> | ||
23 | <DebugType>full</DebugType> | ||
24 | <Optimize>false</Optimize> | ||
25 | <OutputPath>bin\Debug\</OutputPath> | ||
26 | <DefineConstants>DEBUG;TRACE</DefineConstants> | ||
27 | <ErrorReport>prompt</ErrorReport> | ||
28 | <WarningLevel>4</WarningLevel> | ||
29 | <Prefer32Bit>false</Prefer32Bit> | ||
30 | </PropertyGroup> | ||
31 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
32 | <DebugType>pdbonly</DebugType> | ||
33 | <Optimize>true</Optimize> | ||
34 | <OutputPath>bin\Release\</OutputPath> | ||
35 | <DefineConstants>TRACE</DefineConstants> | ||
36 | <ErrorReport>prompt</ErrorReport> | ||
37 | <WarningLevel>4</WarningLevel> | ||
38 | <Prefer32Bit>false</Prefer32Bit> | ||
39 | </PropertyGroup> | ||
40 | <ItemGroup> | ||
41 | <Reference Include="Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | ||
42 | <Reference Include="System" /> | ||
43 | <Reference Include="System.Core" /> | ||
44 | <Reference Include="System.Runtime.Serialization" /> | ||
45 | <Reference Include="System.ServiceModel" /> | ||
46 | <Reference Include="System.Xml.Linq" /> | ||
47 | <Reference Include="System.Data.DataSetExtensions" /> | ||
48 | <Reference Include="Microsoft.CSharp" /> | ||
49 | <Reference Include="System.Data" /> | ||
50 | <Reference Include="System.Xml" /> | ||
51 | </ItemGroup> | ||
52 | <ItemGroup> | ||
53 | <Compile Include="JsonContentHandler.cs" /> | ||
54 | <Compile Include="ContentHandler.cs" /> | ||
55 | <Compile Include="ContentHandlerFactory.cs" /> | ||
56 | <Compile Include="DataBindingHelper.cs" /> | ||
57 | <Compile Include="Msbin1ContentHandler.cs" /> | ||
58 | <Compile Include="WebServicePlugin.cs" /> | ||
59 | <Compile Include="Properties\AssemblyInfo.cs" /> | ||
60 | <Compile Include="XPathExtractionRule.cs" /> | ||
61 | <Compile Include="XPathValidationRule.cs" /> | ||
62 | </ItemGroup> | ||
63 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||
64 | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | ||
65 | Other similar extension points exist, see Microsoft.Common.targets. | ||
66 | <Target Name="BeforeBuild"> | ||
67 | </Target> | ||
68 | <Target Name="AfterBuild"> | ||
69 | </Target> | ||
70 | --> | ||
71 | </Project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | //************************************************************************************************* | ||
2 | // XPathExtractionRule.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // This web test plugin extracts data from a Web Service response using XPath expression. | ||
6 | // The Web Service response can be plain XML or 'application/soap+msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) or JSON | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | using System; | ||
12 | using System.Collections.Generic; | ||
13 | using System.Linq; | ||
14 | using System.Text; | ||
15 | using System.ComponentModel; | ||
16 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
17 | using System.Xml.XPath; | ||
18 | using System.Xml; | ||
19 | using System.IO; | ||
20 | |||
21 | namespace WebTest.WebService.Plugin.Runtime | ||
22 | { | ||
23 | [DisplayName("XPathExtractionRule")] | ||
24 | [Description("Extracts a value using XPath expression")] | ||
25 | public class XPathExtractionRule : ExtractionRule | ||
26 | { | ||
27 | // The name of the desired input field | ||
28 | private string xPathValue; | ||
29 | [DisplayName("XPathToSearch")] | ||
30 | [Description("Extracts a value using XPath expression")] | ||
31 | public string XPathToSearch | ||
32 | { | ||
33 | get { return xPathValue; } | ||
34 | set { xPathValue = value; } | ||
35 | } | ||
36 | |||
37 | // To set a default value use:[DefaultValue(<value>)] | ||
38 | private int indexValue; | ||
39 | [Description("Indicates which occurrence of the string to extract. This is zero-based index.")] | ||
40 | public int Index | ||
41 | { | ||
42 | get { return indexValue; } | ||
43 | set { indexValue = value; } | ||
44 | } | ||
45 | |||
46 | private bool randomMatch; | ||
47 | [DisplayName("ExtractRandomMatch")] | ||
48 | [Description("If true, all matches are found and one of the matches is randomly returned.")] | ||
49 | public bool ExtractRandomMatch | ||
50 | { | ||
51 | get { return randomMatch; } | ||
52 | set { randomMatch = value; } | ||
53 | } | ||
54 | |||
55 | /// <summary> | ||
56 | /// The Extract method. The parameter e contains the Web test context. | ||
57 | /// </summary> | ||
58 | /// <param name="sender"></param> | ||
59 | /// <param name="e"></param> | ||
60 | public override void Extract(object sender, ExtractionEventArgs e) | ||
61 | { | ||
62 | try | ||
63 | { | ||
64 | ContentHandler contentHandler = ContentHandlerFactory.GetHandler(e.Response.ContentType); | ||
65 | if (contentHandler == null) | ||
66 | { | ||
67 | return; | ||
68 | } | ||
69 | |||
70 | if (contentHandler.IsBinary) | ||
71 | { | ||
72 | contentHandler.MessageBytes = e.Response.BodyBytes; | ||
73 | } | ||
74 | else | ||
75 | { | ||
76 | contentHandler.MessageString = e.Response.BodyString; | ||
77 | } | ||
78 | |||
79 | XPathNodeIterator iterator = contentHandler.EvaluateXPath(XPathToSearch); | ||
80 | |||
81 | List<string> values = new List<string>(); | ||
82 | |||
83 | int i = 0; | ||
84 | while (iterator.MoveNext()) | ||
85 | { | ||
86 | XPathNavigator nav2 = iterator.Current.Clone(); | ||
87 | |||
88 | string value; | ||
89 | if (nav2.NodeType.Equals(XPathNodeType.Element)) | ||
90 | { | ||
91 | value = nav2.InnerXml; | ||
92 | } | ||
93 | else | ||
94 | { | ||
95 | value = nav2.Value; | ||
96 | } | ||
97 | |||
98 | values.Add(value); | ||
99 | if (!ExtractRandomMatch && (i == Index)) | ||
100 | { | ||
101 | // add the extracted value to the Web test context | ||
102 | e.WebTest.Context.Add(this.ContextParameterName, value); | ||
103 | e.Success = true; | ||
104 | return; | ||
105 | } | ||
106 | i++; | ||
107 | } | ||
108 | |||
109 | if (ExtractRandomMatch && (values.Count > 0)) | ||
110 | { | ||
111 | Random random = new Random(); | ||
112 | e.WebTest.Context.Add(this.ContextParameterName, values[random.Next(values.Count)]); | ||
113 | e.Success = true; | ||
114 | return; | ||
115 | } | ||
116 | } | ||
117 | catch (Exception ex) | ||
118 | { | ||
119 | e.Message = ex.Message; | ||
120 | } | ||
121 | |||
122 | e.Success = false; | ||
123 | return; | ||
124 | } | ||
125 | } | ||
126 | } |
1 | //************************************************************************************************* | ||
2 | // XPathValidationRule.cs | ||
3 | // Owner: Mahipal Kante | ||
4 | // | ||
5 | // This web test plugin validates a Web Service response using XPath expression. | ||
6 | // The Web Service response can be plain XML or 'application/soap+msbin1' | ||
7 | // (binary - used by Silverlight application with WCF RIA) or JSON | ||
8 | // | ||
9 | // Copyright(c) Microsoft Corporation, 2010 | ||
10 | //************************************************************************************************* | ||
11 | using System; | ||
12 | using System.Collections.Generic; | ||
13 | using System.Linq; | ||
14 | using System.Text; | ||
15 | using System.ComponentModel; | ||
16 | using Microsoft.VisualStudio.TestTools.WebTesting; | ||
17 | using System.Xml.XPath; | ||
18 | using System.IO; | ||
19 | using System.Xml; | ||
20 | |||
21 | namespace WebTest.WebService.Plugin.Runtime | ||
22 | { | ||
23 | [DisplayName("XPathValidationRule")] | ||
24 | [Description("Validates response using XPath expression")] | ||
25 | public class XPathValidationRule : ValidationRule | ||
26 | { | ||
27 | // The name of the desired input field | ||
28 | private string xPathValue; | ||
29 | [DisplayName("XPathToSearch")] | ||
30 | [Description("XPath expression to evaluate")] | ||
31 | public string XPathToSearch | ||
32 | { | ||
33 | get { return xPathValue; } | ||
34 | set { xPathValue = value; } | ||
35 | } | ||
36 | |||
37 | private int indexValue = -1; | ||
38 | [Description("Indicates which occurrence of the XPath result to validate. This is a zero based index. -1 indicates try and match against all of them.")] | ||
39 | public int Index | ||
40 | { | ||
41 | get { return indexValue; } | ||
42 | set { indexValue = value; } | ||
43 | } | ||
44 | |||
45 | private string expectedValue = string.Empty; | ||
46 | [DisplayName("ExpectedValue")] | ||
47 | [Description("The Expected result of XPath evaluation")] | ||
48 | public string ExpectedValue | ||
49 | { | ||
50 | get { return expectedValue; } | ||
51 | set { expectedValue = value; } | ||
52 | } | ||
53 | |||
54 | private bool ignoreCase = true; | ||
55 | [DisplayName("IgnoreCase")] | ||
56 | [Description("Ignores case when comparing the result of XPath with the expected value")] | ||
57 | public bool IgnoreCase | ||
58 | { | ||
59 | get { return ignoreCase; } | ||
60 | set { ignoreCase = value; } | ||
61 | } | ||
62 | |||
63 | /// <summary> | ||
64 | /// The Validation method. The parameter e contains the Web test context. | ||
65 | /// </summary> | ||
66 | /// <param name="sender"></param> | ||
67 | /// <param name="e"></param> | ||
68 | public override void Validate(object sender, ValidationEventArgs e) | ||
69 | { | ||
70 | try | ||
71 | { | ||
72 | ContentHandler contentHandler = ContentHandlerFactory.GetHandler(e.Response.ContentType); | ||
73 | if (contentHandler == null) | ||
74 | { | ||
75 | return; | ||
76 | } | ||
77 | |||
78 | if (contentHandler.IsBinary) | ||
79 | { | ||
80 | contentHandler.MessageBytes = e.Response.BodyBytes; | ||
81 | } | ||
82 | else | ||
83 | { | ||
84 | contentHandler.MessageString = e.Response.BodyString; | ||
85 | } | ||
86 | |||
87 | XPathNodeIterator iterator = contentHandler.EvaluateXPath(XPathToSearch); | ||
88 | int i = 0; | ||
89 | while (iterator.MoveNext()) | ||
90 | { | ||
91 | XPathNavigator nav2 = iterator.Current.Clone(); | ||
92 | if ((i == -1) || (i == Index)) | ||
93 | { | ||
94 | string value; | ||
95 | if (nav2.NodeType.Equals(XPathNodeType.Element)) | ||
96 | { | ||
97 | value = nav2.InnerXml; | ||
98 | } | ||
99 | else | ||
100 | { | ||
101 | value = nav2.Value; | ||
102 | } | ||
103 | |||
104 | |||
105 | if (ignoreCase) | ||
106 | { | ||
107 | e.IsValid = ExpectedValue.Equals(value, StringComparison.OrdinalIgnoreCase); | ||
108 | } | ||
109 | else | ||
110 | { | ||
111 | e.IsValid = ExpectedValue.Equals(value, StringComparison.Ordinal); | ||
112 | } | ||
113 | |||
114 | if (i == Index || e.IsValid) | ||
115 | { | ||
116 | return; | ||
117 | } | ||
118 | } | ||
119 | i++; | ||
120 | } | ||
121 | } | ||
122 | catch (Exception ex) | ||
123 | { | ||
124 | e.Message = ex.Message; | ||
125 | } | ||
126 | |||
127 | e.IsValid = false; | ||
128 | return; | ||
129 | } | ||
130 | } | ||
131 | } |
WebTestWebServiceSetup/Product.wxs
0 → 100644
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> | ||
3 | |||
4 | <Product Id="{289E27D1-0F89-4F1A-A2C7-9584091B9950}" Name="Web Test Plugin for Web Service Messages - VS 2012" Language="1033" Version="3.0.0.0" Manufacturer="Microsoft IT" UpgradeCode="{BF388820-5266-41AF-BFFE-DC183C37D624}"> | ||
5 | <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> | ||
6 | <Media Id="1" Cabinet="WebServicePlugins1.cab" EmbedCab="yes" /> | ||
7 | |||
8 | <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> | ||
9 | |||
10 | <Feature Id="ProductFeature" Title="Web Test Plugin for Web Service Messages" Level="1"> | ||
11 | <ComponentRef Id="WebTestMessageEditor" /> | ||
12 | <ComponentRef Id="WebTestResultTab" /> | ||
13 | <ComponentRef Id="WebTestRuntime" /> | ||
14 | </Feature> | ||
15 | |||
16 | <Property Id="VS2012INSTALLFOLDER" Secure="yes"> | ||
17 | <RegistrySearch Id="VS2012InstallationFolderRegistrySearchId" Type="raw" | ||
18 | Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0" Name="InstallDir"></RegistrySearch> | ||
19 | </Property> | ||
20 | |||
21 | <Condition Message="Visual Studio 2012 not found."> | ||
22 | Installed OR VS2012INSTALLFOLDER | ||
23 | </Condition> | ||
24 | </Product> | ||
25 | |||
26 | <Fragment> | ||
27 | <Directory Id="TARGETDIR" Name="SourceDir"> | ||
28 | <Directory Id="VS2012INSTALLFOLDER"> | ||
29 | <Directory Id="PrivateAssemblies" Name="PrivateAssemblies"> | ||
30 | <Directory Id="WebTestPlugins" Name="WebTestPlugins"> | ||
31 | <Component Id="WebTestMessageEditor" Guid="{17E95CD2-6B83-46C9-AEE5-019853FF62EC}"> | ||
32 | <File Source="$(var.WebServicePluginForWebTestMessageEditor.TargetPath)" Vital="yes" DiskId="1"/> | ||
33 | </Component> | ||
34 | </Directory> | ||
35 | </Directory> | ||
36 | <Directory Id="PublicAssemblies" Name="PublicAssemblies"> | ||
37 | <Component Id="WebTestRuntime" Guid="{854C9BA4-3E3E-4D0A-9DB1-DFF8140E834C}"> | ||
38 | <File Source="$(var.WebServicePluginForWebTestRuntime.TargetPath)" Vital="yes" DiskId="1"/> | ||
39 | </Component> | ||
40 | </Directory> | ||
41 | </Directory> | ||
42 | |||
43 | <Directory Id="AppDataFolder"> | ||
44 | <Directory Id="MSAppDataDir" Name="Microsoft"> | ||
45 | <Directory Id="VSAppDataDir" Name="VisualStudio"> | ||
46 | <Directory Id="VSAppDataVersionDir" Name="11.0"> | ||
47 | <Directory Id="VSAddins" Name="Addins"> | ||
48 | <Component Id="WebTestResultTab" Guid="{27569640-6946-4E4F-8E55-109E99A79DB9}"> | ||
49 | <RegistryValue KeyPath="yes" Root="HKCU" Key="SOFTWARE\Microsoft\WebServicePlugin" Name="Installed" Type="integer" Value="1" Action="write" /> | ||
50 | <File Source="$(var.WebServicePluginForWebTestResultTab.TargetPath)" Vital="yes" DiskId="1"/> | ||
51 | <File Source="$(var.WebServicePluginForWebTestResultTab.ProjectDir)WebServicePluginForWebTestResultTab.Addin" Vital="yes" DiskId="1"/> | ||
52 | <RemoveFolder Id="RemoveMSAppDataDir" Directory="MSAppDataDir" On="uninstall"/> | ||
53 | <RemoveFolder Id="RemoveVSAppDataDir" Directory="VSAppDataDir" On="uninstall"/> | ||
54 | <RemoveFolder Id="RemoveVSAppDataVersionDir" Directory="VSAppDataVersionDir" On="uninstall"/> | ||
55 | <RemoveFolder Id="RemoveVSAddins" Directory="VSAddins" On="uninstall"/> | ||
56 | </Component> | ||
57 | </Directory> | ||
58 | </Directory> | ||
59 | </Directory> | ||
60 | </Directory> | ||
61 | </Directory> | ||
62 | </Directory> | ||
63 | </Fragment> | ||
64 | </Wix> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
WebTestWebServiceSetup/ReadMe.txt
0 → 100644
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
3 | <PropertyGroup> | ||
4 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
5 | <Platform Condition=" '$(Platform)' == '' ">x86</Platform> | ||
6 | <ProductVersion>3.6</ProductVersion> | ||
7 | <ProjectGuid>73accda5-47c1-40c9-b63e-aff657e046e4</ProjectGuid> | ||
8 | <SchemaVersion>2.0</SchemaVersion> | ||
9 | <OutputName>Setup</OutputName> | ||
10 | <OutputType>Package</OutputType> | ||
11 | <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> | ||
12 | <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> | ||
13 | <Name>WebServicePluginsSetup</Name> | ||
14 | <SccProjectName>SAK</SccProjectName> | ||
15 | <SccLocalPath>SAK</SccLocalPath> | ||
16 | <SccAuxPath>SAK</SccAuxPath> | ||
17 | <SccProvider>SAK</SccProvider> | ||
18 | </PropertyGroup> | ||
19 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> | ||
20 | <OutputPath>bin\$(Configuration)\</OutputPath> | ||
21 | <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> | ||
22 | <DefineConstants>Debug</DefineConstants> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> | ||
25 | <OutputPath>bin\$(Configuration)\</OutputPath> | ||
26 | <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> | ||
27 | </PropertyGroup> | ||
28 | <ItemGroup> | ||
29 | <Compile Include="Product.wxs" /> | ||
30 | </ItemGroup> | ||
31 | <ItemGroup> | ||
32 | <ProjectReference Include="..\WebTestWebServiceMessageEditor\WebServicePluginForWebTestMessageEditor.csproj"> | ||
33 | <Name>WebServicePluginForWebTestMessageEditor</Name> | ||
34 | <Project>{23707a49-589b-4a36-bdaa-2896e647d07d}</Project> | ||
35 | <Private>True</Private> | ||
36 | <DoNotHarvest>True</DoNotHarvest> | ||
37 | <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups> | ||
38 | <RefTargetDir>INSTALLFOLDER</RefTargetDir> | ||
39 | </ProjectReference> | ||
40 | <ProjectReference Include="..\WebTestWebServiceResultAddin\WebServicePluginForWebTestResultTab.csproj"> | ||
41 | <Name>WebServicePluginForWebTestResultTab</Name> | ||
42 | <Project>{48b3509e-1fd8-4875-8fc6-137647eb83aa}</Project> | ||
43 | <Private>True</Private> | ||
44 | <DoNotHarvest>True</DoNotHarvest> | ||
45 | <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups> | ||
46 | <RefTargetDir>INSTALLFOLDER</RefTargetDir> | ||
47 | </ProjectReference> | ||
48 | <ProjectReference Include="..\WebTestWebServiceRuntime\WebServicePluginForWebTestRuntime.csproj"> | ||
49 | <Name>WebServicePluginForWebTestRuntime</Name> | ||
50 | <Project>{f9e36cfa-a657-4dd4-bd17-ba3d91eb469f}</Project> | ||
51 | <Private>True</Private> | ||
52 | <DoNotHarvest>True</DoNotHarvest> | ||
53 | <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups> | ||
54 | <RefTargetDir>INSTALLFOLDER</RefTargetDir> | ||
55 | </ProjectReference> | ||
56 | </ItemGroup> | ||
57 | <Import Project="$(WixTargetsPath)" /> | ||
58 | <!-- | ||
59 | To modify your build process, add your task inside one of the targets below and uncomment it. | ||
60 | Other similar extension points exist, see Wix.targets. | ||
61 | <Target Name="BeforeBuild"> | ||
62 | </Target> | ||
63 | <Target Name="AfterBuild"> | ||
64 | </Target> | ||
65 | --> | ||
66 | </Project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or sign in to post a comment