예제 #1
0
 public void PASS_CreateFilter()
 {
     RegexFilter filter = new RegexFilter("field", "pattern");
     Assert.IsNotNull(filter);
     Assert.AreEqual("field", filter.Field);
     Assert.AreEqual("pattern", filter.Pattern);
 }
예제 #2
0
        public void PASS_Serialize()
        {
            RegexFilter filter = new RegexFilter("field", "pattern");
            string json = JsonConvert.SerializeObject(filter);

            Assert.IsNotNull(json);

            string expectedJson = "{\"regexp\":{\"field\":\"pattern\"}}";
            Assert.AreEqual(expectedJson, json);
        }
예제 #3
0
 public void FAIL_CreateFilter_Pattern()
 {
     try
     {
         RegexFilter filter = new RegexFilter("field", null);
         Assert.Fail();
     }
     catch (ArgumentNullException ex)
     {
         Assert.AreEqual("pattern", ex.ParamName);
     }
 }
예제 #4
0
        public void PASS_Serialize_Flags()
        {
            RegexFilter filter = new RegexFilter("field", "pattern")
            {
                RegexOperatorFlags = new List<RegexOperatorEnum>()
                {
                    RegexOperatorEnum.AnyString,
                    RegexOperatorEnum.Automaton
                }
            };
            string json = JsonConvert.SerializeObject(filter);

            Assert.IsNotNull(json);

            string expectedJson = "{\"regexp\":{\"field\":{\"value\":\"pattern\",\"flags\":\"ANYSTRING|AUTOMATON\"}}}";
            Assert.AreEqual(expectedJson, json);
        }
예제 #5
0
        public void PASS_Serialize_CacheName()
        {
            RegexFilter filter = new RegexFilter("field", "pattern")
            {
                CacheName = "name",
                Cache = true,
                CacheKey = "key"
            };

            string json = JsonConvert.SerializeObject(filter);
            Assert.IsNotNull(json);

            string expectedJson = "{\"regexp\":{\"field\":\"pattern\",\"_name\":\"name\",\"_cache\":true,\"_cache_key\":\"key\"}}";
            Assert.AreEqual(expectedJson, json);
        }
예제 #6
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Dictionary<string, object> fieldDict = serializer.Deserialize<Dictionary<string, object>>(reader);
            if (fieldDict.ContainsKey(FilterTypeEnum.Regex.ToString()))
                fieldDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(fieldDict.First().Value.ToString());

            // find the field name
            KeyValuePair<string, object> fieldKvp = fieldDict.FirstOrDefault(x => !_KnownFields.Contains(x.Key, StringComparer.OrdinalIgnoreCase));

            if (string.IsNullOrWhiteSpace(fieldKvp.Key))
                throw new RequiredPropertyMissingException("field");

            Dictionary<string, object> internalDict = null;
            string field = null;
            string pattern = null;
            try
            {
                internalDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(fieldKvp.Value.ToString());
            }
            catch
            {
                internalDict = fieldDict;
            }

            RegexFilter filter = null;

            if (internalDict.ContainsKey(_PATTERN))
            {
                field = fieldDict.First().Key;
                pattern = internalDict.GetString(_PATTERN);
                filter = new RegexFilter(field, pattern);

                if (internalDict.ContainsKey(_FLAGS))
                {
                    string flagsValue = internalDict.GetString(_FLAGS);
                    if (!string.IsNullOrWhiteSpace(flagsValue))
                    {
                        RegexOperatorEnum feature = RegexOperatorEnum.All;
                        List<RegexOperatorEnum> features = new List<RegexOperatorEnum>();
                        foreach (string flagValue in flagsValue.Split(_FLAG_DELIMITERS.ToArray(), StringSplitOptions.RemoveEmptyEntries))
                        {
                            feature = RegexOperatorEnum.Find(flagValue);
                            if (feature == null)
                                throw new Exception("Unable to match " + flagValue + " to a regex operator.");

                            features.Add(feature);
                        }

                        if (features.Any())
                            filter.RegexOperatorFlags = features;
                    }
                }
            }
            else
            {
                field = fieldKvp.Key;
                pattern = fieldKvp.Value.ToString();
                filter = new RegexFilter(field, pattern);
            }

            FilterSerializer.DeserializeBaseValues(filter, _CACHE_DEFAULT, internalDict);
            filter.CacheName = internalDict.GetStringOrDefault(_CACHE_NAME);

            return filter;
        }