Skip to content

Commit

Permalink
Fix NET35 build + add unit test for OrderBy with IComparer (#561)
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH committed Dec 18, 2021
1 parent 8d66731 commit e32ccb3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
10 changes: 9 additions & 1 deletion src/System.Linq.Dynamic.Core/DynamicClassFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,15 @@ public static class DynamicClassFactory
static DynamicClassFactory()
{
var assemblyName = new AssemblyName(DynamicAssemblyName);
var assemblyBuilder = AssemblyBuilderFactory.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndCollect);
var assemblyBuilder = AssemblyBuilderFactory.DefineDynamicAssembly
(
assemblyName,
#if NET35
AssemblyBuilderAccess.Run
#else
AssemblyBuilderAccess.RunAndCollect
#endif
);

ModuleBuilder = assemblyBuilder.DefineDynamicModule(DynamicModuleName);
}
Expand Down
33 changes: 24 additions & 9 deletions test/System.Linq.Dynamic.Core.Tests/QueryableTests.OrderBy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,34 @@ namespace System.Linq.Dynamic.Core.Tests
{
public partial class QueryableTests
{
[Fact]
public void OrderBy_Dynamic_IComparer()
{
// Arrange
var testList = User.GenerateSampleModels(2);
var qry = testList.AsQueryable();

// Act
var orderBy = testList.OrderBy(x => x.UserName, StringComparer.OrdinalIgnoreCase).ToArray();
var orderByDynamic = qry.OrderBy("UserName", StringComparer.OrdinalIgnoreCase).ToArray();

// Assert
Assert.Equal(orderBy, orderByDynamic);
}

[Fact]
public void OrderBy_Dynamic()
{
//Arrange
// Arrange
var testList = User.GenerateSampleModels(100);
var qry = testList.AsQueryable();

//Act
// Act
var orderById = qry.OrderBy("Id");
var orderByAge = qry.OrderBy("Profile.Age");
var orderByComplex1 = qry.OrderBy("Profile.Age, Id");

//Assert
// Assert
Assert.Equal(testList.OrderBy(x => x.Id).ToArray(), orderById.ToArray());
Assert.Equal(testList.OrderBy(x => x.Profile.Age).ToArray(), orderByAge.ToArray());
Assert.Equal(testList.OrderBy(x => x.Profile.Age).ThenBy(x => x.Id).ToArray(), orderByComplex1.ToArray());
Expand All @@ -27,26 +42,26 @@ public void OrderBy_Dynamic()
[Fact]
public void OrderBy_Dynamic_AsStringExpression()
{
//Arrange
// Arrange
var testList = User.GenerateSampleModels(100);
var qry = testList.AsQueryable();

//Act
// Act
var expected = qry.SelectMany(x => x.Roles.OrderBy(y => y.Name)).Select(x => x.Name);
var orderById = qry.SelectMany("Roles.OrderBy(Name)").Select("Name");

//Assert
// Assert
Assert.Equal(expected.ToArray(), orderById.Cast<string>().ToArray());
}

[Fact]
public void OrderBy_Dynamic_Exceptions()
{
//Arrange
// Arrange
var testList = User.GenerateSampleModels(100, allowNullableProfiles: true);
var qry = testList.AsQueryable();

//Act
// Act
Assert.Throws<ParseException>(() => qry.OrderBy("Bad=3"));
Assert.Throws<ParseException>(() => qry.Where("Id=123"));

Expand All @@ -56,4 +71,4 @@ public void OrderBy_Dynamic_Exceptions()
Assert.Throws<ArgumentException>(() => qry.OrderBy(" "));
}
}
}
}

0 comments on commit e32ccb3

Please sign in to comment.