public void GetLcsTestNullableIntWithNull2() { // Данный код просто показывает, что классическое linq возвращает, сравнивая int с null, при этом не падая. var someList = new List <int?>() { 1, 2, 3, null }; int?nullableInt = null; var result = someList.Where(x => x > nullableInt).ToList(); Assert.Equal(0, result.Count); // Далее наш linqprovider. var testProvider = new TestLcsQueryProvider <Лапа>(); new Query <Лапа>(testProvider).Where(x => x.азмерNullableInt > nullableInt).ToList(); Expression queryExpression = testProvider.InnerExpression; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа))); var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction(ldef.funcNOT, this.ldef.GetFunction(this.ldef.paramTrue)) }; Assert.True(Equals(expected, actual)); }
public void GetLcsTestDetailAllWithLimit() { var testProvider = new TestLcsQueryProvider <Кошка>(); // Только те кошки у которых переломаны все лапы new Query <Кошка>(testProvider).Where(o => o.Лапа.Cast <Лапа>().All(obj => obj.БылиЛиПереломы)).ToArray(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef { ConnectMasterPorp = "Кошка", OwnerConnectProp = new[] { SQLWhereLanguageDef.StormMainObjectKey }, View = Information.GetView("ЛапаE", typeof(Лапа)), Type = this.ldef.GetObjectType("Details") }; var lf = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.BoolType, "БылиЛиПереломы")); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("ExistExact", dvd, lf) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void GetLcsTestDateField() { DateTime now = DateTime.Now; var testProvider = new TestLcsQueryProvider <DateField>(); var predicate = (Expression <Func <DateField, bool> >)(o => o.Date.Date < now.Date); new Query <DateField>(testProvider).Where(predicate).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expectedLf = ldef.GetFunction( ldef.funcL, ldef.GetFunction( ldef.funcOnlyDate, new VariableDef(ldef.DateTimeType, "Date")), ldef.GetFunction(ldef.funcOnlyDate, now)); var expected = new LoadingCustomizationStruct(null) { LimitFunction = expectedLf }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs( queryExpression, DateField.Views.DateFieldE); Assert.True(Equals(expected, actual)); }
public void GetLcsTestDetailWithCustomOwnerConnectProp() { var testProvider = new TestLcsQueryProvider <Котенок>(); new Query <Котенок>(testProvider).Where( x => x.Кошка.Лапа.Cast <Лапа>().Any(o => o.ТипЛапы.Название == "передняя")).ToList(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef { ConnectMasterPorp = "Кошка", OwnerConnectProp = new[] { "Кошка" }, View = Information.GetView("ЛапаE", typeof(Лапа)), Type = this.ldef.GetObjectType("Details") }; var lf = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.StringType, "ТипЛапы.Название"), "передняя"); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("Exist", dvd, lf) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs( queryExpression, Utils.GetDefaultView(typeof(Котенок)), new[] { Utils.GetDefaultView(typeof(Кошка)) }); Assert.True(Equals(expected, actual)); // В сравнении Function DetailVariableDef не учитывается, поэтому проверим руками var expectedDvd = (DetailVariableDef)expected.LimitFunction.Parameters[0]; var actualDvd = (DetailVariableDef)actual.LimitFunction.Parameters[0]; Assert.True(Equals(expectedDvd.OwnerConnectProp[0], actualDvd.OwnerConnectProp[0])); }
public void GetLcsTestAny() { var testProvider = new TestLcsQueryProvider <Кошка>(); // Все кошки с лапами new Query <Кошка>(testProvider).Where(o => o.Лапа.Cast <Лапа>().Any()).ToArray(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef { ConnectMasterPorp = "Кошка", OwnerConnectProp = new[] { SQLWhereLanguageDef.StormMainObjectKey }, View = Information.GetView("ЛапаE", typeof(Лапа)), Type = this.ldef.GetObjectType("Details") }; var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("Exist", dvd, true) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void GetLcsTestDetailAnyConjunction() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(x => x.Лапа.Cast <Лапа>().Any(o => o.Номер == 1 && o.Кошка.Кличка.Contains("кличка"))).ToList(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef { ConnectMasterPorp = "Кошка", OwnerConnectProp = new[] { SQLWhereLanguageDef.StormMainObjectKey }, View = Information.GetView("ЛапаE", typeof(Лапа)), Type = this.ldef.GetObjectType("Details") }; var lf = ldef.GetFunction( ldef.funcAND, ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.NumericType, "Номер"), 1), ldef.GetFunction(ldef.funcLike, new VariableDef(ldef.StringType, "Кошка.Кличка"), "%кличка%")); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("Exist", dvd, lf) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void GetLcsByPseudoDetailLimitTestSimpleAnyWithCmp() { var testProvider = new TestLcsQueryProvider <Порода>(); // Все породы, для которых определены кошки new Query <Порода>(testProvider).Where <Порода, Кошка>( Information.GetView("КошкаE", typeof(Кошка)), Information.ExtractPropertyPath <Кошка>(x => x.Порода), x => x.Any(), "SomeCmp").ToList(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef( this.ldef.GetObjectType("Details"), "SomeCmp", Information.GetView("КошкаE", typeof(Кошка)), "Порода", new[] { SQLWhereLanguageDef.StormMainObjectKey }); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("Exist", dvd, ldef.GetFunction(ldef.paramTrue)) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода))); Assert.True(Equals(expected, actual)); }
public void GetLcsByPseudoDetailLimitTestConditionAllWithCmp() { var testProvider = new TestLcsQueryProvider <Порода>(); // Все породы, в которые входят только кошки, не носящие клички ни "Барсик", ни "Мурзик" new Query <Порода>(testProvider).Where <Порода, Кошка>( Information.GetView("КошкаE", typeof(Кошка)), Information.ExtractPropertyPath <Кошка>(x => x.Порода), y => y.All(x => x.Кличка != "Барсик" && x.Кличка != "Мурзик"), "SomeCmp").ToList(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef( this.ldef.GetObjectType("Details"), "SomeCmp", Information.GetView("КошкаE", typeof(Кошка)), "Порода", new[] { SQLWhereLanguageDef.StormMainObjectKey }); var lf = ldef.GetFunction( ldef.funcAND, ldef.GetFunction(ldef.funcNEQ, new VariableDef(ldef.StringType, "Кличка"), "Барсик"), ldef.GetFunction(ldef.funcNEQ, new VariableDef(ldef.StringType, "Кличка"), "Мурзик")); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction(ldef.funcExistExact, dvd, lf) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода))); Assert.True(Equals(expected, actual)); }
public void GetLcsTestAddYear() { DateTime now = DateTime.Now; var testProvider = new TestLcsQueryProvider <Перелом>(); var predicate = (Expression <Func <Перелом, bool> >)(o => o.Дата.AddYears(1) < now.Date); new Query <Перелом>(testProvider).Where(predicate).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expectedLf = ldef.GetFunction( ldef.funcL, ldef.GetFunction( ldef.funcDateAdd, ldef.GetFunction(ldef.paramYearDIFF), 1, new VariableDef(ldef.DateTimeType, "Дата")), ldef.GetFunction(ldef.funcOnlyDate, now)); var expected = new LoadingCustomizationStruct(null) { LimitFunction = expectedLf }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs( queryExpression, Utils.GetDefaultView(typeof(Перелом))); Assert.True(Equals(expected, actual)); }
public void GetLcsByDetailLimitTestSpecialVariant() { var testProvider = new TestLcsQueryProvider <Кошка>(); // Все кошки с лапами new Query <Кошка>(testProvider).Where <Кошка, Лапа>( Information.GetView("ЛапаE", typeof(Лапа)), x => x.Any()).ToArray(); Expression queryExpression = testProvider.InnerExpression; var dvd = new DetailVariableDef( this.ldef.GetObjectType("Details"), "Лапа__Кошка", Information.GetView("ЛапаE", typeof(Лапа)), "Кошка", new[] { SQLWhereLanguageDef.StormMainObjectKey }); var expected = new LoadingCustomizationStruct(null) { LimitFunction = this.ldef.GetFunction("Exist", dvd, ldef.GetFunction(ldef.paramTrue)) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void TestUseGuidPropertyWithDynamicView() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => o.Ключ == "{72FCA622-A01E-494C-BE1C-0821178594FB}").ToArray(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(Кошка)); Assert.NotNull(actual.View); Assert.Equal(1, actual.View.Properties.Count()); Assert.Equal(Information.ExtractPropertyPath <Кошка>(x => x.Ключ), actual.View.Properties[0].Name); }
public void GetLcsTestBooleanVariableDefWithDynamicView() { var testProvider = new TestLcsQueryProvider <ТипЛапы>(); new Query <ТипЛапы>(testProvider).Where(o => o.Актуально).ToList(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(ТипЛапы)); Assert.NotNull(actual.View); Assert.Equal(1, actual.View.Properties.Count()); Assert.Equal(Information.ExtractPropertyPath <ТипЛапы>(x => x.Актуально), actual.View.Properties[0].Name); }
public void LcsDynamicViewTestForDetail() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(k => k.Лапа.Cast <Лапа>().Any(l => l.азмер > 5)).ToList(); Expression queryExpression = testProvider.InnerExpression; var result = LinqToLcs.GetLcs <Кошка>(queryExpression); Assert.True(result.View.Details.Any(d => d.Name.Equals(ЛапаName))); Assert.True(result.View.GetDetail(ЛапаName).View.CheckPropname(азмерName)); }
public void LcsDynamicViewTestForSimpleFunction() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(k => k.Кличка == "кошка").ToList(); Expression queryExpression = testProvider.InnerExpression; var result = LinqToLcs.GetLcs <Кошка>(queryExpression); // Проверка, что использованное свойство есть в представлении Assert.True(result.View.CheckPropname(КличкаName)); }
public void LcsDynamicViewTestForMaster() { var strGuid = Guid.NewGuid().ToString(); var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(k => k.Порода.__PrimaryKey.ToString() == strGuid).ToList(); Expression queryExpression = testProvider.InnerExpression; var result = LinqToLcs.GetLcs <Кошка>(queryExpression); Assert.True(result.View.Properties.Any(m => m.Name.Equals(ПородаName))); }
public void GetLcsTestDataObjectWithDynamicView() { var порода = new Порода(); var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => порода.Equals(o.Порода)).ToArray(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(Кошка)); Assert.NotNull(actual.View); Assert.Equal(1, actual.View.Properties.Count()); Assert.Equal(Information.ExtractPropertyPath <Кошка>(x => x.Порода), actual.View.Properties[0].Name); }
public void GetLcsTestNullableCharWithDynamicView() { var testProvider = new TestLcsQueryProvider <Лапа>(); new Query <Лапа>(testProvider).Where(x => x.азмерNullableChar == null).ToList(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(Лапа)); Assert.NotNull(actual.View); // Свойства 2, поскольку если есть агрегирующее свойство, то оно обязательно включается. Assert.Equal(2, actual.View.Properties.Count()); Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Лапа>(x => x.азмерNullableChar))); }
public void GetLcsTestDateTimeNowWithDynamicView() { var testProvider = new TestLcsQueryProvider <Перелом>(); new Query <Перелом>(testProvider).Where(o => o.Дата <= DateTime.Now).ToArray(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(Перелом)); Assert.NotNull(actual.View); // Свойства 2, поскольку если есть агрегирующее свойство, то оно обязательно включается. Assert.Equal(2, actual.View.Properties.Count()); Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Перелом>(x => x.Дата))); }
public void GetLcsTestNullableIntWithNull3() { var testProvider = new TestLcsQueryProvider <Лапа>(); new Query <Лапа>(testProvider).Where(x => x.азмерNullableInt > null).ToList(); Expression queryExpression = testProvider.InnerExpression; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа))); var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction(ldef.funcNOT, this.ldef.GetFunction(this.ldef.paramTrue)) }; Assert.True(Equals(expected, actual)); }
public void GetLcsByDetailLimitTestWrongDetail() { var exception = Xunit.Record.Exception(() => { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Порода>(testProvider).Where <Порода, Кошка>( Information.GetView("КошкаE", typeof(Кошка)), y => y.Any()).ToList(); Expression queryExpression = testProvider.InnerExpression; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода))); Assert.True(false, "Создано ограничение по упрощённой схеме для ненастоящего детейла."); }); Assert.IsType(typeof(NotFoundAggregatorProperty), exception); }
public void LcsDynamicViewTestForSecondaryDetail() { var testProvider = new TestLcsQueryProvider <Кошка>(); var закрытый = ТипПерелома.Закрытый; new Query <Кошка>(testProvider).Where(k => k.Лапа.Cast <Лапа>().Any(l => l.Перелом.Cast <Перелом>() .Any(p => p.Тип == закрытый))).ToList(); Expression queryExpression = testProvider.InnerExpression; var result = LinqToLcs.GetLcs <Кошка>(queryExpression); Assert.True(result.View.Details.Any(d => d.Name.Equals(ЛапаName))); Assert.True(result.View.GetDetail(ЛапаName).View.Details.Any(d => d.Name.Equals(ПереломName))); Assert.True(result.View.GetDetail(ЛапаName).View.GetDetail(ПереломName).View.CheckPropname(ТипName)); }
/// <summary> /// Общий метод сравнения предполагаемой lcs и результата конвертации linq-выражения. /// </summary> /// <param name="predicate">Условие linq-выражения.</param> /// <param name="limitFunction">Предполагаемая lcs.</param> private bool CheckChar(Expression <Func <Лапа, bool> > predicate, Function limitFunction) { var testProvider = new TestLcsQueryProvider <Лапа>(); new Query <Лапа>(testProvider).Where(predicate).ToList(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = limitFunction }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа))); return(Equals(expected, actual)); }
public void GetLcsTestTicksException() { var exception = Xunit.Record.Exception(() => { var testProvider = new TestLcsQueryProvider <Перелом>(); DateTime moment = DateTime.Now.AddDays(-7); var predicate = (Expression <Func <Перелом, bool> >)(o => o.Дата.Ticks == 34); new Query <Перелом>(testProvider).Where(predicate).ToArray(); Expression queryExpression = testProvider.InnerExpression; LoadingCustomizationStruct actual = LinqToLcs.GetLcs( queryExpression, Utils.GetDefaultView(typeof(Перелом))); }); Assert.IsType(typeof(MethodSignatureException), exception); }
public void GetLcsTestDataObjectWithDynamicView2() { var порода = new Порода { Название = "тест" }; var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => o.Порода.Название.Equals(порода.Название)).ToArray(); var queryExpression = testProvider.InnerExpression; var actual = LinqToLcs.GetLcs(queryExpression, typeof(Кошка)); Assert.NotNull(actual.View); Assert.Equal(2, actual.View.Properties.Count()); Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Кошка>(x => x.Порода))); Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Кошка>(x => x.Порода.Название))); }
public void GetLcsTestDataObject() { var порода = new Порода(); var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => порода.Equals(o.Порода)).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction(ldef.funcEQ, порода, new VariableDef(ldef.DataObjectType, "Порода")) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void TestUseKeyGuidProperty() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider) .Where(o => o.Ключ == "{72FCA622-A01E-494C-BE1C-0821178594FB}" && o.Порода.__PrimaryKey.ToString() == "{f6af2f25-1eca-4b62-8094-3284be51d73e}") .ToArray(); Expression queryExpression = testProvider.InnerExpression; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Information.GetView("КошкаGuid", typeof(Кошка))); Assert.Equal( "AND ( = ( Ключ {72FCA622-A01E-494C-BE1C-0821178594FB} ) = ( Порода {f6af2f25-1eca-4b62-8094-3284be51d73e} ) )", actual.LimitFunction.ToString()); }
public void GetLcsNullIsNullTest() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => null == null).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction(ldef.paramTrue) }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void GetLcsMasterStringMemberTest() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => o.Порода.Название.Contains("ки")).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction( ldef.funcLike, new VariableDef(ldef.StringType, "Порода.Название"), "%ки%") }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
public void GetLcsMethodOfMemberOfSecondLevelTest() { var testProvider = new TestLcsQueryProvider <Кошка>(); new Query <Кошка>(testProvider).Where(o => o.Порода.ТипПороды.Название.StartsWith("Блат")).ToArray(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = ldef.GetFunction(ldef.funcLike, new VariableDef(ldef.StringType, "Порода.ТипПороды.Название"), "Блат%") }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка))); Assert.True(Equals(expected, actual)); }
/// <summary> /// Проверка соответствия linq сгенерированному lcs. /// </summary> /// <param name="predicate">Предикат в linq.</param> /// <param name="limitFunction">Функция ограничения в терминах lcs.</param> private void CompareLcsWithLimitCommon(Expression <Func <Порода, bool> > predicate, Function limitFunction) { var testProvider = new TestLcsQueryProvider <Порода>(); new Query <Порода>(testProvider).Where(predicate).ToList(); Expression queryExpression = testProvider.InnerExpression; var expected = new LoadingCustomizationStruct(null) { LimitFunction = limitFunction }; LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода))); Assert.True(Equals(expected, actual)); }