This repository has been archived by the owner on May 1, 2024. It is now read-only.
/
SelectorTests.cs
110 lines (106 loc) · 5.46 KB
/
SelectorTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NUnit.Framework;
namespace Xamarin.Forms.StyleSheets.UnitTests
{
[TestFixture]
public class SelectorTests
{
IStyleSelectable Page;
IStyleSelectable StackLayout => Page.Children.First();
IStyleSelectable Label0 => StackLayout.Children.Skip(0).First();
IStyleSelectable Label1 => StackLayout.Children.Skip(1).First();
IStyleSelectable Label2 => ContentView0.Children.First();
IStyleSelectable Label3 => StackLayout.Children.Skip(3).First();
IStyleSelectable Label4 => StackLayout.Children.Skip(4).First();
IStyleSelectable ContentView0 => StackLayout.Children.Skip(2).First();
[SetUp]
public void SetUp()
{
Page = new MockStylable {
Name = "Page",
Children = new List<IStyleSelectable> {
new MockStylable {
Name = "StackLayout",
Children = new List<IStyleSelectable> {
new MockStylable {Name = "Label", Classes = new[]{"test"}}, //Label0
new MockStylable {Name = "Label"}, //Label1
new MockStylable { //ContentView0
Name = "ContentView",
Classes = new[]{"test"},
Children = new List<IStyleSelectable> {
new MockStylable {Name = "Label", Classes = new[]{"test"}}, //Label2
}
},
new MockStylable {Name = "Label", Id="foo"}, //Label3
new MockStylable {Name = "Label"}, //Label4
}
}
}
};
SetParents(Page);
}
void SetParents(IStyleSelectable stylable, IStyleSelectable parent = null)
{
((MockStylable)stylable).Parent = parent;
if (stylable.Children == null)
return;
foreach (var s in stylable.Children)
SetParents(s, stylable);
}
[TestCase("label", true, true, true, true, true, false)]
[TestCase(" label", true, true, true, true, true, false)]
[TestCase("label ", true, true, true, true, true, false)]
[TestCase(".test", true, false, true, false, false, true)]
[TestCase("label.test", true, false, true, false, false, false)]
[TestCase("stacklayout>label.test", true, false, false, false, false, false)]
[TestCase("stacklayout >label.test", true, false, false, false, false, false)]
[TestCase("stacklayout> label.test", true, false, false, false, false, false)]
[TestCase("stacklayout label.test", true, false, true, false, false, false)]
[TestCase("stacklayout label.test", true, false, true, false, false, false)]
[TestCase("stacklayout .test", true, false, true, false, false, true)]
[TestCase("*", true, true, true, true, true, true)]
[TestCase("#foo", false, false, false, true, false, false)]
[TestCase("label#foo", false, false, false, true, false, false)]
[TestCase("div#foo", false, false, false, false, false, false)]
[TestCase(".test,#foo", true, false, true, true, false, true)]
[TestCase(".test ,#foo", true, false, true, true, false, true)]
[TestCase(".test, #foo", true, false, true, true, false, true)]
[TestCase("#foo,.test", true, false, true, true, false, true)]
[TestCase("#foo ,.test", true, false, true, true, false, true)]
[TestCase("#foo, .test", true, false, true, true, false, true)]
[TestCase("contentview+label", false, false, false, true, false, false)]
[TestCase("contentview +label", false, false, false, true, false, false)]
[TestCase("contentview+ label", false, false, false, true, false, false)]
[TestCase("contentview~label", false, false, false, true, true, false)]
[TestCase("contentview ~label", false, false, false, true, true, false)]
[TestCase("contentview\r\n~label", false, false, false, true, true, false)]
[TestCase("contentview~ label", false, false, false, true, true, false)]
[TestCase("label~*", false, true, false, true, true, true)]
[TestCase("label~.test", false, false, false, false, false, true)]
[TestCase("label~#foo", false, false, false, true, false, false)]
[TestCase("page contentview stacklayout label", false, false, false, false, false, false)]
[TestCase("page stacklayout contentview label", false, false, true, false, false, false)]
[TestCase("page contentview label", false, false, true, false, false, false)]
[TestCase("page contentview>label", false, false, true, false, false, false)]
[TestCase("page>stacklayout contentview label", false, false, true, false, false, false)]
[TestCase("page stacklayout>contentview label", false, false, true, false, false, false)]
[TestCase("page stacklayout contentview>label", false, false, true, false, false, false)]
[TestCase("page>stacklayout>contentview label", false, false, true, false, false, false)]
[TestCase("page>stack/* comment * */layout>contentview label", false, false, true, false, false, false)]
[TestCase("page>stacklayout contentview>label", false, false, true, false, false, false)]
[TestCase("page stacklayout>contentview>label", false, false, true, false, false, false)]
[TestCase("page>stacklayout>contentview>label", false, false, true, false, false, false)]
public void TestCase(string selectorString, bool label0match, bool label1match, bool label2match, bool label3match, bool label4match, bool content0match)
{
var selector = Selector.Parse(new CssReader(new StringReader(selectorString)));
Assert.AreEqual(label0match, selector.Matches(Label0));
Assert.AreEqual(label1match, selector.Matches(Label1));
Assert.AreEqual(label2match, selector.Matches(Label2));
Assert.AreEqual(label3match, selector.Matches(Label3));
Assert.AreEqual(label4match, selector.Matches(Label4));
Assert.AreEqual(content0match, selector.Matches(ContentView0));
}
}
}