forked from fluentassertions/fluentassertions
/
MemberPath.cs
43 lines (35 loc) · 1.2 KB
/
MemberPath.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
using System;
using System.Collections.Generic;
using System.Linq;
namespace FluentAssertions.Equivalency.Selection
{
/// <summary>
/// Encapsulates a dotted candidate to a (nested) member of a type.
/// </summary>
internal class MemberPath
{
private readonly List<string> segments = new List<string>();
public MemberPath(string dottedPath)
{
segments.AddRange(Segmentize(dottedPath));
}
public bool IsParentOrChildOf(string candidate)
{
return IsParent(candidate) || IsChild(candidate);
}
private bool IsChild(string candidate)
{
string[] candidateSegments = Segmentize(candidate);
return candidateSegments.Take(segments.Count).SequenceEqual(segments);
}
private bool IsParent(string candidate)
{
string[] candidateSegments = Segmentize(candidate);
return candidateSegments.SequenceEqual(segments.Take(candidateSegments.Length));
}
private static string[] Segmentize(string dottedPath)
{
return dottedPath.Split(new[] { '.', '[', ']' }, StringSplitOptions.RemoveEmptyEntries);
}
}
}