private void RewritingTest(string inputQuery, bool isValid, string expected) { var context = new TestQueryContext(QuerySettings.AdminSettings, 0, _indexingInfo, new TestQueryEngine(null, null)); using (SenseNet.Tests.Tools.Swindle(typeof(SnQuery), "_permissionFilterFactory", new EverythingAllowedPermissionFilterFactory())) { var queryIn = SnQuery.Parse(inputQuery, context); var snQueryAcc = new PrivateType(typeof(SnQuery)); snQueryAcc.InvokeStatic("PrepareQuery", queryIn, context); var hasError = false; var visitor = new SharingVisitor(); SnQuery queryOut = null; try { queryOut = SnQuery.Create(visitor.Visit(queryIn.QueryTree)); } catch (InvalidContentSharingQueryException) { hasError = true; } Assert.AreNotEqual(isValid, hasError); if (!hasError) { Assert.AreEqual(expected, queryOut.ToString()); } } }
public Query Test(string queryText, string expected = null) { expected = expected ?? queryText; var indexingInfo = new Dictionary <string, IPerFieldIndexingInfo> { //{"_Text", new TestPerfieldIndexingInfoString()}, { "#Field1", new TestPerfieldIndexingInfoString() }, { "Field1", new TestPerfieldIndexingInfoString() }, { "Field2", new TestPerfieldIndexingInfoString() }, { "Field3", new TestPerfieldIndexingInfoString() }, { "F1", new TestPerfieldIndexingInfoString() }, { "F2", new TestPerfieldIndexingInfoString() }, { "F3", new TestPerfieldIndexingInfoString() }, { "F4", new TestPerfieldIndexingInfoString() }, { "f1", new TestPerfieldIndexingInfoString() }, { "f2", new TestPerfieldIndexingInfoString() }, { "f3", new TestPerfieldIndexingInfoString() }, { "f4", new TestPerfieldIndexingInfoString() }, { "f5", new TestPerfieldIndexingInfoString() }, { "f6", new TestPerfieldIndexingInfoString() }, { "mod_date", new TestPerfieldIndexingInfoInt() }, { "title", new TestPerfieldIndexingInfoString() }, { "Name", new TestPerfieldIndexingInfoString() }, { "Id", new TestPerfieldIndexingInfoInt() }, { "LongField1", new TestPerfieldIndexingInfoLong() }, { "SingleField1", new TestPerfieldIndexingInfoSingle() }, { "DoubleField1", new TestPerfieldIndexingInfoDouble() }, { "DateTimeField1", new TestPerfieldIndexingInfoDateTime() }, }; //using (new ContentRepository.Tests.Tools.RepositorySupportSwindler(new TestSearchEngineSupport(indexingInfo))) using (SenseNet.Tests.Tools.Swindle(typeof(SearchManager), "_searchEngineSupport", new TestSearchEngineSupport(indexingInfo))) { var queryContext = new TestQueryContext(QuerySettings.Default, 0, indexingInfo); var parser = new CqlParser(); var snQuery = parser.Parse(queryText, queryContext); var analyzers = indexingInfo.ToDictionary(kvp => kvp.Key, kvp => Lucene29LocalIndexingEngine.GetAnalyzer(kvp.Value)); var indexFieldTypes = indexingInfo.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.IndexFieldHandler.IndexFieldType); // This is a non-functional object that's only purpose is // to hold the indexing info for the visitor to work. var sm = new LuceneSearchManager(new IndexDirectory()); sm.SetIndexingInfo(analyzers, indexFieldTypes); var compiler = new Lucene29Compiler(sm.GetAnalyzer()); var lucQuery = compiler.Compile(snQuery, queryContext); var lqVisitor = new LucQueryToStringVisitor(sm); lqVisitor.Visit(lucQuery.Query); var actual = lqVisitor.ToString(); Assert.AreEqual(expected, actual); return(lucQuery.Query); } }
private void NormalizerVisitorTest(SnQueryPredicate inputPredicate, string expectedQuery) { var context = new TestQueryContext(QuerySettings.AdminSettings, 0, _indexingInfo, new TestQueryEngine(null, null)); using (SenseNet.Tests.Tools.Swindle(typeof(SnQuery), "_permissionFilterFactory", new EverythingAllowedPermissionFilterFactory())) { var queryIn = SnQuery.Create(inputPredicate); NormalizerVisitorTest(queryIn, context, expectedQuery); } }
private SnQuery Test(string queryText, string expected = null) { var queryContext = new TestQueryContext(QuerySettings.Default, 0, _indexingInfo); var parser = new CqlParser(); var snQuery = parser.Parse(queryText, queryContext); var visitor = new SnQueryToStringVisitor(); visitor.Visit(snQuery.QueryTree); var actualResult = visitor.Output; Assert.AreEqual(expected ?? queryText, actualResult); return(snQuery); }
private void NormalizerVisitorTest(SnQuery query, TestQueryContext context, string expectedQuery) { query.EnableAutofilters = FilterStatus.Disabled; query.EnableLifespanFilter = FilterStatus.Disabled; var snQueryAcc = new PrivateType(typeof(SnQuery)); snQueryAcc.InvokeStatic("PrepareQuery", query, context); var normalizer = new SharingNormalizerVisitor(); var normalized = normalizer.Visit(query.QueryTree); var newQuery = SnQuery.Create(normalized); Assert.AreEqual(expectedQuery, newQuery.ToString()); }
public void SnQuery_Parser_AggregateSettingsCountOnlyAllVersions_CSrv() { var indexingInfo = new Dictionary <string, IPerFieldIndexingInfo> { { "Id", new TestPerfieldIndexingInfoInt() } }; var test = new Action <string, string, QuerySettings, bool, bool>( (queryText, expectedQueryText, settings, expectedCountOnly, expectedAllVersions) => { var queryContext = new TestQueryContext(settings, 0, indexingInfo); var parser = new CqlParser(); var snQuery = parser.Parse(queryText, queryContext); Assert.AreEqual(expectedQueryText ?? queryText, snQuery.ToString()); Assert.AreEqual(expectedCountOnly, snQuery.CountOnly); Assert.AreEqual(expectedAllVersions, snQuery.AllVersions); }); test("Id:>0", null, new QuerySettings(), false, false); test("Id:>0 .COUNTONLY", null, new QuerySettings(), true, false); test("Id:>0 .ALLVERSIONS", null, new QuerySettings(), false, true); test("Id:>0 .ALLVERSIONS .COUNTONLY", null, new QuerySettings(), true, true); test("Id:>0 .COUNTONLY .ALLVERSIONS", "Id:>0 .ALLVERSIONS .COUNTONLY", new QuerySettings(), true, true); test("Id:>0", "Id:>0", new QuerySettings { AllVersions = false }, false, false); test("Id:>0", "Id:>0 .ALLVERSIONS", new QuerySettings { AllVersions = true }, false, true); test("Id:>0 .ALLVERSIONS", "Id:>0 .ALLVERSIONS", new QuerySettings { AllVersions = false }, false, true); test("Id:>0 .ALLVERSIONS", "Id:>0 .ALLVERSIONS", new QuerySettings { AllVersions = true }, false, true); test("Id:>0 .COUNTONLY", "Id:>0 .ALLVERSIONS .COUNTONLY", new QuerySettings { AllVersions = true }, true, true); }
public void SnQuery_Result_Int() { var intResults = new Dictionary <string, QueryResult <int> > { { "asdf", new QueryResult <int>(new[] { 1, 2, 3 }, 4) } }; var context = new TestQueryContext(QuerySettings.AdminSettings, 0, _indexingInfo, new TestQueryEngine(intResults, null)); using (Tools.Swindle(typeof(SnQuery), "_permissionFilterFactory", new EverythingAllowedPermissionFilterFactory())) { var queryText = "asdf"; var result = SnQuery.Query(queryText, context); var expected = string.Join(", ", intResults[queryText].Hits.Select(x => x.ToString()).ToArray()); var actual = string.Join(", ", result.Hits.Select(x => x.ToString()).ToArray()); Assert.AreEqual(actual, expected); Assert.AreEqual(result.TotalCount, intResults[queryText].TotalCount); } }
private void TestError(string queryText) { var queryContext = new TestQueryContext(QuerySettings.Default, 0, _indexingInfo); var parser = new CqlParser(); Exception thrownException = null; try { parser.Parse(queryText, queryContext); } catch (Exception e) { thrownException = e; } if (thrownException == null) { Assert.Fail("Any exception wasn't thrown"); } }
private Tuple <SnQuery, string> CreateQueryAndPrepare(string queryText, FilterStatus autoFilters, FilterStatus lifespanFilter) { var parser = new CqlParser(); var context = new TestQueryContext(QuerySettings.AdminSettings, 1, _indexingInfo); var query = new SnQuery { Querytext = queryText, QueryTree = parser.Parse(queryText, context).QueryTree, EnableAutofilters = autoFilters, EnableLifespanFilter = lifespanFilter }; SnQuery.PrepareQuery(query, context); var visitor = new SnQueryToStringVisitor(); visitor.Visit(query.QueryTree); return(new Tuple <SnQuery, string>(query, visitor.Output)); }
public void SnQuery_Result_String() { var stringResults = new Dictionary <string, QueryResult <string> > { { "asdf", new QueryResult <string>(new[] { "1", "2", "3" }, 4) } }; var context = new TestQueryContext(QuerySettings.AdminSettings, 0, _indexingInfo, new TestQueryEngine(null, stringResults)); using (Tools.Swindle(typeof(SnQuery), "_permissionFilterFactory", new EverythingAllowedPermissionFilterFactory())) { var queryText = "asdf"; var result = SnQuery.QueryAndProject(queryText, context); var expected = string.Join(", ", stringResults[queryText].Hits); var actual = string.Join(", ", result.Hits); Assert.AreEqual(actual, expected); Assert.AreEqual(result.TotalCount, stringResults[queryText].TotalCount); } }
public void SnQuery_Classify_UsedFieldNames() { var indexingInfo = new Dictionary <string, IPerFieldIndexingInfo> { { "Id", new TestPerfieldIndexingInfoInt() }, { "Name", new TestPerfieldIndexingInfoString() }, { "Field1", new TestPerfieldIndexingInfoString() }, { "Field2", new TestPerfieldIndexingInfoString() } }; var queryContext = new TestQueryContext(QuerySettings.AdminSettings, 0, indexingInfo); var parser = new CqlParser(); var queryText = "+Id:<1000 +Name:Admin* +(Field1:value1 Field2:value2) +(Field1:asdf)"; var expected = "Field1, Field2, Id, Name"; var snQuery = parser.Parse(queryText, queryContext); var info = SnQueryClassifier.Classify(snQuery); var actual = string.Join(", ", info.QueryFieldNames.OrderBy(x => x).ToArray()); Assert.AreEqual(expected, actual); }
public void Sharing_Query_Rewriting_FieldNames() { var inputQuery = "-a:a Sharing:s0 SharedWith:123 SharedBy:s2 SharingMode:s3 SharingLevel:s4"; var expectedQuery = "-a:a Sharing:s0 Sharing:I123 Sharing:s2 Sharing:s3 Sharing:s4"; string actualQuery; var context = new TestQueryContext(QuerySettings.AdminSettings, 0, _indexingInfo, new TestQueryEngine(null, null)); using (SenseNet.Tests.Tools.Swindle(typeof(SnQuery), "_permissionFilterFactory", new EverythingAllowedPermissionFilterFactory())) { var queryIn = SnQuery.Parse(inputQuery, context); var snQueryAcc = new PrivateType(typeof(SnQuery)); snQueryAcc.InvokeStatic("PrepareQuery", queryIn, context); var visitor = new SharingVisitor(); var newTree = visitor.Visit(queryIn.QueryTree); var snQuery = SnQuery.Create(newTree); actualQuery = snQuery.ToString(); } Assert.AreEqual(expectedQuery, actualQuery); }
public void SnQuery_Parser_UnknownField_RightError() { var queryContext = new TestQueryContext(QuerySettings.Default, 0, _indexingInfo); var parser = new CqlParser(); Exception thrownException = null; try { parser.Parse("TypeIs:User TOP:2", queryContext); } catch (Exception e) { thrownException = e; } if (thrownException == null) { Assert.Fail("Any exception wasn't thrown"); } if (!(thrownException is ParserException)) { Assert.Fail($"Thrown exception is {thrownException.GetType().FullName}, Expected: {typeof(ParserException).FullName}"); } }
public void SnQuery_Parser_AggregateSettingsTest() { var indexingInfo = new Dictionary <string, IPerFieldIndexingInfo> { { "Id", new TestPerfieldIndexingInfoInt() } }; // tuple values: // Item1: QuerySettings // Item2: query text postfix // Item3: expected Top // Item4: expected Skip // Item5: expected EnableAutofilters // Item6: expected EnableLifespanFilter // Item7: expected QueryExecutionMode var settings = new List <Tuple <QuerySettings, string, int, int, FilterStatus, FilterStatus, QueryExecutionMode> > { Tuple.Create(new QuerySettings(), " .TOP:0", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .TOP:5", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, "", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, " .TOP:0", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 0 }, " .TOP:10", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 5 }, " .TOP:10", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, " .TOP:5", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SKIP:0", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SKIP:1", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 0 }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 0 }, " .SKIP:1", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 1 }, " .SKIP:0", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 10 }, " .SKIP:5", int.MaxValue, 10, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 5 }, " .SKIP:10", int.MaxValue, 5, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .AUTOFILTERS:ON", int.MaxValue, 0, FilterStatus.Enabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Enabled }, "", int.MaxValue, 0, FilterStatus.Enabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Disabled }, " .AUTOFILTERS:ON", int.MaxValue, 0, FilterStatus.Disabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .LIFESPAN:ON", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Enabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Enabled }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Enabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Disabled }, " .LIFESPAN:ON", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Disabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .QUICK", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Quick), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Quick }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Quick), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Strict }, " .QUICK", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Strict), Tuple.Create(new QuerySettings { Sort = new List <SortInfo> { new SortInfo("Id") } }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SORT:Id", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Sort = new List <SortInfo> { new SortInfo("Id") } }, " .SORT:Name", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SORT:Name .TOP:0 .SORT:DisplayName", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default) }; var expectedSortInfo = new List <IEnumerable <SortInfo> >(); for (int i = 0; i < settings.Count - 4; i++) { expectedSortInfo.Add(null); } expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Name"), new SortInfo("DisplayName") }); var parser = new CqlParser(); var queryText = "+Id:<1000"; foreach (var setting in settings) { var queryContext = new TestQueryContext(setting.Item1, 0, indexingInfo); var inputQueryText = queryText + setting.Item2; var expectedResultText = queryText; var snQuery = parser.Parse(inputQueryText, queryContext); var visitor = new SnQueryToStringVisitor(); visitor.Visit(snQuery.QueryTree); var actualResultText = visitor.Output; Assert.AreEqual(expectedResultText, actualResultText); Assert.AreEqual(setting.Item3, snQuery.Top); Assert.AreEqual(setting.Item4, snQuery.Skip); Assert.AreEqual(setting.Item5, snQuery.EnableAutofilters); Assert.AreEqual(setting.Item6, snQuery.EnableLifespanFilter); Assert.AreEqual(setting.Item7, snQuery.QueryExecutionMode); var sortIndex = settings.IndexOf(setting); Assert.IsTrue((!snQuery.Sort.Any() && expectedSortInfo[sortIndex] == null) || expectedSortInfo[sortIndex].Count() == snQuery.Sort.Length); } }