public void TestFindAll()
        {
            // 获取 Filter.
            IKeywordsFilter filter = this.GetKeywordsFilter();

            // 初始化关键字
            this.InitKeywords(filter);

            // 不存在的情况.
            IEnumerable <string> result = filter.FindAll(NO_KEYWORD_STRING);

            // 预期结果为空白列表.
            Assert.AreEqual(0, result.Count());


            // 存在一个的情况.
            result = filter.FindAll(EXISTS_ONE_KEYWORD_STRING);
            // 预期结果为 北京.
            Assert.AreEqual(1, result.Count());
            Assert.AreEqual("北京", result.First());


            // 存在一组(一长一短)的情况.
            result = filter.FindAll(EXISTS_ONE_GROUP_KEYWORD_STRING);
            // 预期结果为 上海 与 上海地铁 .
            Assert.AreEqual(2, result.Count());
            Assert.AreEqual(1, result.Count(p => p == "上海"));
            Assert.AreEqual(1, result.Count(p => p == "上海地铁"));


            // 存在两个的情况.
            result = filter.FindAll(EXISTS_TWO_KEYWORD_STRING);
            // 预期结果为 北京. 上海
            Assert.AreEqual(2, result.Count());
            Assert.AreEqual(1, result.Count(p => p == "北京"));
            Assert.AreEqual(1, result.Count(p => p == "上海"));



            // 关键字很短的情况.
            result = filter.FindAll(EXISTS_SHORT_KEYWORD_STRING);
            // 预期结果为 X. 短
            Assert.AreEqual(2, result.Count());
            Assert.AreEqual(1, result.Count(p => p == "X"));
            Assert.AreEqual(1, result.Count(p => p == "短"));


            // 字符串就是关键字情况.
            result = filter.FindAll(KEYWORD_ONLY_STRING);
            // 预期结果为 短.
            Assert.AreEqual(1, result.Count());
            Assert.AreEqual("短", result.First());
        }
        public void TestReplace()
        {
            // 获取 Filter.
            IKeywordsFilter filter = this.GetKeywordsFilter();

            // 初始化关键字
            this.InitKeywords(filter);


            // 不存在的情况.
            string result = filter.Replace(NO_KEYWORD_STRING, '*');

            // 预期结果为 原始字符串.
            Assert.AreEqual(NO_KEYWORD_STRING, result);


            // 存在的情况.
            result = filter.Replace(EXISTS_ONE_KEYWORD_STRING, '*');
            // 预期结果 .
            Assert.AreEqual("**市朝阳区静安东里12号院国门大厦B座", result);


            // 存在一组(一长一短)的情况.
            result = filter.Replace(EXISTS_ONE_GROUP_KEYWORD_STRING, '*');
            // 预期结果为 怎么走,才能到****哪里? 或者 怎么走,才能到**地铁哪里? .
            Assert.IsTrue(result == "怎么走,才能到****哪里?" || result == "怎么走,才能到**地铁哪里?");



            // 存在两个的情况.
            result = filter.Replace(EXISTS_TWO_KEYWORD_STRING, '*');
            // 预期结果.
            Assert.AreEqual("您所乘坐的列车,是由**开往**的列车!", result);



            // 关键字很短的情况.
            result = filter.Replace(EXISTS_SHORT_KEYWORD_STRING, '*');
            // 预期结果.
            Assert.AreEqual("测试一个很*的关键字,内容为*。", result);


            // 字符串就是关键字情况.
            result = filter.Replace(KEYWORD_ONLY_STRING, '*');
            // 预期结果.
            Assert.AreEqual("*", result);
        }
        public void TestHasKeyword()
        {
            // 获取 Filter.
            IKeywordsFilter filter = this.GetKeywordsFilter();

            // 初始化关键字
            this.InitKeywords(filter);


            // 不存在的情况.
            bool result = filter.HasKeyword(NO_KEYWORD_STRING);

            // 预期结果为 false.
            Assert.IsFalse(result);


            // 存在一个的情况.
            result = filter.HasKeyword(EXISTS_ONE_KEYWORD_STRING);
            // 预期结果为 true.
            Assert.IsTrue(result);


            // 存在一组(一长一短)的情况.
            result = filter.HasKeyword(EXISTS_ONE_GROUP_KEYWORD_STRING);
            // 预期结果为 true.
            Assert.IsTrue(result);


            // 存在两个的情况.
            result = filter.HasKeyword(EXISTS_TWO_KEYWORD_STRING);
            // 预期结果为 true.
            Assert.IsTrue(result);



            // 关键字很短的情况.
            result = filter.HasKeyword(EXISTS_SHORT_KEYWORD_STRING);
            // 预期结果为 true.
            Assert.IsTrue(result);


            // 字符串就是关键字情况.
            result = filter.HasKeyword(KEYWORD_ONLY_STRING);
            // 预期结果为 true.
            Assert.IsTrue(result);
        }
        public void TestFindOne()
        {
            // 获取 Filter.
            IKeywordsFilter filter = this.GetKeywordsFilter();

            // 初始化关键字
            this.InitKeywords(filter);


            // 不存在的情况.
            string result = filter.FindOne(NO_KEYWORD_STRING);

            // 预期结果为 String.Empty.
            Assert.AreEqual(String.Empty, result);


            // 存在的情况.
            result = filter.FindOne(EXISTS_ONE_KEYWORD_STRING);
            // 预期结果为 北京.
            Assert.AreEqual("北京", result);


            // 存在一组(一长一短)的情况.
            result = filter.FindOne(EXISTS_ONE_GROUP_KEYWORD_STRING);
            // 预期结果为 上海 或者 上海地铁 .
            Assert.IsTrue(result == "上海" || result == "上海地铁");


            // 存在两个的情况.
            result = filter.FindOne(EXISTS_TWO_KEYWORD_STRING);
            // 预期结果为 北京.
            Assert.AreEqual("北京", result);



            // 关键字很短的情况.
            result = filter.FindOne(EXISTS_SHORT_KEYWORD_STRING);
            // 预期结果为 X 或者 短 .
            Assert.IsTrue(result == "X" || result == "短");


            // 字符串就是关键字情况.
            result = filter.FindOne(KEYWORD_ONLY_STRING);
            // 预期结果为 短 .
            Assert.AreEqual("短", result);
        }
        /// <summary>
        /// 初始化关键字.
        /// </summary>
        /// <param name="filter"></param>
        public virtual void InitKeywords(IKeywordsFilter filter)
        {
            // 增加关键字.

            // 普通的关键字.
            filter.AddKeyword("北京");
            filter.AddKeyword("上海");
            filter.AddKeyword("广州");
            filter.AddKeyword("深圳");


            // 较长的关键字,目的是测试 替换的时候, 会优先替换长的,而不是短的。
            filter.AddKeyword("上海地铁");


            // 长度为一的关键字, 目的是测试,如果关键字级短的情况下, 算法是否会发生问题。
            filter.AddKeyword("X");
            filter.AddKeyword("短");
        }