Skip to content

Commit 97336de

Browse files
committed
More tests.
1 parent 16c0cd0 commit 97336de

2 files changed

Lines changed: 35 additions & 26 deletions

File tree

AspNetCoreAnalyzers.Tests/Helpers/UrlTemplateTests.cs

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,14 @@ public async Task<IActionResult> GetOrder([FromRoute]int id)
6565
Assert.AreEqual("id", parameter.Name.ToString());
6666
}
6767

68-
[TestCase("orders/{id?}", new[] { "orders", "{id?}" }, new[] { "?" })]
69-
[TestCase("orders/{id:min(1)}", new[] { "orders", "{id:min(1)}" }, new[] { "min(1)" })]
70-
[TestCase("orders/{id:int:min(1):max(2)}", new[] { "orders", "{id:int:min(1):max(2)}" }, new[] { "int", "min(1)", "max(2)" })]
71-
[TestCase("orders/{id:max(2)}", new[] { "orders", "{id:max(2)}" }, new[] { "max(2)" })]
72-
[TestCase("orders/{id:int:max(2)}", new[] { "orders", "{id:int:max(2)}" }, new[] { "int", "max(2)" })]
73-
[TestCase("orders/{id:range(1,23)}", new[] { "orders", "{id:range(1,23)}" }, new[] { "range(1,23)" })]
68+
[TestCase("\"orders/{id}\"", new[] { "orders", "{id}" }, new string[0])]
69+
[TestCase("@\"orders/{id}\"", new[] { "orders", "{id}" }, new string[0])]
70+
[TestCase("\"orders/{id?}\"", new[] { "orders", "{id?}" }, new[] { "?" })]
71+
[TestCase("\"orders/{id:min(1)}\"", new[] { "orders", "{id:min(1)}" }, new[] { "min(1)" })]
72+
[TestCase("\"orders/{id:int:min(1):max(2)}\"", new[] { "orders", "{id:int:min(1):max(2)}" }, new[] { "int", "min(1)", "max(2)" })]
73+
[TestCase("\"orders/{id:max(2)}\"", new[] { "orders", "{id:max(2)}" }, new[] { "max(2)" })]
74+
[TestCase("\"orders/{id:int:max(2)}\"", new[] { "orders", "{id:int:max(2)}" }, new[] { "int", "max(2)" })]
75+
[TestCase("\"orders/{id:range(1,23)}\"", new[] { "orders", "{id:range(1,23)}" }, new[] { "range(1,23)" })]
7476
public void TryParseWhenIntParameter(string text, string[] segments, string[] constraints)
7577
{
7678
var syntaxTree = CSharpSyntaxTree.ParseText(@"
@@ -87,7 +89,7 @@ public async Task<IActionResult> GetOrder([FromRoute]int id)
8789
{
8890
}
8991
}
90-
}".AssertReplace("orders/{id}", text));
92+
}".AssertReplace("\"orders/{id}\"", text));
9193
var literal = syntaxTree.FindLiteralExpression(text);
9294
Assert.AreEqual(true, UrlTemplate.TryParse(literal, out var template));
9395
CollectionAssert.AreEqual(segments, template.Path.Select(x => x.Span.ToString()));
@@ -99,19 +101,21 @@ public async Task<IActionResult> GetOrder([FromRoute]int id)
99101
CollectionAssert.AreEqual(constraints, parameter.Constraints.Select(x => x.Span.ToString()));
100102
}
101103

102-
[TestCase("orders/{id}", new[] { "orders", "{id}" }, new string[0])]
103-
[TestCase("orders/{id?}", new[] { "orders", "{id?}" }, new[] { "?" })]
104-
[TestCase("orders/{id:alpha}", new[] { "orders", "{id:alpha}" }, new[] { "alpha" })]
105-
[TestCase("orders/{id:ALPHA}", new[] { "orders", "{id:ALPHA}" }, new[] { "ALPHA" })]
106-
[TestCase("orders/{id:alpha:minlength(1)}", new[] { "orders", "{id:alpha:minlength(1)}" }, new[] { "alpha", "minlength(1)" })]
107-
[TestCase("orders/{id:minlength(1)}", new[] { "orders", "{id:minlength(1)}" }, new[] { "minlength(1)" })]
108-
[TestCase("orders/{id:maxlength(1)}", new[] { "orders", "{id:maxlength(1)}" }, new[] { "maxlength(1)" })]
109-
[TestCase("orders/{id:length(1)}", new[] { "orders", "{id:length(1)}" }, new[] { "length(1)" })]
110-
[TestCase("orders/{id:length(1,2)}", new[] { "orders", "{id:length(1,2)}" }, new[] { "length(1,2)" })]
111-
[TestCase("orders/{id:regex(^\\\\d{{3}}-\\\\d{{2}}-\\\\d{4}$)}", new[] { "orders", "{id:regex(^\\d{{3}}-\\d{{2}}-\\d{4}$)}" }, new[] { "regex(^\\d{{3}}-\\d{{2}}-\\d{4}$)" })]
112-
[TestCase("orders/{id:regex(a/b)}", new[] { "orders", "{id:regex(a/b)}" }, new[] { "regex(a/b)" })]
113-
[TestCase("orders/{id:regex(a{{0,1}})}", new[] { "orders", "{id:regex(a{{0,1}})}" }, new[] { "regex(a{{0,1}})" })]
114-
[TestCase("orders/{id:minlength(1):regex(a{{0,1}})}", new[] { "orders", "{id:minlength(1):regex(a{{0,1}})}" }, new[] { "minlength(1)", "regex(a{{0,1}})" })]
104+
[TestCase("\"orders/{id}\"", new[] { "orders", "{id}" }, new string[0])]
105+
[TestCase("\"orders/{id?}\"", new[] { "orders", "{id?}" }, new[] { "?" })]
106+
[TestCase("\"orders/{id:alpha}\"", new[] { "orders", "{id:alpha}" }, new[] { "alpha" })]
107+
[TestCase("\"orders/{id:ALPHA}\"", new[] { "orders", "{id:ALPHA}" }, new[] { "ALPHA" })]
108+
[TestCase("\"orders/{id:alpha:minlength(1)}\"", new[] { "orders", "{id:alpha:minlength(1)}" }, new[] { "alpha", "minlength(1)" })]
109+
[TestCase("\"orders/{id:minlength(1)}\"", new[] { "orders", "{id:minlength(1)}" }, new[] { "minlength(1)" })]
110+
[TestCase("\"orders/{id:maxlength(1)}\"", new[] { "orders", "{id:maxlength(1)}" }, new[] { "maxlength(1)" })]
111+
[TestCase("\"orders/{id:length(1)}\"", new[] { "orders", "{id:length(1)}" }, new[] { "length(1)" })]
112+
[TestCase("\"orders/{id:length(1,2)}\"", new[] { "orders", "{id:length(1,2)}" }, new[] { "length(1,2)" })]
113+
[TestCase("\"orders/{id:regex(^\\\\d$)}\"", new[] { "orders", "{id:regex(^\\d$)}" }, new[] { "regex(^\\d$)" })]
114+
[TestCase("@\"orders/{id:regex(^\\d$)}\"", new[] { "orders", "{id:regex(^\\d$)}" }, new[] { "regex(^\\d$)" })]
115+
[TestCase("\"orders/{id:regex(^\\\\d{{3}}-\\\\d{{2}}-\\\\d{4}$)}\"", new[] { "orders", "{id:regex(^\\d{{3}}-\\d{{2}}-\\d{4}$)}" }, new[] { "regex(^\\d{{3}}-\\d{{2}}-\\d{4}$)" })]
116+
[TestCase("\"orders/{id:regex(a/b)}\"", new[] { "orders", "{id:regex(a/b)}" }, new[] { "regex(a/b)" })]
117+
[TestCase("\"orders/{id:regex(a{{0,1}})}\"", new[] { "orders", "{id:regex(a{{0,1}})}" }, new[] { "regex(a{{0,1}})" })]
118+
[TestCase("\"orders/{id:minlength(1):regex(a{{0,1}})}\"", new[] { "orders", "{id:minlength(1):regex(a{{0,1}})}" }, new[] { "minlength(1)", "regex(a{{0,1}})" })]
115119
public void TryParseWhenStringParameter(string text, string[] segments, string[] constraints)
116120
{
117121
var syntaxTree = CSharpSyntaxTree.ParseText(@"
@@ -128,7 +132,7 @@ public async Task<IActionResult> GetOrder(string id)
128132
{
129133
}
130134
}
131-
}".AssertReplace("orders/{id}", text));
135+
}".AssertReplace("\"orders/{id}\"", text));
132136
var literal = syntaxTree.FindLiteralExpression(text);
133137
Assert.AreEqual(true, UrlTemplate.TryParse(literal, out var template));
134138
CollectionAssert.AreEqual(segments, template.Path.Select(x => x.Span.ToString()));
@@ -137,8 +141,7 @@ public async Task<IActionResult> GetOrder(string id)
137141
var parameter = template.Path.Single(x => x.Parameter.HasValue)
138142
.Parameter.Value;
139143
Assert.AreEqual("id", parameter.Name.ToString());
140-
CollectionAssert.AreEqual(constraints, parameter.Constraints.Select(x => x.Span.ToString())
141-
.ToArray());
144+
CollectionAssert.AreEqual(constraints, parameter.Constraints.Select(x => x.Span.ToString()));
142145
}
143146

144147
[TestCase("orders/{id:}", new[] { "orders", "{id:}" }, new[] { "" })]

ValidCode/Constraints/RegexController.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,28 @@ namespace ValidCode.Constraints
55
[ApiController]
66
public class RegexController : Controller
77
{
8-
[HttpGet("string1/{value:regex(a{{0,1}})}")]
8+
[HttpGet("get1/{value:regex(a{{0,1}})}")]
99
public IActionResult Get1(string value)
1010
{
1111
return this.Ok(value);
1212
}
1313

14-
[HttpGet("string2/{value:regex(\\\\d+)}")]
14+
[HttpGet("get2/{value:regex(\\\\d+)}")]
1515
public IActionResult Get2(string value)
1616
{
1717
return this.Ok(value);
1818
}
1919

20-
[HttpGet("string3/{value:regex(^\\\\d{{3}}-\\\\d{{2}}-\\\\d{{4}}$)}")]
20+
[HttpGet(@"get3/{value:regex(\\d+)}")]
2121
public IActionResult Get3(string value)
2222
{
2323
return this.Ok(value);
2424
}
25+
26+
[HttpGet("get4/{value:regex(^\\\\d{{3}}-\\\\d{{2}}-\\\\d{{4}}$)}")]
27+
public IActionResult Get4(string value)
28+
{
29+
return this.Ok(value);
30+
}
2531
}
2632
}

0 commit comments

Comments
 (0)