diff --git a/src/EFCore.InMemory/Query/Internal/EntityProjectionExpression.cs b/src/EFCore.InMemory/Query/Internal/EntityProjectionExpression.cs index e82b8bff9ed..2f34586df3f 100644 --- a/src/EFCore.InMemory/Query/Internal/EntityProjectionExpression.cs +++ b/src/EFCore.InMemory/Query/Internal/EntityProjectionExpression.cs @@ -23,6 +23,22 @@ public EntityProjectionExpression( public override Type Type => EntityType.ClrType; public sealed override ExpressionType NodeType => ExpressionType.Extension; + public virtual EntityProjectionExpression UpdateEntityType(IEntityType derivedType) + { + var readExpressionMap = new Dictionary(); + foreach (var kvp in _readExpressionMap) + { + var property = kvp.Key; + if (derivedType.IsAssignableFrom(property.DeclaringEntityType) + || property.DeclaringEntityType.IsAssignableFrom(derivedType)) + { + readExpressionMap[property] = kvp.Value; + } + } + + return new EntityProjectionExpression(derivedType, readExpressionMap); + } + public virtual Expression BindProperty(IProperty property) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs index 1e6a5ed6350..1fb84dbd69a 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs @@ -66,23 +66,54 @@ public virtual Expression Translate(Expression expression) : result; } + protected override Expression VisitBinary(BinaryExpression binaryExpression) + { + var left = Visit(binaryExpression.Left); + var right = Visit(binaryExpression.Right); + if (left == null || right == null) + { + return null; + } + + return binaryExpression.Update(left, binaryExpression.Conversion, right); + } + + protected override Expression VisitConditional(ConditionalExpression conditionalExpression) + { + var test = Visit(conditionalExpression.Test); + var ifTrue = Visit(conditionalExpression.IfTrue); + var ifFalse = Visit(conditionalExpression.IfFalse); + if (test == null || ifTrue == null || ifFalse == null) + { + return null; + } + + return conditionalExpression.Update(test, ifTrue, ifFalse); + } + protected override Expression VisitMember(MemberExpression memberExpression) { var innerExpression = Visit(memberExpression.Expression); + if (memberExpression.Expression != null && innerExpression == null) + { + return null; + } - if (innerExpression is EntityProjectionExpression + if ((innerExpression is EntityProjectionExpression || (innerExpression is UnaryExpression innerUnaryExpression && innerUnaryExpression.NodeType == ExpressionType.Convert && innerUnaryExpression.Operand is EntityProjectionExpression)) + && TryBindMember(innerExpression, MemberIdentity.Create(memberExpression.Member), memberExpression.Type, out var result)) { - return BindProperty(innerExpression, memberExpression.Member.GetSimpleMemberName(), memberExpression.Type); + return result; } return memberExpression.Update(innerExpression); } - private Expression BindProperty(Expression source, string propertyName, Type type) + private bool TryBindMember(Expression source, MemberIdentity memberIdentity, Type type, out Expression result) { + result = null; Type convertedType = null; if (source is UnaryExpression unaryExpression && unaryExpression.NodeType == ExpressionType.Convert) @@ -105,21 +136,29 @@ private Expression BindProperty(Expression source, string propertyName, Type typ .FirstOrDefault(et => et.ClrType == convertedType); if (entityType == null) { - return null; + return false; } } - var property = entityType.GetRootType().GetDerivedTypesInclusive() - .Select(et => et.FindProperty(propertyName)) - .FirstOrDefault(p => p != null); + var property = memberIdentity.MemberInfo != null + ? entityType.FindProperty(memberIdentity.MemberInfo) + : entityType.FindProperty(memberIdentity.Name); + // If unmapped property return null + if (property == null) + { + return false; + } + + result = BindProperty(entityProjection, property); + if (result.Type != type) + { + result = Expression.Convert(result, type); + } - var result = BindProperty(entityProjection, property); - return result.Type == type - ? result - : Expression.Convert(result, type); + return true; } - throw new InvalidOperationException(CoreStrings.TranslationFailed(source.Print())); + return false; } private Expression BindProperty(EntityProjectionExpression entityProjectionExpression, IProperty property) @@ -132,7 +171,12 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCallExp // EF.Property case if (methodCallExpression.TryGetEFPropertyArguments(out var source, out var propertyName)) { - return BindProperty(Visit(source), propertyName, methodCallExpression.Type); + if (TryBindMember(Visit(source), MemberIdentity.Create(propertyName), methodCallExpression.Type, out var result)) + { + return result; + } + + throw new InvalidOperationException("EF.Property called with wrong property name."); } // Subquery case diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs index 4b0feaf449d..1446defa48d 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -379,6 +380,16 @@ protected override ShapedQueryExpression TranslateOfType(ShapedQueryExpression s inMemoryQueryExpression.ServerQueryExpression, predicate); + var projectionBindingExpression = (ProjectionBindingExpression)entityShaperExpression.ValueBufferExpression; + var projectionMember = projectionBindingExpression.ProjectionMember; + var entityProjection = (EntityProjectionExpression)inMemoryQueryExpression.GetMappedProjection(projectionMember); + + inMemoryQueryExpression.ReplaceProjectionMapping( + new Dictionary + { + { projectionMember, entityProjection.UpdateEntityType(derivedType)} + }); + source.ShaperExpression = entityShaperExpression.WithEntityType(derivedType); return source; diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryShapedQueryCompilingExpressionVisitor.InMemoryProjectionBindingRemovingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryShapedQueryCompilingExpressionVisitor.InMemoryProjectionBindingRemovingExpressionVisitor.cs index b418040f783..b8d80ac7b1f 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryShapedQueryCompilingExpressionVisitor.InMemoryProjectionBindingRemovingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryShapedQueryCompilingExpressionVisitor.InMemoryProjectionBindingRemovingExpressionVisitor.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.Linq.Expressions; +using System.Reflection; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Storage; @@ -40,6 +42,14 @@ protected override Expression VisitBinary(BinaryExpression binaryExpression) return Expression.MakeBinary(ExpressionType.Assign, binaryExpression.Left, updatedExpression); } + if (binaryExpression.NodeType == ExpressionType.Assign + && binaryExpression.Left is MemberExpression memberExpression + && memberExpression.Member is FieldInfo fieldInfo + && fieldInfo.IsInitOnly) + { + return memberExpression.Assign(Visit(binaryExpression.Right)); + } + return base.VisitBinary(binaryExpression); } diff --git a/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs index 3fa64fc7c23..75476210e6a 100644 --- a/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs @@ -16,12 +16,6 @@ public BuiltInDataTypesInMemoryTest(BuiltInDataTypesInMemoryFixture fixture) { } - [ConditionalFact(Skip = "Issue#16963")] - public override void Can_insert_and_read_back_with_string_key() - { - base.Can_insert_and_read_back_with_string_key(); - } - public class BuiltInDataTypesInMemoryFixture : BuiltInDataTypesFixtureBase { protected override ITestStoreFactory TestStoreFactory => InMemoryTestStoreFactory.Instance; diff --git a/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs index c4e2cc38e52..ed2e4e2681f 100644 --- a/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs @@ -15,12 +15,6 @@ public ConvertToProviderTypesInMemoryTest(ConvertToProviderTypesInMemoryFixture { } - [ConditionalFact(Skip = "Issue#16963")] - public override void Can_insert_and_read_back_with_string_key() - { - base.Can_insert_and_read_back_with_string_key(); - } - public class ConvertToProviderTypesInMemoryFixture : ConvertToProviderTypesFixtureBase { protected override ITestStoreFactory TestStoreFactory => InMemoryTestStoreFactory.Instance; diff --git a/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs index b64525cfe2d..e6ab477b82c 100644 --- a/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs @@ -19,12 +19,6 @@ public override void Can_insert_and_read_back_with_case_insensitive_string_key() { } - [ConditionalFact(Skip = "Issue#16963")] - public override void Can_insert_and_read_back_with_string_key() - { - base.Can_insert_and_read_back_with_string_key(); - } - public class CustomConvertersInMemoryFixture : CustomConvertersFixtureBase { public override bool StrictEquality => true; diff --git a/test/EFCore.InMemory.FunctionalTests/FieldMappingInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/FieldMappingInMemoryTest.cs index 5c43740b376..e4d9cef8b17 100644 --- a/test/EFCore.InMemory.FunctionalTests/FieldMappingInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/FieldMappingInMemoryTest.cs @@ -14,72 +14,6 @@ public FieldMappingInMemoryTest(FieldMappingInMemoryFixture fixture) { } - [ConditionalFact(Skip = "Issue#16963")] - public override void Field_mapping_with_conversion_does_not_throw() - { - base.Field_mapping_with_conversion_does_not_throw(); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_auto_props(bool tracking) - { - base.Include_collection_auto_props(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_fields_only(bool tracking) - { - base.Include_collection_fields_only(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_fields_only_for_navs_too(bool tracking) - { - base.Include_collection_fields_only_for_navs_too(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_full_props(bool tracking) - { - base.Include_collection_full_props(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_full_props_with_named_fields(bool tracking) - { - base.Include_collection_full_props_with_named_fields(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_hiding_props(bool tracking) - { - base.Include_collection_hiding_props(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_read_only_props(bool tracking) - { - base.Include_collection_read_only_props(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_read_only_props_with_named_fields(bool tracking) - { - base.Include_collection_read_only_props_with_named_fields(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_write_only_props(bool tracking) - { - base.Include_collection_write_only_props(tracking); - } - - [ConditionalTheory(Skip = "Issue#16963")] - public override void Include_collection_write_only_props_with_named_fields(bool tracking) - { - base.Include_collection_write_only_props_with_named_fields(tracking); - } - protected override void Update(string navigation) { base.Update(navigation); diff --git a/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs b/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs index ea5d07c1467..c47cbf14784 100644 --- a/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs @@ -19,7 +19,6 @@ public class InMemoryComplianceTest : ComplianceTestBase typeof(ConferencePlannerTestBase<>), // Remaining Issue #16963 3.0 query tests: typeof(ComplexNavigationsWeakQueryTestBase<>), - typeof(FiltersInheritanceTestBase<>), typeof(OwnedQueryTestBase<>), typeof(GroupByQueryTestBase<>), typeof(ComplexNavigationsQueryTestBase<>), @@ -30,3 +29,4 @@ public class InMemoryComplianceTest : ComplianceTestBase protected override Assembly TargetAssembly { get; } = typeof(InMemoryComplianceTest).Assembly; } } + diff --git a/test/EFCore.InMemory.FunctionalTests/LazyLoadProxyInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/LazyLoadProxyInMemoryTest.cs index efe535cda0c..0fb3f7c3cf7 100644 --- a/test/EFCore.InMemory.FunctionalTests/LazyLoadProxyInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/LazyLoadProxyInMemoryTest.cs @@ -14,25 +14,25 @@ public LazyLoadProxyInMemoryTest(LoadInMemoryFixture fixture) { } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Lazy_loading_finds_correct_entity_type_with_already_loaded_owned_types() { base.Lazy_loading_finds_correct_entity_type_with_already_loaded_owned_types(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Lazy_loading_finds_correct_entity_type_with_alternate_model() { base.Lazy_loading_finds_correct_entity_type_with_alternate_model(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Lazy_loading_finds_correct_entity_type_with_multiple_queries() { base.Lazy_loading_finds_correct_entity_type_with_multiple_queries(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Lazy_loading_finds_correct_entity_type_with_opaque_predicate_and_multiple_queries() { base.Lazy_loading_finds_correct_entity_type_with_opaque_predicate_and_multiple_queries(); diff --git a/test/EFCore.InMemory.FunctionalTests/MonsterFixupSnapshotInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/MonsterFixupSnapshotInMemoryTest.cs index 7225c16f09d..82fdc30be9e 100644 --- a/test/EFCore.InMemory.FunctionalTests/MonsterFixupSnapshotInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/MonsterFixupSnapshotInMemoryTest.cs @@ -14,49 +14,49 @@ public MonsterFixupSnapshotInMemoryTest(MonsterFixupSnapshotInMemoryFixture fixt { } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Can_build_monster_model_and_seed_data_using_all_navigations() { base.Can_build_monster_model_and_seed_data_using_all_navigations(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Can_build_monster_model_and_seed_data_using_dependent_navigations() { base.Can_build_monster_model_and_seed_data_using_dependent_navigations(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Can_build_monster_model_and_seed_data_using_FKs() { base.Can_build_monster_model_and_seed_data_using_FKs(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Can_build_monster_model_and_seed_data_using_navigations_with_deferred_add() { base.Can_build_monster_model_and_seed_data_using_navigations_with_deferred_add(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Can_build_monster_model_and_seed_data_using_principal_navigations() { base.Can_build_monster_model_and_seed_data_using_principal_navigations(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void One_to_one_fixup_happens_when_FKs_change_test() { base.One_to_one_fixup_happens_when_FKs_change_test(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void One_to_one_fixup_happens_when_reference_change_test() { base.One_to_one_fixup_happens_when_reference_change_test(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue#16963 Owned")] public override void Composite_fixup_happens_when_FKs_change_test() { base.Composite_fixup_happens_when_FKs_change_test(); diff --git a/test/EFCore.InMemory.FunctionalTests/PropertyValuesInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/PropertyValuesInMemoryTest.cs index 9027c306ea4..00253161ad8 100644 --- a/test/EFCore.InMemory.FunctionalTests/PropertyValuesInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/PropertyValuesInMemoryTest.cs @@ -14,96 +14,6 @@ public PropertyValuesInMemoryTest(PropertyValuesInMemoryFixture fixture) { } - [ConditionalFact(Skip = "Issue #16963")] - public override Task Current_values_for_derived_object_can_be_copied_into_an_object() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task GetDatabaseValues_for_the_wrong_type_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task NonGeneric_GetDatabaseValuesAsync_for_derived_entity_not_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task NonGeneric_GetDatabaseValuesAsync_for_the_wrong_type_in_the_store_throws() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task NonGeneric_GetDatabaseValues_for_derived_entity_not_in_the_store_returns_null() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task NonGeneric_GetDatabaseValues_for_the_wrong_type_in_the_store_throws() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Original_values_for_derived_object_can_be_copied_into_an_object() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_current_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_original_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_non_generic_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_store_values_of_a_derived_object_can_be_accessed_as_a_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_non_generic_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Scalar_store_values_of_a_derived_object_can_be_accessed_asynchronously_as_a_property_dictionary() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Store_values_for_derived_object_can_be_copied_into_an_object() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Store_values_for_derived_object_can_be_copied_into_an_object_asynchronously() - => Task.CompletedTask; - - [ConditionalFact(Skip = "Issue #16963")] - public override void Using_bad_IProperty_instances_throws_derived() - { - } - - [ConditionalFact(Skip = "Issue #16963")] - public override void Using_bad_property_names_throws_derived() - { - } - public class PropertyValuesInMemoryFixture : PropertyValuesFixtureBase { protected override ITestStoreFactory TestStoreFactory => InMemoryTestStoreFactory.Instance; diff --git a/test/EFCore.InMemory.FunctionalTests/Query/ComplexNavigationsQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/ComplexNavigationsQueryInMemoryTest.cs index f9f98205c6a..86b164eb948 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/ComplexNavigationsQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/ComplexNavigationsQueryInMemoryTest.cs @@ -14,169 +14,5 @@ public ComplexNavigationsQueryInMemoryTest(ComplexNavigationsQueryInMemoryFixtur { //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - - [ConditionalTheory(Skip = "issue #4311")] - public override Task Nested_group_join_with_take(bool IsAsync) - { - return base.Nested_group_join_with_take(IsAsync); - } - - [ConditionalTheory(Skip = "issue #9591")] - public override Task Multi_include_with_groupby_in_subquery(bool IsAsync) - { - return base.Multi_include_with_groupby_in_subquery(IsAsync); - } - - [ConditionalTheory(Skip = "issue #13561")] - public override Task - Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top(bool isAsync) - { - return base.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_with_other_query_operators_composed_on_top( - isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(bool isAsync) - { - return base.Multiple_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpty_joined_together(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_using_property_method_nested(bool isAsync) - { - return base.Key_equality_using_property_method_nested(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_using_property_method_required(bool isAsync) - { - return base.Key_equality_using_property_method_required(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_when_sentinel_ef_property(bool isAsync) - { - return base.Key_equality_when_sentinel_ef_property(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Navigation_inside_method_call_translated_to_join(bool isAsync) - { - return base.Navigation_inside_method_call_translated_to_join(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Entity_equality_empty(bool isAsync) - { - return base.Entity_equality_empty(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_property_method_translated_to_join(bool isAsync) - { - return base.Optional_navigation_inside_property_method_translated_to_join(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Navigation_key_access_optional_comparison(bool isAsync) - { - return base.Navigation_key_access_optional_comparison(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_method_call_translated_to_join(bool isAsync) - { - return base.Optional_navigation_inside_method_call_translated_to_join(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(bool isAsync) - { - return base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany3(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(bool isAsync) - { - return base.Optional_navigation_inside_method_call_translated_to_join_keeps_original_nullability(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_two_conditions_on_same_navigation(bool isAsync) - { - return base.Key_equality_two_conditions_on_same_navigation(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(bool isAsync) - { - return base.Method_call_on_optional_navigation_translates_to_null_conditional_properly_for_arguments(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_propagates_nullability_to_manually_created_left_join1(bool isAsync) - { - return base.Optional_navigation_propagates_nullability_to_manually_created_left_join1(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_using_property_method_and_member_expression1(bool isAsync) - { - return base.Key_equality_using_property_method_and_member_expression1(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Key_equality_using_property_method_and_member_expression2(bool isAsync) - { - return base.Key_equality_using_property_method_and_member_expression2(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Complex_navigations_with_predicate_projected_into_anonymous_type(bool isAsync) - { - return base.Complex_navigations_with_predicate_projected_into_anonymous_type(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_nested_method_call_translated_to_join(bool isAsync) - { - return base.Optional_navigation_inside_nested_method_call_translated_to_join(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Join_navigation_in_outer_selector_translated_to_extra_join_nested2(bool isAsync) - { - return base.Join_navigation_in_outer_selector_translated_to_extra_join_nested2(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Join_navigation_in_outer_selector_translated_to_extra_join(bool isAsync) - { - return base.Join_navigation_in_outer_selector_translated_to_extra_join(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(bool isAsync) - { - return base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany4(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Join_navigation_in_outer_selector_translated_to_extra_join_nested(bool isAsync) - { - return base.Join_navigation_in_outer_selector_translated_to_extra_join_nested(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(bool isAsync) - { - return base.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(bool isAsync) - { - return base.Optional_navigation_inside_nested_method_call_translated_to_join_keeps_original_nullability_also_for_arguments(isAsync); - } } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs index 1d45aaca666..75f037b9809 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs @@ -14,71 +14,5 @@ public GearsOfWarQueryInMemoryTest(GearsOfWarQueryInMemoryFixture fixture, ITest { //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - - [ConditionalTheory(Skip = "issue #12295")] - public override Task Double_order_by_on_nullable_bool_coming_from_optional_navigation(bool isAsync) - { - return base.Double_order_by_on_nullable_bool_coming_from_optional_navigation(isAsync); - } - - [ConditionalTheory(Skip = "issue #13746")] - public override Task Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(bool isAsync) - { - return base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Negated_bool_ternary_inside_anonymous_type_in_projection(bool isAsync) - { - return base.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_type_compensation_works_with_binary_expression(bool isAsync) - { - return base.Optional_navigation_type_compensation_works_with_binary_expression(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Complex_predicate_with_AndAlso_and_nullable_bool_property(bool isAsync) - { - return base.Complex_predicate_with_AndAlso_and_nullable_bool_property(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_type_compensation_works_with_conditional_expression(bool isAsync) - { - return base.Optional_navigation_type_compensation_works_with_conditional_expression(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_type_compensation_works_with_predicate_negated(bool isAsync) - { - return base.Optional_navigation_type_compensation_works_with_predicate_negated(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task String_compare_with_null_conditional_argument(bool isAsync) - { - return base.String_compare_with_null_conditional_argument(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_type_compensation_works_with_predicate2(bool isAsync) - { - return base.Optional_navigation_type_compensation_works_with_predicate2(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Where_required_navigation_on_derived_type(bool isAsync) - { - return base.Where_required_navigation_on_derived_type(isAsync); - } - - [ConditionalTheory(Skip = "issue #16963")] - public override Task Optional_navigation_type_compensation_works_with_binary_and_expression(bool isAsync) - { - return base.Optional_navigation_type_compensation_works_with_binary_and_expression(isAsync); - } } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/IncludeAsyncInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/IncludeAsyncInMemoryTest.cs index 1c7805e6eba..59496e945dd 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/IncludeAsyncInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/IncludeAsyncInMemoryTest.cs @@ -12,8 +12,5 @@ public IncludeAsyncInMemoryTest(IncludeInMemoryFixture fixture) : base(fixture) { } - - [ConditionalFact(Skip = "Issue #16963")] - public override Task Include_collection_with_client_filter() => null; } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs index ebd8b21042f..a76a6fbae84 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs @@ -14,12 +14,7 @@ public IncludeInMemoryTest(IncludeInMemoryFixture fixture, ITestOutputHelper tes //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - [ConditionalTheory(Skip = "Issue #16963")] - public override void Include_collection_with_client_filter(bool useString) - { - } - - [ConditionalTheory(Skip = "Issue #16963")] + [ConditionalTheory(Skip = "Issue#17386")] public override void Include_collection_with_last_no_orderby(bool useString) { base.Include_collection_with_last_no_orderby(useString); diff --git a/test/EFCore.InMemory.FunctionalTests/Query/InheritanceInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/InheritanceInMemoryTest.cs index 6411050ba02..c1042ddbe7b 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/InheritanceInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/InheritanceInMemoryTest.cs @@ -14,12 +14,7 @@ public InheritanceInMemoryTest(InheritanceInMemoryFixture fixture, ITestOutputHe //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - [ConditionalFact(Skip = "Issue #16963")] - public override void Subquery_OfType() - { - } - - [ConditionalFact(Skip = "See issue#13857")] // Defining query + [ConditionalFact(Skip = "See issue#16963 Cannot compose when using client method in defining query")] // Defining query public override void Can_query_all_animal_views() { } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs index 1fbefc28c57..2a8ff48b6cc 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs @@ -14,8 +14,7 @@ // ReSharper disable InconsistentNaming namespace Microsoft.EntityFrameworkCore.Query { - // Issue #16963 - internal class QueryBugsInMemoryTest : IClassFixture + public class QueryBugsInMemoryTest : IClassFixture { #region Bug9849 @@ -151,7 +150,7 @@ public class Motor #region Bug3595 - [ConditionalFact] + [ConditionalFact(Skip = "Issue#16963 groupBy")] public void GroupBy_with_uninitialized_datetime_projection_3595() { using (CreateScratch(Seed3595, "3595")) diff --git a/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs index 35b19881983..8aa45cc98ba 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs @@ -17,81 +17,49 @@ public QueryNavigationsInMemoryTest( //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_subquery_on_navigation_client_eval(bool isAsync) => null; + #region SingleResultProjection - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_Where_Navigation_Client(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Join_with_nav_projected_in_subquery_when_client_eval(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Collection_select_nav_prop_all_client(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override void Collection_where_nav_prop_all_client() - { - } - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_simple(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_simple_followed_by_ordering_by_scalar(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_multi_part(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_multi_part2(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] public override Task Collection_select_nav_prop_first_or_default(bool isAsync) { - return base.Collection_select_nav_prop_first_or_default(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Collection_select_nav_prop_first_or_default_then_nav_prop(bool isAsync) { - return base.Collection_select_nav_prop_first_or_default_then_nav_prop(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Project_single_entity_value_subquery_works(bool isAsync) { - return base.Project_single_entity_value_subquery_works(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Select_collection_FirstOrDefault_project_anonymous_type(bool isAsync) { - return base.Select_collection_FirstOrDefault_project_anonymous_type(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Select_collection_FirstOrDefault_project_entity(bool isAsync) { - return base.Select_collection_FirstOrDefault_project_entity(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Skip_Select_Navigation(bool isAsync) { - return base.Skip_Select_Navigation(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] public override Task Take_Select_Navigation(bool isAsync) { - return base.Take_Select_Navigation(isAsync); + return Task.CompletedTask; + } + + #endregion + + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Where_subquery_on_navigation_client_eval(bool isAsync) + { + return Task.CompletedTask; } } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs index 9f3c9875f83..b701e4bfdee 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -21,25 +22,15 @@ public SimpleQueryInMemoryTest( //TestLoggerFactory.TestOutputHelper = testOutputHelper; } - [ConditionalFact(Skip = "See issue#13857")] - public override void Auto_initialized_view_set() - { - } - - [ConditionalTheory(Skip = "See issue#13857")] - public override Task KeylessEntity_simple(bool isAsync) => null; - - [ConditionalTheory(Skip = "See issue#13857")] - public override Task KeylessEntity_where_simple(bool isAsync) => null; - - [ConditionalFact(Skip = "See issue#13857")] - public override void KeylessEntity_by_database_view() + // InMemory can throw server side exception + public override void Average_no_data_subquery() { + Assert.Throws(() => base.Average_no_data_subquery()); } - // InMemory can mimic throw behavior for subquery - public override void Average_no_data_subquery() + public override void Max_no_data_subquery() { + Assert.Throws(() => base.Max_no_data_subquery()); } public override void Min_no_data_subquery() @@ -47,387 +38,427 @@ public override void Min_no_data_subquery() Assert.Throws(() => base.Min_no_data_subquery()); } - public override void Max_no_data_subquery() + public override Task Where_query_composition_entity_equality_one_element_Single(bool isAsync) { - Assert.Throws(() => base.Max_no_data_subquery()); + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_one_element_Single(isAsync)); } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Concat(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Concat_nested(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Concat_non_entity(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Except(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Except_nested(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Except_non_entity(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Except_simple_followed_by_projecting_constant(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Intersect(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Intersect_nested(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Intersect_non_entity(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Intersect(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Include(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_nested(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_OrderBy_Skip_Take(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Select(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Take_Union_Take(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_Where(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_with_anonymous_type_projection(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Client_eval_Union_FirstOrDefault(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Include_Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_Union_unrelated(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SubSelect_Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_Except_reference_projection(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task GroupBy_Select_Union(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Union_over_different_projection_types(bool isAsync, string leftType, string rightType) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Include_with_orderby_skip_preserves_ordering(bool isAsync) => null; - - [ConditionalFact(Skip = "Issue #16963")] - public override void Select_nested_collection_multi_level() + public override Task Where_query_composition_entity_equality_one_element_First(bool isAsync) { + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_one_element_First(isAsync)); } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task DefaultIfEmpty_in_subquery(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task DefaultIfEmpty_in_subquery_nested(bool isAsync) => null; - - [ConditionalTheory(Skip = "Issue #16963")] - public override Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) => null; + public override Task Where_query_composition_entity_equality_no_elements_Single(bool isAsync) + { + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_no_elements_Single(isAsync)); + } - [ConditionalFact(Skip = "Issue #16963")] - public override void DefaultIfEmpty_without_group_join() + public override Task Where_query_composition_entity_equality_no_elements_First(bool isAsync) { + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_no_elements_First(isAsync)); } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Default_if_empty_top_level(bool isAsync) => null; + public override Task Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(bool isAsync) + { + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync)); + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Default_if_empty_top_level_followed_by_projecting_constant(bool isAsync) => null; + public override Task Where_query_composition_entity_equality_multiple_elements_Single(bool isAsync) + { + return Assert.ThrowsAsync(() => base.Where_query_composition_entity_equality_multiple_elements_Single(isAsync)); + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Default_if_empty_top_level_positive(bool isAsync) => null; + // Sending client code to server + [ConditionalFact(Skip = "Issue#17050")] + public override void Client_code_using_instance_in_anonymous_type() + { + base.Client_code_using_instance_in_anonymous_type(); + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Default_if_empty_top_level_projection(bool isAsync) => null; + [ConditionalFact(Skip = "Issue#17050")] + public override void Client_code_using_instance_in_static_method() + { + base.Client_code_using_instance_in_static_method(); + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Join_with_default_if_empty_on_both_sources(bool isAsync) => null; + [ConditionalFact(Skip = "Issue#17050")] + public override void Client_code_using_instance_method_throws() + { + base.Client_code_using_instance_method_throws(); + } - [ConditionalFact(Skip = "Issue #16963")] - public override void OfType_Select() + #region Set Operations + public override Task Concat(bool isAsync) { + return Task.CompletedTask; } - [ConditionalFact(Skip = "Issue #16963")] - public override void OfType_Select_OfType_Select() + public override Task Concat_nested(bool isAsync) { + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue#16575")] - public override Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(bool isAsync) => null; + public override Task Concat_non_entity(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task KeylessEntity_with_included_nav(bool isAsync) => null; + public override Task Except(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task KeylessEntity_with_included_navs_multi_level(bool isAsync) => null; + public override Task Except_nested(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue#17050")] - public override void Client_code_using_instance_in_static_method() + public override Task Except_non_entity(bool isAsync) { + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue#17050")] - public override void Client_code_using_instance_method_throws() + public override Task Except_simple_followed_by_projecting_constant(bool isAsync) { + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue#17050")] - public override void Client_code_using_instance_in_anonymous_type() + public override Task Intersect(bool isAsync) { + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Multiple_select_many_with_predicate(bool isAsync) => null; + public override Task Intersect_nested(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) => null; + public override Task Intersect_non_entity(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) => null; + public override Task Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_correlated_subquery_simple(bool isAsync) => null; + public override Task Union_Include(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_Joined(bool isAsync) => null; + public override Task Union_Intersect(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) => null; + public override Task Union_nested(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) => null; + public override void Union_non_entity(bool isAsync) + { + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_Joined_Take(bool isAsync) => null; + public override Task Union_OrderBy_Skip_Take(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) => null; + public override Task Union_over_different_projection_types(bool isAsync, string leftType, string rightType) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) => null; + public override Task Union_Select(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_correlated_with_outer_1(bool isAsync) => null; + public override Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_correlated_with_outer_2(bool isAsync) => null; + public override Task Union_Take_Union_Take(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_correlated_with_outer_3(bool isAsync) => null; + public override Task Union_Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Contains_with_local_tuple_array_closure(bool isAsync) => null; + public override Task Union_Where(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Count_with_predicate_client_eval(bool isAsync) => null; + public override Task Union_with_anonymous_type_projection(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Count_with_predicate_client_eval_mixed(bool isAsync) => null; + public override Task Include_Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Where_Count_client_eval(bool isAsync) => null; + public override Task Client_eval_Union_FirstOrDefault(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Where_Count_client_eval_mixed(bool isAsync) => null; + public override Task GroupBy_Select_Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Where_Count_with_predicate_client_eval(bool isAsync) => null; + public override void Include_Union_different_includes_throws() + { + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_Where_Count_with_predicate_client_eval_mixed(bool isAsync) => null; + public override void Include_Union_only_on_one_side_throws() + { + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_OrderBy_Count_client_eval(bool isAsync) => null; + public override Task Select_Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_correlated_with_outer_4(bool isAsync) => null; + public override Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task All_client(bool isAsync) => null; + public override Task Select_Union_unrelated(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Client_OrderBy_GroupBy_Group_ordering_works(bool isAsync) => null; + public override Task SubSelect_Union(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task First_client_predicate(bool isAsync) => null; + public override Task Select_Except_reference_projection(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_client_mixed(bool isAsync) => null; + #endregion - [ConditionalTheory(Skip = "Issue #16963")] - public override Task OrderBy_multiple_queries(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Contains_with_local_tuple_array_closure(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Last_when_no_order_by(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Queryable_reprojection(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue#17386")] + public override Task OrderBy_multiple_queries(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_1() { + base.Random_next_is_not_funcletized_1(); } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_2() { + base.Random_next_is_not_funcletized_2(); } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_3() { + base.Random_next_is_not_funcletized_3(); } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_4() { + base.Random_next_is_not_funcletized_4(); } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_5() { + base.Random_next_is_not_funcletized_5(); } - [ConditionalFact(Skip = "Issue #16963")] + [ConditionalFact(Skip = "Issue#17386")] public override void Random_next_is_not_funcletized_6() { + base.Random_next_is_not_funcletized_6(); } + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Projection_when_client_evald_subquery(bool isAsync) + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Where_bool_client_side_negated(bool isAsync) { - return base.Projection_when_client_evald_subquery(isAsync); + return base.Where_bool_client_side_negated(isAsync); } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task SelectMany_after_client_method(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue#17386")] + public override Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) + { + return base.Projection_when_arithmetic_mixed_subqueries(isAsync); + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_bool_client_side_negated(bool isAsync) => null; + #region DefaultIfEmpty - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_client(bool isAsync) => null; + public override Task DefaultIfEmpty_in_subquery(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_client_and_server_non_top_level(bool isAsync) => null; + public override Task DefaultIfEmpty_in_subquery_nested(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_client_and_server_top_level(bool isAsync) => null; + public override Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) => null; + public override void DefaultIfEmpty_without_group_join() + { + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_client_or_server_top_level(bool isAsync) => null; + public override Task Default_if_empty_top_level(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition3(bool isAsync) => null; + public override Task Default_if_empty_top_level_followed_by_projecting_constant(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition4(bool isAsync) => null; + public override Task Default_if_empty_top_level_positive(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition5(bool isAsync) => null; + public override Task Default_if_empty_top_level_projection(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition6(bool isAsync) => null; + public override Task Join_with_default_if_empty_on_both_sources(bool isAsync) + { + return Task.CompletedTask; + } + #endregion - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_subquery_correlated_client_eval(bool isAsync) => null; + #region SelectMany - [ConditionalTheory(Skip = "Issue #16963")] - public override Task All_client_and_server_top_level(bool isAsync) => null; + public override Task Multiple_select_many_with_predicate(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task All_client_or_server_top_level(bool isAsync) => null; + public override Task SelectMany_Joined(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) => null; + public override Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) + { + return Task.CompletedTask; + } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_one_element_Single(bool isAsync) + public override Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) { - return base.Where_query_composition_entity_equality_one_element_Single(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_one_element_First(bool isAsync) + public override Task SelectMany_Joined_Take(bool isAsync) { - return base.Where_query_composition_entity_equality_one_element_First(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_no_elements_Single(bool isAsync) + public override Task SelectMany_correlated_subquery_simple(bool isAsync) { - return base.Where_query_composition_entity_equality_no_elements_Single(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_no_elements_First(bool isAsync) + public override Task SelectMany_correlated_with_outer_1(bool isAsync) { - return base.Where_query_composition_entity_equality_no_elements_First(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(bool isAsync) + public override Task SelectMany_correlated_with_outer_2(bool isAsync) { - return base.Where_query_composition_entity_equality_multiple_elements_SingleOrDefault(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Where_query_composition_entity_equality_multiple_elements_Single(bool isAsync) + public override Task SelectMany_correlated_with_outer_3(bool isAsync) { - return base.Where_query_composition_entity_equality_multiple_elements_Single(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] - public override Task Last_when_no_order_by(bool isAsync) + public override Task SelectMany_correlated_with_outer_4(bool isAsync) + { + return Task.CompletedTask; + } + + public override Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) + { + return Task.CompletedTask; + } + + public override Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) { - return base.Last_when_no_order_by(isAsync); + return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) + { + return Task.CompletedTask; + } + + public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) + { + return Task.CompletedTask; + } + + #endregion + + #region SingleResultProjection public override Task Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2(bool isAsync) { - return base.Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2(isAsync); + return Task.CompletedTask; } + #endregion + + #region NullableError + + public override Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(bool isAsync) + { + return Task.CompletedTask; + } + + #endregion } } diff --git a/test/EFCore.InMemory.FunctionalTests/WithConstructorsInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/WithConstructorsInMemoryTest.cs index 167374aee45..af4cff6ce24 100644 --- a/test/EFCore.InMemory.FunctionalTests/WithConstructorsInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/WithConstructorsInMemoryTest.cs @@ -16,13 +16,6 @@ public WithConstructorsInMemoryTest(WithConstructorsInMemoryFixture fixture) { } - [ConditionalFact(Skip = "See issue#13857")] - public override void Query_with_keyless_type() - { - base.Query_with_keyless_type(); - } - - [ConditionalFact(Skip = "Issue#16963")] public override void Query_and_update_using_constructors_with_property_parameters() { base.Query_and_update_using_constructors_with_property_parameters();