-
-
Notifications
You must be signed in to change notification settings - Fork 802
/
ParamArrayMatcher.cs
54 lines (44 loc) · 1.31 KB
/
ParamArrayMatcher.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
// Copyright (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD.
// All rights reserved. Licensed under the BSD 3-Clause License; see License.txt.
using System;
using System.Diagnostics;
namespace Moq.Matchers
{
internal class ParamArrayMatcher : IMatcher
{
private IMatcher[] matchers;
public ParamArrayMatcher(IMatcher[] matchers)
{
Debug.Assert(matchers != null);
this.matchers = matchers;
}
public bool Matches(object argument, Type parameterType)
{
Array values = argument as Array;
if (values == null || this.matchers.Length != values.Length)
{
return false;
}
var elementType = parameterType.GetElementType();
for (int index = 0; index < values.Length; index++)
{
if (!this.matchers[index].Matches(values.GetValue(index), elementType))
{
return false;
}
}
return true;
}
public void SetupEvaluatedSuccessfully(object argument, Type parameterType)
{
Debug.Assert(this.Matches(argument, parameterType));
Debug.Assert(argument is Array array && array.Length == this.matchers.Length);
var values = (Array)argument;
var elementType = parameterType.GetElementType();
for (int i = 0, n = this.matchers.Length; i < n; ++i)
{
this.matchers[i].SetupEvaluatedSuccessfully(values.GetValue(i), elementType);
}
}
}
}