예제 #1
0
파일: Generator.cs 프로젝트: upta/Coalesce
        public virtual void Configure(JObject obj)
        {
            IsDisabled = obj.Value <bool>(DisabledJsonPropertyName);

            var rvm        = new ReflectionClassViewModel(this.GetType());
            var properties = rvm.Properties
                             .Where(p => p.HasAttribute <GeneratorConfigAttribute>() && p.HasSetter);

            foreach (var configProp in properties)
            {
                var propType = configProp.Type.TypeInfo;
                if (obj.TryGetValue(configProp.Name, StringComparison.OrdinalIgnoreCase, out JToken value))
                {
                    configProp.PropertyInfo.SetValue(this, value.ToObject(propType));
                }
            }
        }
예제 #2
0
        private void SearchHelper <T, TProp>(
            Expression <Func <T, TProp> > propSelector,
            string searchTerm,
            TProp searchCandidate,
            bool expectedMatch,
            TimeZoneInfo timeZoneInfo = null
            )
            where T : new()
        {
            var classViewModel = new ReflectionClassViewModel(typeof(T));
            var prop           = classViewModel.PropertyBySelector(propSelector);

            var searchClauses = prop
                                .SearchProperties(classViewModel, maxDepth: 1, force: true)
                                .SelectMany(p => p.GetLinqDynamicSearchStatements(
                                                new ClaimsPrincipal(),
                                                timeZoneInfo ?? TimeZoneInfo.Local,
                                                "it",
                                                searchTerm
                                                ))
                                .Select(t => t.statement)
                                .ToList();

            T model = new T();

            prop.PropertyInfo.SetValue(model, searchCandidate);

            var matchedItems = searchClauses.Any()
                ? new[] { model }
            .AsQueryable()
            .Where(string.Join(" || ", searchClauses))
            .ToArray()
                : new T[0];

            if (expectedMatch)
            {
                Assert.True(matchedItems.Length == 1, $"{searchTerm} didn't match {searchCandidate}.");
            }
            else
            {
                Assert.False(matchedItems.Length == 1, $"{searchTerm} matched on {searchCandidate}, but shouldn't have.");
            }
        }