1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
7
namespace ICSharpCode.XamlBinding.Tests
10
public class GetMarkupExtensionAtPositionTests
13
public void EmptyTest()
15
string markup = "{x:Type}";
17
MarkupExtensionInfo info = new MarkupExtensionInfo() {
18
ExtensionType = "x:Type",
23
RunParseTest(markup, info);
24
RunDetectionTest(markup, 5, info);
28
public void SimpleTest()
30
string markup = "{x:Type Button}";
32
MarkupExtensionInfo info = new MarkupExtensionInfo() {
33
ExtensionType = "x:Type",
38
info.PositionalArguments.Add(new AttributeValue("Button") { StartOffset = 8 });
40
RunParseTest(markup, info);
41
RunDetectionTest(markup, 10, info);
45
public void SimplePosArgTest()
47
string markup = "{x:Type Button, Button2}";
49
MarkupExtensionInfo info = new MarkupExtensionInfo() {
50
ExtensionType = "x:Type",
55
info.PositionalArguments.Add(new AttributeValue("Button") { StartOffset = 8 });
56
info.PositionalArguments.Add(new AttributeValue("Button2") { StartOffset = 16 });
58
RunParseTest(markup, info);
59
RunDetectionTest(markup, 23, info);
63
public void SimpleNamedArgTest()
65
string markup = "{x:Type Type=Button}";
67
MarkupExtensionInfo info = new MarkupExtensionInfo() {
68
ExtensionType = "x:Type",
73
info.NamedArguments.Add("Type", new AttributeValue("Button") { StartOffset = 13 });
75
RunParseTest(markup, info);
76
RunDetectionTest(markup, 0, info);
80
public void SimpleNamedArgTest1()
82
string markup = "{x:Type Type=Button, a=b}";
84
MarkupExtensionInfo info = new MarkupExtensionInfo() {
85
ExtensionType = "x:Type",
90
info.NamedArguments.Add("Type", new AttributeValue("Button") { StartOffset = 13 });
91
info.NamedArguments.Add("a", new AttributeValue("b") { StartOffset = 23 });
93
RunParseTest(markup, info);
94
RunDetectionTest(markup, 20, info);
98
public void PosAndNamedArgTest()
100
string markup = "{x:Type xy, Type=Button, a=b}";
102
MarkupExtensionInfo info = new MarkupExtensionInfo() {
103
ExtensionType = "x:Type",
108
info.PositionalArguments.Add(new AttributeValue("xy") { StartOffset = 8 });
110
info.NamedArguments.Add("Type", new AttributeValue("Button") { StartOffset = 17 });
111
info.NamedArguments.Add("a", new AttributeValue("b") { StartOffset = 27 });
113
RunParseTest(markup, info);
114
RunDetectionTest(markup, 29, info);
118
public void MissingColonTest()
120
string markup = "{x:Type xy Type=Button, a=b}";
122
MarkupExtensionInfo info = new MarkupExtensionInfo() {
123
ExtensionType = "x:Type",
128
info.PositionalArguments.Add(new AttributeValue("xy") { StartOffset = 8 });
130
info.NamedArguments.Add("Type", new AttributeValue("Button") { StartOffset = 16 });
131
info.NamedArguments.Add("a", new AttributeValue("b") { StartOffset = 26 });
133
RunParseTest(markup, info);
137
public void MissingColonTest2()
139
string markup = "{x:Type xy Type=Button a=b}";
141
MarkupExtensionInfo info = new MarkupExtensionInfo() {
142
ExtensionType = "x:Type",
147
info.PositionalArguments.Add(new AttributeValue("xy") { StartOffset = 8 });
149
info.NamedArguments.Add("Type", new AttributeValue("Button") { StartOffset = 16 });
150
info.NamedArguments.Add("a", new AttributeValue("b") { StartOffset = 25 });
152
RunParseTest(markup, info);
156
public void NestedTest1()
158
string markup = "{bla {bla2}}";
160
MarkupExtensionInfo info = new MarkupExtensionInfo() {
161
ExtensionType = "bla",
166
info.PositionalArguments.Add(new AttributeValue(new MarkupExtensionInfo() { ExtensionType = "bla2", StartOffset = 5, EndOffset = 11 }) { StartOffset = 5 });
168
RunParseTest(markup, info);
172
public void NestedTest2()
174
string markup = "{bla a, {bla2}}";
176
MarkupExtensionInfo info = new MarkupExtensionInfo() {
177
ExtensionType = "bla",
182
info.PositionalArguments.Add(new AttributeValue("a") { StartOffset = 5 });
183
info.PositionalArguments.Add(
185
new MarkupExtensionInfo() {
186
ExtensionType = "bla2",
195
RunParseTest(markup, info);
199
public void NestedTest3()
201
string markup = "{bla a, {bla2}, b, {bla3 {a}, b}}";
203
MarkupExtensionInfo info = new MarkupExtensionInfo() {
204
ExtensionType = "bla",
209
info.PositionalArguments.Add(new AttributeValue("a") { StartOffset = 5 });
210
info.PositionalArguments.Add(
212
new MarkupExtensionInfo() {
213
ExtensionType = "bla2",
221
info.PositionalArguments.Add(new AttributeValue("b") { StartOffset = 16 });
223
var nested2 = new MarkupExtensionInfo() {
224
ExtensionType = "bla3",
229
nested2.PositionalArguments.Add(
231
new MarkupExtensionInfo() {
241
nested2.PositionalArguments.Add(new AttributeValue("b") { StartOffset = 30 });
243
info.PositionalArguments.Add(
244
new AttributeValue(nested2) {
249
RunParseTest(markup, info);
253
public void NestedTest4()
255
string markup = "{bla a, x={bla3 {a}, b={c}, d=e}, y=z}";
257
MarkupExtensionInfo info = new MarkupExtensionInfo() {
258
ExtensionType = "bla",
263
info.PositionalArguments.Add(new AttributeValue("a") { StartOffset = 5 });
265
//x={bla3 {a}, b={c}, d=e}
267
MarkupExtensionInfo inner = new MarkupExtensionInfo() {
268
ExtensionType = "bla3",
273
MarkupExtensionInfo smallInner = new MarkupExtensionInfo() {
279
inner.PositionalArguments.Add(new AttributeValue(smallInner) { StartOffset = 16 });
281
MarkupExtensionInfo smallInner2 = new MarkupExtensionInfo() {
287
inner.NamedArguments.Add("b", new AttributeValue(smallInner2) { StartOffset = 23 });
289
inner.NamedArguments.Add("d", new AttributeValue("e") { StartOffset = 30 });
291
info.NamedArguments.Add("x", new AttributeValue(inner) { StartOffset = 10 });
293
info.NamedArguments.Add("y", new AttributeValue("z") { StartOffset = 36 });
295
RunParseTest(markup, info);
296
RunDetectionTest(markup, 9, info);
297
RunDetectionTest(markup, 11, inner);
298
RunDetectionTest(markup, 17, smallInner);
299
RunDetectionTest(markup, 19, inner);
300
RunDetectionTest(markup, 32, info);
303
static void RunDetectionTest(string markup, int offset, MarkupExtensionInfo expectedResult)
305
MarkupExtensionInfo data = MarkupExtensionParser.Parse(markup);
306
MarkupExtensionInfo result = Utils.GetMarkupExtensionAtPosition(data, offset);
308
Assert.AreEqual(expectedResult, result);
311
static void RunParseTest(string markup, MarkupExtensionInfo expectedResult)
313
MarkupExtensionInfo data = MarkupExtensionParser.Parse(markup);
315
Assert.AreEqual(expectedResult, data);