Inheritance: IfTSQueryTokenizer
        public void GetLikeQuery_Single_Token_Thows_Exeption_Test()
        {
            var searchQuery = "SingleToken";
            var tokenizer = new fTSQueryTokenizer(searchQuery);

            Assert.Throws<InvalidOperationException>(() => tokenizer.GetLikeQuery());
        }
        public void GetMatchQuery_Single_Token_Test()
        {
            var searchQuery = "SingleToken";
            var tokenizer = new fTSQueryTokenizer(searchQuery);

            Assert.Equal("SingleToken*", tokenizer.GetMatchQuery());
        }
        public void GetLikeQuery_Multiple_Tokens_Test()
        {
            var searchQuery = "Multiple Tokens Test";
            var tokenizer = new fTSQueryTokenizer(searchQuery);

            Assert.Equal("%Test%", tokenizer.GetLikeQuery());
        }
        public void fTSQueryTokenizer_Correct_Tokens_Test()
        {
            var searchQuery = "Multiple tokens Query";
            var tokenizer = new fTSQueryTokenizer(searchQuery);

            Assert.Equal(3, tokenizer.Tokens.Length);
            Assert.Equal("Multiple", tokenizer.Tokens[0]);
            Assert.Equal("tokens", tokenizer.Tokens[1]);
            Assert.Equal("Query", tokenizer.Tokens[2]);
        }
        public IEnumerable<LocationGroup> FindLocations(string addressLookup, ILocationGroupingStrategy groupingStrategy)
        {
            var tokenizer = new fTSQueryTokenizer(addressLookup);

            var statement = new FtsQueryGenerator(groupingStrategy, tokenizer).Generate();

            List<LocationGroup> locations = new List<LocationGroup>();

            using (IManagedDataReader reader = _connectionManager.GetReader(statement, new StatementParamaters() { { "@addressSearch", "'" + addressLookup + "*'" } }))
            {
                while (reader.Read())
                {
                    locations.Add(_locationGroupBuilder.Build(reader.DataReader, groupingStrategy.Fields));
                }
            }
            return locations;
        }