How to use CallPatternCreator class of Telerik.JustMock.Core package

Best JustMockLite code snippet using Telerik.JustMock.Core.CallPatternCreator

MocksRepository.cs

Source:MocksRepository.cs Github

copy

Full Screen

...641 using (this.sharedContext.StartArrange())642 {643 result.Repository = this;644 result.ArrangementExpression = ExpressionUtil.ConvertMockExpressionToString(expression);645 result.CallPattern = CallPatternCreator.FromExpression(this, expression);646 AddArrange(result);647 }648#if !PORTABLE649 var createInstanceLambda = ActivatorCreateInstanceTBehavior.TryCreateArrangementExpression(result.CallPattern.Method);650 if (createInstanceLambda != null)651 {652 var createInstanceMethodMock = Arrange(createInstanceLambda, methodMockFactory);653 ActivatorCreateInstanceTBehavior.Attach(result, createInstanceMethodMock);654 }655#endif656 return result;657 }658 /// <summary>659 /// Since we are not able to record deffered execution, check whether mock is about to present660 /// IQueryable<> or IEnumerable<>. If it so, then throw an exception to prompt the user to use661 /// Mock.Arrange overloads with expressions.662 /// See also https://stackoverflow.com/questions/3894490/linq-what-is-the-quickest-way-to-find-out-deferred-execution-or-not663 /// </summary>664 /// <typeparam name="TMethodMock">Mock return type</typeparam>665 /// <param name="methodMockFactory">Mock factory</param>666 private void CheckDefferedExecutionTypes<TMethodMock>(Func<TMethodMock> methodMockFactory)667 {668 var mockFactoryType = methodMockFactory.GetType().GetGenericArguments().FirstOrDefault();669 if (mockFactoryType.IsGenericType && mockFactoryType.GetGenericTypeDefinition() == typeof(FuncExpectation<>))670 {671 var mockFactoryGenericArguments = mockFactoryType.GetGenericArguments();672 if (mockFactoryGenericArguments673 .Where(a => a.IsGenericType)674 .Where(a => a.GetGenericTypeDefinition() == typeof(IQueryable<>)675 || a.GetGenericTypeDefinition() == typeof(IEnumerable<>))676 .Any())677 {678 throw new MockException("Cannot arrange action with potential deffered execution, use Mock.Arrange with expressions instead.");679 }680 }681 }682 [ArrangeMethod]683 internal TMethodMock Arrange<TMethodMock>(Action memberAction, Func<TMethodMock> methodMockFactory)684 where TMethodMock : IMethodMock685 {686 using (this.sharedContext.StartArrange())687 {688 var result = methodMockFactory();689 CheckDefferedExecutionTypes(methodMockFactory);690 result.Repository = this;691 result.CallPattern = CallPatternCreator.FromAction(this, memberAction);692 AddArrange(result);693 return result;694 }695 }696 [ArrangeMethod]697 internal TMethodMock Arrange<TMethodMock>(object instance, MethodBase method, object[] arguments, Func<TMethodMock> methodMockFactory)698 where TMethodMock : IMethodMock699 {700 using (this.sharedContext.StartArrange())701 {702 var result = methodMockFactory();703 result.Repository = this;704 result.CallPattern = CallPatternCreator.FromMethodBase(this, instance, method, arguments);705 AddArrange(result);706 return result;707 }708 }709 [ArrangeMethod]710 internal TMethodMock Arrange<TMethodMock>(CallPattern callPattern, Func<TMethodMock> methodMockFactory)711 where TMethodMock : IMethodMock712 {713 using (this.sharedContext.StartArrange())714 {715 var result = methodMockFactory();716 result.Repository = this;717 result.CallPattern = callPattern;718 AddArrange(result);719 return result;720 }721 }722 private void AssertBehaviorsForMocks(IEnumerable<IMethodMock> mocks, bool ignoreMethodMockOccurrences)723 {724 foreach (var methodMock in mocks)725 {726 bool occurrenceAsserted = ignoreMethodMockOccurrences;727 if (!ignoreMethodMockOccurrences728 && !methodMock.OccurencesBehavior.LowerBound.HasValue729 && !methodMock.OccurencesBehavior.UpperBound.HasValue)730 {731 methodMock.OccurencesBehavior.Assert(1, null);732 occurrenceAsserted = true;733 }734 foreach (var behavior in methodMock.Behaviors.OfType<IAssertableBehavior>())735 if (!occurrenceAsserted || behavior != methodMock.OccurencesBehavior)736 behavior.Assert();737 }738 }739 internal void AssertAll(string message, object mock)740 {741 using (MockingContext.BeginFailureAggregation(message))742 {743 var mocks = GetMethodMocksFromObject(mock);744 AssertBehaviorsForMocks(mocks.Select(m => m.MethodMock), false);745 }746 }747 internal void AssertAll(string message)748 {749 using (MockingContext.BeginFailureAggregation(message))750 {751 var mocks = GetAllMethodMocks();752 AssertBehaviorsForMocks(mocks.Select(m => m.MethodMock), false);753 }754 }755 internal void Assert(string message, object mock, Expression expr = null, Args args = null, Occurs occurs = null)756 {757 using (MockingContext.BeginFailureAggregation(message))758 {759 if (expr == null)760 {761 List<IMethodMock> mocks = new List<IMethodMock>();762 mocks.AddRange(GetMethodMocksFromObject(mock).Select(m => m.MethodMock));763 foreach (var methodMock in mocks)764 {765 foreach (var behavior in methodMock.Behaviors.OfType<IAssertableBehavior>())766 behavior.Assert();767 }768 MockingUtil.UnwrapDelegateTarget(ref mock);769 var mockMixin = GetMockMixin(mock, null);770 if (mockMixin != null)771 {772 foreach (var behavior in mockMixin.FallbackBehaviors.OfType<IAssertableBehavior>()773 .Concat(mockMixin.SupplementaryBehaviors.OfType<IAssertableBehavior>()))774 behavior.Assert();775 }776 }777 else778 {779 CallPattern callPattern = CallPatternCreator.FromExpression(this, expr);780 AssertForCallPattern(callPattern, args, occurs);781 }782 }783 }784 internal void AssertAction(string message, Action memberAction, Args args = null, Occurs occurs = null)785 {786 using (MockingContext.BeginFailureAggregation(message))787 {788 CallPattern callPattern = CallPatternCreator.FromAction(this, memberAction);789 AssertForCallPattern(callPattern, args, occurs);790 }791 }792 internal void AssertSetAction(string message, Action memberAction, Args args = null, Occurs occurs = null)793 {794 using (MockingContext.BeginFailureAggregation(message))795 {796 using (this.sharedContext.StartAssertSet())797 {798 CallPattern callPattern = CallPatternCreator.FromAction(this, memberAction, true);799 AssertForCallPattern(callPattern, args, occurs);800 }801 }802 }803 internal void AssertMethodInfo(string message, object instance, MethodBase method, object[] arguments, Occurs occurs)804 {805 using (MockingContext.BeginFailureAggregation(message))806 {807 CallPattern callPattern = CallPatternCreator.FromMethodBase(instance, method, arguments);808 AssertForCallPattern(callPattern, null, occurs);809 }810 }811 internal void AssertIgnoreInstance(string message, Type type, bool ignoreMethodMockOccurrences)812 {813 using (MockingContext.BeginFailureAggregation(message))814 {815 var methodMocks = GetMethodMocksFromObject(null, type);816 AssertBehaviorsForMocks(methodMocks.Select(m => m.MethodMock), ignoreMethodMockOccurrences);817 }818 }819 internal int GetTimesCalled(Expression expression, Args args)820 {821 CallPattern callPattern = CallPatternCreator.FromExpression(this, expression);822 int callsCount;823 CountMethodMockInvocations(callPattern, args, out callsCount);824 return callsCount;825 }826 internal int GetTimesCalledFromAction(Action action, Args args)827 {828 var callPattern = CallPatternCreator.FromAction(this, action);829 int callsCount;830 CountMethodMockInvocations(callPattern, args, out callsCount);831 return callsCount;832 }833 internal int GetTimesCalledFromMethodInfo(object instance, MethodBase method, object[] arguments)834 {835 var callPattern = CallPatternCreator.FromMethodBase(instance, method, arguments);836 int callsCount;837 CountMethodMockInvocations(callPattern, null, out callsCount);838 return callsCount;839 }840 private HashSet<IMethodMock> CountMethodMockInvocations(CallPattern callPattern, Args args, out int callsCount)841 {842 if (callPattern.IsDerivedFromObjectEquals)843 throw new MockException("Cannot assert calls to methods derived from Object.Equals");844 PreserveRefOutValuesBehavior.ReplaceRefOutArgsWithAnyMatcher(callPattern);845 if (args != null)846 {847 if (args.Filter != null)848 {849 if (args.IsIgnored == null)850 {851 args.IsIgnored = true;852 }853 if (!callPattern.Method.IsStatic854 && args.IsInstanceIgnored == null855 && args.Filter.Method.GetParameters().Length == callPattern.Method.GetParameters().Length + 1)856 {857 args.IsInstanceIgnored = true;858 }859 }860 if (args.IsIgnored == true)861 {862 for (int i = 0; i < callPattern.ArgumentMatchers.Count; i++)863 callPattern.ArgumentMatchers[i] = new AnyMatcher();864 }865 if (args.IsInstanceIgnored == true)866 {867 callPattern.InstanceMatcher = new AnyMatcher();868 }869 callPattern.Filter = args.Filter;870 }871 MethodInfoMatcherTreeNode root;872 callsCount = 0;873 var mocks = new HashSet<IMethodMock>();874 var method = callPattern.Method;875 if (invocationTreeRoots.TryGetValue(method, out root))876 {877 var occurences = root.GetOccurences(callPattern);878 callsCount = occurences.Select(x => x.Calls).Sum();879 foreach (var mock in occurences.SelectMany(x => x.Mocks))880 {881 mocks.Add(mock);882 }883 }884 return mocks;885 }886 private void AssertForCallPattern(CallPattern callPattern, Args args, Occurs occurs)887 {888 int callsCount;889 var mocks = CountMethodMockInvocations(callPattern, args, out callsCount);890 if (occurs != null)891 {892 InvocationOccurrenceBehavior.Assert(occurs.LowerBound, occurs.UpperBound, callsCount, null, null);893 }894 if (mocks.Count == 0)895 {896 MethodInfoMatcherTreeNode funcRoot;897 if (arrangementTreeRoots.TryGetValue(callPattern.Method, out funcRoot))898 {899 var arranges = funcRoot.GetAllMethodMocks(callPattern);900 foreach (var arrange in arranges)901 {902 mocks.Add(arrange.MethodMock);903 }904 }905 }906 if (occurs == null && mocks.Count == 0)907 {908 InvocationOccurrenceBehavior.Assert(Occurs.AtLeastOnce().LowerBound, Occurs.AtLeastOnce().UpperBound, callsCount, null, null);909 }910 else911 {912 AssertBehaviorsForMocks(mocks, occurs != null);913 }914 }915 internal MethodBase GetMethodFromCallPattern(CallPattern callPattern)916 {917 var method = callPattern.Method as MethodInfo;918 if (method == null || !method.IsVirtual)919 return callPattern.Method;920 method = method.NormalizeComInterfaceMethod();921 var valueMatcher = callPattern.InstanceMatcher as IValueMatcher;922 if (valueMatcher != null && valueMatcher.Value != null)923 {924 var valueType = valueMatcher.Value.GetType();925 var mockMixin = GetMockMixin(valueMatcher.Value, null);926 var type = mockMixin != null ? mockMixin.DeclaringType : valueType;927 if (!type.IsInterface && method.DeclaringType.IsAssignableFrom(type))928 {929 var concreteMethod = MockingUtil.GetConcreteImplementer(method, type);930 if (!concreteMethod.IsInheritable() && !ProfilerInterceptor.IsProfilerAttached)931 {932 var reimplementedInterfaceMethod = (MethodInfo)method.GetInheritanceChain().Last();933 if (reimplementedInterfaceMethod.DeclaringType.IsInterface934 && mockFactory.IsAccessible(reimplementedInterfaceMethod.DeclaringType))935 {936 concreteMethod = reimplementedInterfaceMethod;937 }938 }939 method = concreteMethod;940 }941 }942 if (method.DeclaringType != method.ReflectedType)943 method = (MethodInfo)MethodBase.GetMethodFromHandle(method.MethodHandle, method.DeclaringType.TypeHandle);944 return method;945 }946 /// <summary>947 /// Converts the given object to a matcher as follows. This method is most useful for948 /// creating a matcher out of an argument expression.949 /// 950 /// It works as follows:951 /// If the object is not an expression, then a value matcher for that object is returned.952 /// If the object is an expression then:953 /// * if the top of the expression is a method call expression and the member954 /// has the ArgMatcherAttribute then the specific matcher type is instantiaded955 /// with the parameters passed to the method call expression and returned.956 /// If the matcher type is generic, then it is defined with the type of the expression.957 /// * if the top expression is a member or method call and the member958 /// has the ArgIgnoreAttribute, then a TypeMatcher is returned959 /// * otherwise, the expression is evaluated and a ValueMatcher is returned960 /// </summary>961 /// <param name="argumentObj"></param>962 /// <returns></returns>963 internal static IMatcher CreateMatcherForArgument(object argumentObj)964 {965 var argExpr = argumentObj as Expression;966 if (argExpr == null)967 {968 return new ValueMatcher(argumentObj);969 }970 else971 {972 var argMatcher = TryCreateMatcherFromArgMember(argExpr);973 if (argMatcher != null)974 {975 return argMatcher;976 }977 else978 {979 //no matcher, evaluate the original expression980 var argValue = argExpr.EvaluateExpression();981 return new ValueMatcher(argValue);982 }983 }984 }985 internal static IMatcher TryCreateMatcherFromArgMember(Expression argExpr)986 {987 // The expression may end with a conversion which erases the type of the required matcher.988 // Remove the conversion before working with matchers989 while (argExpr.NodeType == ExpressionType.Convert)990 argExpr = ((UnaryExpression)argExpr).Operand;991 ArgMatcherAttribute argAttribute = null;992 Expression[] matcherArguments = null;993 if (argExpr is MethodCallExpression)994 {995 var methodCall = (MethodCallExpression)argExpr;996 argAttribute = (ArgMatcherAttribute)Attribute.GetCustomAttribute(methodCall.Method, typeof(ArgMatcherAttribute));997 matcherArguments = methodCall.Arguments.ToArray();998 }999 else if (argExpr is MemberExpression)1000 {1001 var memberExpr = (MemberExpression)argExpr;1002 argAttribute = (ArgMatcherAttribute)Attribute.GetCustomAttribute(memberExpr.Member, typeof(ArgMatcherAttribute));1003 }1004 if (argAttribute != null)1005 {1006 if (argAttribute.GetType() == typeof(ArgIgnoreAttribute))1007 {1008 return new TypeMatcher(argExpr.Type);1009 }1010 else if (argAttribute.GetType() == typeof(ArgIgnoreTypeAttribute))1011 {1012 var func = Expression.Lambda(argExpr).Compile();1013 var funcResult = func.DynamicInvoke();1014 return new TypeMatcher(funcResult.GetType());1015 }1016 else if (argAttribute.GetType() == typeof(RefArgAttribute) || argAttribute.GetType() == typeof(OutArgAttribute))1017 {1018 var asMemberExpr = argExpr as MemberExpression;1019 if (asMemberExpr != null)1020 {1021 argExpr = asMemberExpr.Expression;1022 }1023 var refCall = (MethodCallExpression)argExpr;1024 var actualArg = refCall.Arguments[0];1025 var memberExpr = actualArg as MemberExpression;1026 if (memberExpr != null && typeof(Expression).IsAssignableFrom(memberExpr.Type) && memberExpr.Expression.Type.DeclaringType == typeof(ArgExpr))1027 {1028 actualArg = (Expression)actualArg.EvaluateExpression();1029 }1030 var argMatcher = CreateMatcherForArgument(actualArg);1031 argMatcher.ProtectRefOut = argAttribute.GetType() == typeof(RefArgAttribute);1032 return argMatcher;1033 }1034 else1035 {1036 var matcherType = argAttribute.Matcher;1037 var matcherArgs = argAttribute.MatcherArgs;1038 if (matcherType.IsGenericTypeDefinition)1039 matcherType = matcherType.MakeGenericType(argExpr.Type);1040 if (matcherArgs == null && matcherArguments != null)1041 matcherArgs = matcherArguments.Select(matcherArgExpr => matcherArgExpr.EvaluateExpression()).ToArray();1042 var matcher = (IMatcher)MockingUtil.CreateInstance(matcherType, matcherArgs);1043 return matcher;1044 }1045 }1046 else1047 {1048 return null;1049 }1050 }1051 private void AddArrange(IMethodMock methodMock)1052 {1053 var method = methodMock.CallPattern.Method;1054 if (methodMock.CallPattern.IsDerivedFromObjectEquals && method.ReflectedType.IsValueType())1055 throw new MockException("Cannot mock Equals method because JustMock depends on it. Also, when Equals is called internally by JustMock, all methods called by it will not be intercepted and will have only their original implementations called.");1056 CheckMethodInterceptorAvailable(methodMock.CallPattern.InstanceMatcher, method);1057 Type declaringType = method.DeclaringType;1058 // If we're arranging a call to a mock object, overwrite its repository.1059 // This will ensure correct behavior when a mock object is arranged1060 // in multiple contexts.1061 var refMatcher = methodMock.CallPattern.InstanceMatcher as ReferenceMatcher;1062 if (refMatcher != null)1063 {1064 var value = refMatcher.Value;1065 var mock = GetMockMixin(value, declaringType);1066 if (mock != null)1067 {1068 methodMock.Mock = mock;1069 mock.Repository = this;1070 }1071 if (value != null)1072 EnableInterception(value.GetType());1073 }1074 EnableInterception(declaringType);1075 PreserveRefOutValuesBehavior.Attach(methodMock);1076 ConstructorMockBehavior.Attach(methodMock);1077 MethodInfoMatcherTreeNode funcRoot;1078 if (!arrangementTreeRoots.TryGetValue(method, out funcRoot))1079 {1080 funcRoot = new MethodInfoMatcherTreeNode(method);1081 arrangementTreeRoots.Add(method, funcRoot);1082 }1083 funcRoot.AddChild(methodMock.CallPattern, methodMock, this.sharedContext.GetNextArrangeId());1084#if !PORTABLE1085 if (ProfilerInterceptor.IsReJitEnabled)1086 {1087 CallPattern.CheckMethodCompatibility(method);1088 CallPattern.CheckInstrumentationAvailability(method);1089 ProfilerInterceptor.RequestReJit(method);1090 }1091 try1092 {1093 if (MockingContext.Plugins.Exists<IDebugWindowPlugin>())1094 {1095 var debugWindowPlugin = MockingContext.Plugins.Get<IDebugWindowPlugin>();1096 var argumentMatchers =1097 methodMock.CallPattern.ArgumentMatchers1098 .SelectMany(1099 (IMatcher matcher, int index) =>1100 {1101 MatcherInfo[] paramsMatchers;1102 var matcherInfo = MatcherInfo.FromMatcherAndParamInfo(matcher, methodMock.CallPattern.Method.GetParameters()[index], out paramsMatchers);1103 if (matcherInfo.Kind == MatcherInfo.MatcherKind.Params && paramsMatchers.Length > 0)1104 {1105 // skip params matcher, but add all contained matchers1106 return paramsMatchers;1107 }1108 return new MatcherInfo[] { matcherInfo };1109 },1110 (IMatcher matcher, MatcherInfo resultMatcherInfo) => resultMatcherInfo)1111 .ToArray();1112 debugWindowPlugin.MockCreated(1113 methodMock.Repository.RepositoryId,1114 methodMock.Repository.GetRepositoryPath(),1115 MockInfo.FromMethodBase(methodMock.CallPattern.Method),1116 argumentMatchers);1117 }1118 }1119 catch (Exception e)1120 {1121 System.Diagnostics.Trace.WriteLine("Exception thrown calling IDebugWindowPlugin plugin: " + e);1122 }1123#endif1124 }1125#if !PORTABLE1126 internal void UpdateMockDebugView(MethodBase method, IMatcher[] argumentMatchers)1127 {1128 try1129 {1130 if (MockingContext.Plugins.Exists<IDebugWindowPlugin>())1131 {1132 var debugWindowPlugin = MockingContext.Plugins.Get<IDebugWindowPlugin>();1133 MatcherInfo[] argumentMatcherInfos = null;1134 if (argumentMatchers != null)1135 {1136 argumentMatcherInfos =1137 argumentMatchers.Select(1138 (IMatcher matcher, int index) =>1139 {1140 MatcherInfo[] dummy;1141 return MatcherInfo.FromMatcherAndParamInfo(matcher, method.GetParameters()[index], out dummy);1142 })1143 .ToArray();1144 }1145 debugWindowPlugin.MockUpdated(1146 this.RepositoryId,1147 this.GetRepositoryPath(),1148 MockInfo.FromMethodBase(method),1149 argumentMatcherInfos);1150 }1151 }1152 catch (Exception e)1153 {1154 System.Diagnostics.Trace.WriteLine("Exception thrown calling IDebugWindowPlugin plugin: " + e);1155 }1156 }1157#endif1158 private void CheckMethodInterceptorAvailable(IMatcher instanceMatcher, MethodBase method)1159 {1160 if (ProfilerInterceptor.IsProfilerAttached)1161 return;1162 var valueMatcher = instanceMatcher as IValueMatcher;1163 if (valueMatcher == null)1164 return;1165 var instance = valueMatcher.Value;1166 if (instance == null)1167 return;1168 if (MockingProxy.CanIntercept(instance, method))1169 return;1170 if (!(instance is IMockMixin) || !method.IsInheritable())1171 ProfilerInterceptor.ThrowElevatedMockingException(method);1172 }1173#if !PORTABLE1174 private void RequestRejitForTypeMethods(Type typeToIntercept)1175 {1176 var methods = new HashSet<MethodBase>();1177 methods.UnionWith(typeToIntercept.GetMethods(MockingUtil.AllMembers));1178 methods.UnionWith(1179 typeToIntercept.GetInheritanceChain()1180 .Where(type => type != typeToIntercept)1181 .SelectMany(type => type.GetMethods(MockingUtil.AllMembers | BindingFlags.DeclaredOnly))1182 .Where(method => !method.IsAbstract && method.DeclaringType != typeof(object)));1183 methods.UnionWith(1184 MockingUtil.GetAllProperties(typeToIntercept)1185 .SelectMany(1186 property =>1187 {1188 var propertyMethods = new List<MethodBase>();1189 var getMethod = property.GetMethod;1190 if (getMethod != null)1191 {1192 propertyMethods.Add(getMethod);1193 }1194 var setMethod = property.SetMethod;1195 if (setMethod != null)1196 {1197 propertyMethods.Add(setMethod);1198 }1199 return propertyMethods;1200 }));1201 foreach (var method in methods)1202 {1203 try1204 {1205 CallPattern.CheckMethodCompatibility(method);1206 CallPattern.CheckInstrumentationAvailability(method);1207 ProfilerInterceptor.RequestReJit(method);1208 }1209 catch (MockException e)1210 {1211#if DEBUG1212 System.Diagnostics.Trace.WriteLine(string.Format("Method {0} is skipped for interception: {1}", method, e));1213#endif1214 }1215 }1216 }1217#endif1218 internal void EnableInterception(Type typeToIntercept)1219 {1220 if (ProfilerInterceptor.IsProfilerAttached)1221 {1222 for (var type = typeToIntercept; type != null;)1223 {1224 if (!ProfilerInterceptor.TypeSupportsInstrumentation(type))1225 DebugView.TraceEvent(IndentLevel.Warning, () => String.Format("Elevated mocking for type {0} will not be available due to limitations in CLR", type));1226 if (this.arrangedTypes.Add(type))1227 {1228 ProfilerInterceptor.EnableInterception(type, true, this);1229#if !PORTABLE1230 if (ProfilerInterceptor.IsReJitEnabled && type == typeToIntercept)1231 {1232 RequestRejitForTypeMethods(type);1233 }1234#endif1235 }1236 type = type.BaseType;1237 if (type == typeof(object) || type == typeof(ValueType) || type == typeof(Enum))1238 break;1239 }1240 using (this.sharedContext.StartRunClassConstructor())1241 {1242 var handle = typeToIntercept.TypeHandle;1243 this.disabledTypes.Add(typeof(RuntimeHelpers));1244 ProfilerInterceptor.RunClassConstructor(handle);1245 this.disabledTypes.Remove(typeof(RuntimeHelpers));1246 }1247 }1248 }1249 internal void DisableInterception(Type typeToIntercept)1250 {1251 if (ProfilerInterceptor.IsProfilerAttached)1252 {1253 if (this.arrangedTypes.Remove(typeToIntercept))1254 {1255 ProfilerInterceptor.EnableInterception(typeToIntercept, false, this);1256 }1257 this.disabledTypes.Add(typeToIntercept);1258 }1259 }1260 private List<MethodMockMatcherTreeNode> GetMethodMocksFromObject(object mock, Type mockType = null)1261 {1262 MockingUtil.UnwrapDelegateTarget(ref mock);1263 var methodMocks = new List<MethodMockMatcherTreeNode>();1264 var visitedMocks = new List<object>(); // can't be HashSet because we can't depend on GetHashCode being implemented properly1265 GetMethodMocksFromObjectInternal(mock, mockType, methodMocks, visitedMocks);1266 return methodMocks;1267 }1268 private void GetMethodMocksFromObjectInternal(object mock, Type mockType, List<MethodMockMatcherTreeNode> methodMocks, List<object> visitedMocks)1269 {1270 if (visitedMocks.Contains(mock))1271 return;1272 visitedMocks.Add(mock);1273 IMatcher instanceMatcher;1274 Func<MethodInfoMatcherTreeNode, bool> rootMatcher;1275 if (mockType != null)1276 {1277 instanceMatcher = new AnyMatcher();1278 rootMatcher = node => mockType.IsAssignableFrom(node.MethodInfo.DeclaringType);1279 }1280 else1281 {1282 instanceMatcher = new ValueMatcher(mock);1283 rootMatcher = node =>1284 {1285 foreach (var child in node.Children)1286 {1287 if (child.Matcher.Matches(instanceMatcher))1288 {1289 return true;1290 }1291 }1292 return false;1293 };1294 }1295 foreach (var funcRoot in arrangementTreeRoots.Values.Where(rootMatcher))1296 {1297 var callPattern = CallPattern.CreateUniversalCallPattern(funcRoot.MethodInfo);1298 callPattern.InstanceMatcher = instanceMatcher;1299 var results = funcRoot.GetAllMethodMocks(callPattern);1300 methodMocks.AddRange(results);1301 }1302 if (mock != null)1303 {1304 var mockMixin = GetMockMixin(mock, null);1305 if (mockMixin != null)1306 {1307 foreach (var dependentMock in mockMixin.DependentMocks)1308 GetMethodMocksFromObjectInternal(dependentMock, null, methodMocks, visitedMocks);1309 }1310 }1311 }1312 private List<MethodMockMatcherTreeNode> GetAllMethodMocks()1313 {1314 var methodMocks = new List<MethodMockMatcherTreeNode>();1315 GetAllMethodMocksInternal(methodMocks);1316 return methodMocks;1317 }1318 private void GetAllMethodMocksInternal(List<MethodMockMatcherTreeNode> methodMocks)1319 {1320 foreach (var funcRoot in arrangementTreeRoots.Values)1321 {1322 var callPattern = CallPattern.CreateUniversalCallPattern(funcRoot.MethodInfo);1323 var results = funcRoot.GetAllMethodMocks(callPattern);1324 methodMocks.AddRange(results);1325 }1326 }1327 private bool DispatchInvocationToMethodMocks(Invocation invocation)1328 {1329 CallPattern callPattern = CallPatternCreator.FromInvocation(invocation);1330 MethodInfoMatcherTreeNode funcRoot = null;1331 if (!invocation.InArrange && !invocation.InAssertSet)1332 {1333 if (!invocationTreeRoots.TryGetValue(callPattern.Method, out funcRoot))1334 {1335 funcRoot = new MethodInfoMatcherTreeNode(callPattern.Method);1336 invocationTreeRoots.Add(callPattern.Method, funcRoot);1337 }1338 }1339 var methodMock = DispatchInvocationToArrangements(callPattern, invocation);1340 if (!invocation.InArrange && !invocation.InAssertSet)1341 {1342 funcRoot.AddOrUpdateOccurence(callPattern, methodMock);1343 }...

Full Screen

Full Screen

CallPatternCreator.cs

Source:CallPatternCreator.cs Github

copy

Full Screen

...20using Telerik.JustMock.Core.MatcherTree;21using Telerik.JustMock.Core.Recording;22namespace Telerik.JustMock.Core23{24 internal class CallPatternCreator25 {26 internal static CallPattern FromExpression(MocksRepository repository, Expression expr)27 {28 var callPattern = new CallPattern();29 expr = ((LambdaExpression)expr).Body;30 // the expression may end with a boxing conversion, remove that31 while (expr.NodeType == ExpressionType.Convert)32 expr = ((UnaryExpression)expr).Operand;33 Expression target;34 MethodBase method = null;35 Expression[] args;36 // We're parsing either a property/field expression or a method call.37 // parse the top of the expression tree and extract the expressions38 // that will turn into the constituents of the call pattern....

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using Telerik.JustMock.Helpers;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8{9 {10 public void Method1()11 {12 var mock = Mock.Create<Class2>();13 Mock.Arrange(() => mock.Method2()).Returns(1);14 Mock.Arrange(() => mock.Method3()).Returns(2);15 Mock.Arrange(() => mock.Method4()).Returns(3);16 Mock.Arrange(() => mock.Method5()).Returns(4);17 Mock.Arrange(() => mock.Method6()).Returns(5);18 Mock.Arrange(() => mock.Method7()).Returns(6);19 Mock.Arrange(() => mock.Method8()).Returns(7);20 Mock.Arrange(() => mock.Method9()).Returns(8);21 Mock.Arrange(() => mock.Method10()).Returns(9);22 Mock.Arrange(() => mock.Method11()).Returns(10);23 Mock.Arrange(() => mock.Method12()).Returns(11);24 Mock.Arrange(() => mock.Method13()).Returns(12);25 Mock.Arrange(() => mock.Method14()).Returns(13);26 Mock.Arrange(() => mock.Method15()).Returns(14);27 Mock.Arrange(() => mock.Method16()).Returns(15);28 Mock.Arrange(() => mock.Method17()).Returns(16);29 Mock.Arrange(() => mock.Method18()).Returns(17);30 Mock.Arrange(() => mock.Method19()).Returns(18);31 Mock.Arrange(() => mock.Method20()).Returns(19);32 Mock.Arrange(() => mock.Method21()).Returns(20);33 Mock.Arrange(() => mock.Method22()).Returns(21);34 Mock.Arrange(() => mock.Method23()).Returns(22);35 Mock.Arrange(() => mock.Method24()).Returns(23);36 Mock.Arrange(() => mock.Method25()).Returns(24);37 Mock.Arrange(() => mock.Method26()).Returns(25);38 Mock.Arrange(() => mock.Method27()).Returns(26);39 Mock.Arrange(() => mock.Method28()).Returns(27);40 Mock.Arrange(() => mock.Method29()).Returns(28);41 Mock.Arrange(() => mock.Method30()).Returns(

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using Telerik.JustMock.Helpers;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8using System.IO;9{10 {11 public static void CreateCallPattern()12 {13 var mock = Mock.Create<Stream>();14 Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);15 mock.Read(new byte[0], 0, 0);16 Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>()), Occurs.Once());17 }18 }19}20using Telerik.JustMock;21using System;22using System.Collections.Generic;23using System.Linq;24using System.Text;25using System.Threading.Tasks;26using System.IO;27{28 {29 public static void CreateCallPattern()30 {31 var mock = Mock.Create<Stream>();32 Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);33 mock.Read(new byte[0], 0, 0);34 Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>()), Occurs.Once());35 }36 }37}38using Telerik.JustMock;39using System;40using System.Collections.Generic;41using System.Linq;42using System.Text;43using System.Threading.Tasks;44using System.IO;45{46 {47 public static void CreateCallPattern()48 {49 var mock = Mock.Create<Stream>();50 Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);51 mock.Read(new byte[0], 0, 0);52 Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2using Telerik.JustMock.Helpers;3using Telerik.JustMock;4using System;5using System.Collections.Generic;6using System.Linq;7using System.Text;8using System.Threading.Tasks;9{10 {11 public string GetFoo()12 {13 return "foo";14 }15 }16}17using Telerik.JustMock.Core;18using Telerik.JustMock.Helpers;19using Telerik.JustMock;20using System;21using System.Collections.Generic;22using System.Linq;23using System.Text;24using System.Threading.Tasks;25{26 {27 public string GetFoo()28 {29 return "foo";30 }31 }32}33using Telerik.JustMock.Core;34using Telerik.JustMock.Helpers;35using Telerik.JustMock;36using System;37using System.Collections.Generic;38using System.Linq;39using System.Text;40using System.Threading.Tasks;41{42 {43 public string GetFoo()44 {45 return "foo";46 }47 }48}49using Telerik.JustMock.Core;50using Telerik.JustMock.Helpers;51using Telerik.JustMock;52using System;53using System.Collections.Generic;54using System.Linq;55using System.Text;56using System.Threading.Tasks;57{58 {59 public string GetFoo()60 {61 return "foo";62 }63 }64}65using Telerik.JustMock.Core;66using Telerik.JustMock.Helpers;67using Telerik.JustMock;68using System;69using System.Collections.Generic;70using System.Linq;71using System.Text;72using System.Threading.Tasks;73{74 {75 public string GetFoo()76 {77 return "foo";78 }79 }80}81using Telerik.JustMock.Core;82using Telerik.JustMock.Helpers;

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using System;3{4 {5 public static void Main()6 {7 var mock = Mock.Create<IFoo>();8 Mock.Arrange(() => mock.Bar(Arg.AnyString, Arg.AnyInt)).CallOriginal();9 var result = mock.Bar("test", 1);10 Console.WriteLine(result);11 }12 }13 {14 string Bar(string s, int i);15 }16}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2public void TestMethod1()3{4 var mock = Mock.Create<IClass1>();5 Mock.Arrange(() => mock.Func1(Arg.IsAny<string>(), Arg.IsAny<int>())).Returns("test").MustBeCalled();6 Mock.Arrange(() => mock.Func2(Arg.IsAny<string>(), Arg.IsAny<int>())).MustBeCalled();7 var test = new Class2(mock);8 test.Func3("test", 1);9}10{11 private readonly IClass1 _class1;12 public Class2(IClass1 class1)13 {14 _class1 = class1;15 }16 public void Func3(string str, int i)17 {18 _class1.Func1(str, i);19 _class1.Func2(str, i);20 }21}22{23 string Func1(string str, int i);24 string Func2(string str, int i);25}26using Telerik.JustMock.Core;27public void TestMethod2()28{29 var mock = Mock.Create<IClass1>();30 Mock.Arrange(() => mock.Func1(Arg.IsAny<string>(), Arg.IsAny<int>())).Returns("test").MustBeCalled();31 Mock.Arrange(() => mock.Func2(Arg.IsAny<string>(), Arg.IsAny<int>())).MustBeCalled();32 var test = new Class2(mock);33 test.Func3("test", 1);34}35{36 private readonly IClass1 _class1;37 public Class2(IClass1 class1)38 {39 _class1 = class1;40 }41 public void Func3(string str, int i)42 {43 _class1.Func1(str, i);44 _class1.Func2(str, i);45 }46}47{48 string Func1(string str, int i);49 string Func2(string str, int i);50}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2using Telerik.JustMock.Helpers;3{4 {5 public virtual string Method1()6 {7 return "Hello World";8 }9 }10}11using Telerik.JustMock.Core;12using Telerik.JustMock.Helpers;13{14 {15 public virtual string Method1()16 {17 return "Hello World";18 }19 }20}21using Telerik.JustMock.Core;22using Telerik.JustMock.Helpers;23{24 {25 public virtual string Method1()26 {27 return "Hello World";28 }29 }30}31using Telerik.JustMock.Core;32using Telerik.JustMock.Helpers;33{34 {35 public virtual string Method1()36 {37 return "Hello World";38 }39 }40}41using Telerik.JustMock.Core;42using Telerik.JustMock.Helpers;43{44 {45 public virtual string Method1()46 {47 return "Hello World";48 }49 }50}51using Telerik.JustMock.Core;52using Telerik.JustMock.Helpers;53{54 {55 public virtual string Method1()56 {57 return "Hello World";58 }59 }60}61using Telerik.JustMock.Core;62using Telerik.JustMock.Helpers;63{64 {65 public virtual string Method1()66 {67 return "Hello World";68 }69 }70}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2{3 {4 public bool TestMethod()5 {6 var mock = Mock.Create<ISample>();7 var result = CallPatternCreator.Create(() => mock.Method1());8 var result2 = CallPatternCreator.Create(() => mock.Method2());9 var result3 = CallPatternCreator.Create(() => mock.Method3());10 var result4 = CallPatternCreator.Create(() => mock.Method4());11 var result5 = CallPatternCreator.Create(() => mock.Method5());12 var result6 = CallPatternCreator.Create(() => mock.Method6());13 var result7 = CallPatternCreator.Create(() => mock.Method7());14 var result8 = CallPatternCreator.Create(() => mock.Method8());15 var result9 = CallPatternCreator.Create(() => mock.Method9());16 var result10 = CallPatternCreator.Create(() => mock.Method10());17 var result11 = CallPatternCreator.Create(() => mock.Method11());18 var result12 = CallPatternCreator.Create(() => mock.Method12());19 var result13 = CallPatternCreator.Create(() => mock.Method13());20 var result14 = CallPatternCreator.Create(() => mock.Method14());21 var result15 = CallPatternCreator.Create(() => mock.Method15());22 var result16 = CallPatternCreator.Create(() => mock.Method16());23 var result17 = CallPatternCreator.Create(() => mock.Method17());24 var result18 = CallPatternCreator.Create(() => mock.Method18());25 var result19 = CallPatternCreator.Create(() => mock.Method19());26 var result20 = CallPatternCreator.Create(() => mock.Method20());27 var result21 = CallPatternCreator.Create(() => mock.Method21());28 var result22 = CallPatternCreator.Create(() => mock.Method22());29 var result23 = CallPatternCreator.Create(() => mock.Method23());30 var result24 = CallPatternCreator.Create(() => mock.Method24());31 var result25 = CallPatternCreator.Create(() => mock.Method25());32 var result26 = CallPatternCreator.Create(() => mock.Method26());33 var result27 = CallPatternCreator.Create(() => mock.Method27());34 var result28 = CallPatternCreator.Create(() => mock.Method28());35 var result29 = CallPatternCreator.Create(() => mock.Method29());

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1var logMock = CallPatternCreator.Mock<ILog>();2var sut = new ClassUnderTest(logMock);3sut.DoSomething();4Assert.AreEqual(1, logMock.InfoCallCount);5Assert.AreEqual("Info", logMock.InfoCalls[0].Arguments[0]);6Assert.AreEqual("Something happened", logMock.InfoCalls[0].Arguments[1]);

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run JustMockLite automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful