Skip to content

Commit

Permalink
Remove old VS 2013 "portable" csproj; switch tests to .net core 1 xun…
Browse files Browse the repository at this point in the history
…it; force .net core sdk 1 for CLI (sdk 2 cannot build old PCL targets for unknown reason).
  • Loading branch information
VitaliyMF committed Oct 9, 2017
1 parent 6c5dc09 commit 33ba49d
Show file tree
Hide file tree
Showing 11 changed files with 113 additions and 258 deletions.
12 changes: 6 additions & 6 deletions appveyor.yml
@@ -1,5 +1,5 @@
version: 1.0.{build}
os: Visual Studio 2013
os: Visual Studio 2017

branches:
only:
Expand All @@ -8,11 +8,11 @@ branches:
skip_tags: true

install:
- cmd: nuget restore src\NReco.LambdaParser.Portable.sln
- cmd: dotnet restore src\NReco.LambdaParser.sln

build:
project: src\NReco.LambdaParser.Portable.sln
verbosity: minimal
build_script:
- cmd: dotnet build src\NReco.LambdaParser --configuration Release
- cmd: dotnet build src\NReco.LambdaParser.Tests --configuration Release

test_script:
- cmd: nunit-console src\NReco.LambdaParser.Tests\bin\Debug\NReco.LambdaParser.Tests.dll
- cmd: dotnet test src\NReco.LambdaParser.Tests\NReco.LambdaParser.Tests.csproj --configuration Release
28 changes: 0 additions & 28 deletions src/NReco.LambdaParser.Portable.sln

This file was deleted.

98 changes: 48 additions & 50 deletions src/NReco.LambdaParser.Tests/LambdaParserTests.cs
Expand Up @@ -3,16 +3,14 @@
using System.Collections;
using System.Diagnostics;
using System.Text;
using NUnit.Framework;
using NReco;
using NReco.Linq;

using Xunit;

namespace NReco.Linq.Tests {

[TestFixture]
public class LambdaParserTests {

[Test]
[Fact]
public void Eval() {
var lambdaParser = new LambdaParser();

Expand All @@ -30,83 +28,83 @@ public class LambdaParserTests {
varContext["name_with_underscore"] = "a_b";
varContext["_name_with_underscore"] = "_a_b";

Assert.AreEqual("st", lambdaParser.Eval("test.Substring(2)", varContext ) );
Assert.Equal("st", lambdaParser.Eval("test.Substring(2)", varContext ) );

Assert.AreEqual(3, lambdaParser.Eval("1+2", varContext) );
Assert.AreEqual(6, lambdaParser.Eval("1+2+3", varContext));
Assert.AreEqual("b{0}_", lambdaParser.Eval("\"b{0}_\"", varContext));
Assert.Equal(3M, lambdaParser.Eval("1+2", varContext) );
Assert.Equal(6M, lambdaParser.Eval("1+2+3", varContext));
Assert.Equal("b{0}_", lambdaParser.Eval("\"b{0}_\"", varContext));

Assert.AreEqual(3, lambdaParser.Eval("(1+(3-1)*4)/3", varContext));
Assert.Equal(3M, lambdaParser.Eval("(1+(3-1)*4)/3", varContext));

Assert.AreEqual(1, lambdaParser.Eval("one*5*one-(-1+5*5%10)", varContext));
Assert.Equal(1M, lambdaParser.Eval("one*5*one-(-1+5*5%10)", varContext));

Assert.AreEqual("ab", lambdaParser.Eval("\"a\"+\"b\"", varContext));
Assert.Equal("ab", lambdaParser.Eval("\"a\"+\"b\"", varContext));

Assert.AreEqual(4.14, lambdaParser.Eval("pi + 1", varContext) );
Assert.Equal(4.14M, lambdaParser.Eval("pi + 1", varContext) );

Assert.AreEqual(5.14, lambdaParser.Eval("2 +pi", varContext) );
Assert.Equal(5.14M, lambdaParser.Eval("2 +pi", varContext) );

Assert.AreEqual(2.14, lambdaParser.Eval("pi + -one", varContext) );
Assert.Equal(2.14M, lambdaParser.Eval("pi + -one", varContext) );

Assert.AreEqual("test1", lambdaParser.Eval("test + \"1\"", varContext) );
Assert.Equal("test1", lambdaParser.Eval("test + \"1\"", varContext) );

Assert.AreEqual("a_b_a_b", lambdaParser.Eval(" name_with_underscore + _name_with_underscore ", varContext));
Assert.Equal("a_b_a_b", lambdaParser.Eval(" name_with_underscore + _name_with_underscore ", varContext));

Assert.AreEqual(1, lambdaParser.Eval("true or false ? 1 : 0", varContext) );
Assert.Equal(1M, lambdaParser.Eval("true or false ? 1 : 0", varContext) );

Assert.AreEqual(true, lambdaParser.Eval("5<=3 ? false : true", varContext));
Assert.Equal(true, lambdaParser.Eval("5<=3 ? false : true", varContext));

Assert.AreEqual(5, lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext));
Assert.Equal(5M, lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext));

Assert.AreEqual(4, lambdaParser.Eval("pi>0 ? one+two+one : 0", varContext));
Assert.Equal(4M, lambdaParser.Eval("pi>0 ? one+two+one : 0", varContext));

Assert.AreEqual(DateTime.Now.Year, lambdaParser.Eval("now.Year", varContext) );
Assert.Equal(DateTime.Now.Year, lambdaParser.Eval("now.Year", varContext) );

Assert.AreEqual(true, lambdaParser.Eval(" (1+testObj.IntProp)==2 ? testObj.FldTrue : false ", varContext));
Assert.Equal(true, lambdaParser.Eval(" (1+testObj.IntProp)==2 ? testObj.FldTrue : false ", varContext));

Assert.AreEqual("ab2_3", lambdaParser.Eval(" \"a\"+testObj.Format(\"b{0}_{1}\", 2, \"3\".ToString() ).ToString() ", varContext));
Assert.Equal("ab2_3", lambdaParser.Eval(" \"a\"+testObj.Format(\"b{0}_{1}\", 2, \"3\".ToString() ).ToString() ", varContext));

Assert.AreEqual(true, lambdaParser.Eval(" testObj.Hash[\"a\"] == \"1\"", varContext));
Assert.Equal(true, lambdaParser.Eval(" testObj.Hash[\"a\"] == \"1\"", varContext));

Assert.AreEqual(true, lambdaParser.Eval(" (testObj.Hash[\"a\"]-1)==testObj.Hash[\"b\"].Length ", varContext));
Assert.Equal(true, lambdaParser.Eval(" (testObj.Hash[\"a\"]-1)==testObj.Hash[\"b\"].Length ", varContext));

Assert.AreEqual(4.0, lambdaParser.Eval(" arr1[0]+arr1[1] ", varContext));
Assert.Equal(4.0M, lambdaParser.Eval(" arr1[0]+arr1[1] ", varContext));

Assert.AreEqual(2, lambdaParser.Eval(" (new[]{1,2})[1] ", varContext));
Assert.Equal(2M, lambdaParser.Eval(" (new[]{1,2})[1] ", varContext));

Assert.AreEqual(true, lambdaParser.Eval(" new[]{ one } == new[] { 1 } ", varContext));
Assert.Equal(true, lambdaParser.Eval(" new[]{ one } == new[] { 1 } ", varContext));

Assert.AreEqual(3, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }.Count ", varContext));
Assert.Equal(3, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }.Count ", varContext));

Assert.AreEqual(2, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }[\"b\"] ", varContext));
Assert.Equal(2M, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }[\"b\"] ", varContext));

var arr = ((Array)lambdaParser.Eval(" new []{ new dictionary{{\"test\",2}}, new[] { one } }", varContext) );
Assert.AreEqual(2, ((IDictionary)arr.GetValue(0) )["test"] );
Assert.AreEqual(1, ((Array)arr.GetValue(1) ).GetValue(0) );
Assert.Equal(2M, ((IDictionary)arr.GetValue(0) )["test"] );
Assert.Equal(1M, ((Array)arr.GetValue(1) ).GetValue(0) );

Assert.AreEqual("str", lambdaParser.Eval(" testObj.GetDelegNoParam()() ", varContext));
Assert.AreEqual("zzz", lambdaParser.Eval(" testObj.GetDelegOneParam()(\"zzz\") ", varContext));
Assert.Equal("str", lambdaParser.Eval(" testObj.GetDelegNoParam()() ", varContext));
Assert.Equal("zzz", lambdaParser.Eval(" testObj.GetDelegOneParam()(\"zzz\") ", varContext));

Assert.AreEqual(false, lambdaParser.Eval("(testObj.FldTrue and false) || (testObj.FldTrue && false)", varContext ) );
Assert.AreEqual(true, lambdaParser.Eval("false or testObj.FldTrue", varContext ) );
Assert.AreEqual("True", lambdaParser.Eval("testObj.BoolParam(true)", varContext ) );
Assert.Equal(false, lambdaParser.Eval("(testObj.FldTrue and false) || (testObj.FldTrue && false)", varContext ) );
Assert.Equal(true, lambdaParser.Eval("false or testObj.FldTrue", varContext ) );
Assert.Equal("True", lambdaParser.Eval("testObj.BoolParam(true)", varContext ) );

Assert.IsTrue( (bool) lambdaParser.Eval("true && NOT( false )", varContext ) );
Assert.IsTrue( (bool) lambdaParser.Eval("true && !( false )", varContext ) );
Assert.IsFalse( (bool) lambdaParser.Eval("!Yes", varContext ) );
Assert.True( (bool) lambdaParser.Eval("true && NOT( false )", varContext ) );
Assert.True( (bool) lambdaParser.Eval("true && !( false )", varContext ) );
Assert.False( (bool) lambdaParser.Eval("!Yes", varContext ) );

Assert.IsTrue( (bool) lambdaParser.Eval("null == nullVar", varContext ) );
Assert.IsTrue((bool)lambdaParser.Eval("5>nullVar", varContext));
Assert.IsTrue( (bool) lambdaParser.Eval("testObj!=null", varContext ) );
Assert.AreEqual(0, LambdaParser.GetExpressionParameters(lambdaParser.Parse("20 == null")).Length );
Assert.True( (bool) lambdaParser.Eval("null == nullVar", varContext ) );
Assert.True((bool)lambdaParser.Eval("5>nullVar", varContext));
Assert.True( (bool) lambdaParser.Eval("testObj!=null", varContext ) );
Assert.Equal(0, LambdaParser.GetExpressionParameters(lambdaParser.Parse("20 == null")).Length );

lambdaParser = new LambdaParser(new ValueComparer() { NullComparison = ValueComparer.NullComparisonMode.Sql });
Assert.IsFalse((bool)lambdaParser.Eval("null == nullVar", varContext));
Assert.IsFalse((bool)lambdaParser.Eval("nullVar<5", varContext));
Assert.IsFalse((bool)lambdaParser.Eval("nullVar>5", varContext));
Assert.False((bool)lambdaParser.Eval("null == nullVar", varContext));
Assert.False((bool)lambdaParser.Eval("nullVar<5", varContext));
Assert.False((bool)lambdaParser.Eval("nullVar>5", varContext));
}

[Test]
[Fact]
public void EvalCachePerf() {
var lambdaParser = new LambdaParser();

Expand All @@ -118,7 +116,7 @@ public class LambdaParserTests {
sw.Start();
for (int i = 0; i < 10000; i++) {

Assert.AreEqual(105, lambdaParser.Eval("(a*2 + 100)/b", varContext));
Assert.Equal(105M, lambdaParser.Eval("(a*2 + 100)/b", varContext));
}
sw.Stop();
Console.WriteLine("10000 iterations: {0}", sw.Elapsed);
Expand Down
81 changes: 21 additions & 60 deletions src/NReco.LambdaParser.Tests/NReco.LambdaParser.Tests.csproj
@@ -1,67 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7C5C1806-C3A7-494A-9EF0-A6304EBB5BEA}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>NReco.LambdaParser.Tests</RootNamespace>
<TargetFramework>netcoreapp1.0</TargetFramework>
<AssemblyName>NReco.LambdaParser.Tests</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<PackageId>NReco.LambdaParser.Tests</PackageId>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<PackageTargetFallback>$(PackageTargetFallback);portable-net451+win8;dnxcore50;netstandard1.6</PackageTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="nunit.framework, Version=2.6.3.13283, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
</Reference>
</ItemGroup>

<ItemGroup>
<Compile Include="LambdaParserTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ValueComparerTests.cs" />
<ProjectReference Include="..\NReco.LambdaParser\NReco.LambdaParser.csproj" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\NReco.LambdaParser\NReco.LambdaParser.Portable.csproj">
<Project>{2e4066d1-a58e-44bb-ab15-63df19aadaef}</Project>
<Name>NReco.LambdaParser</Name>
</ProjectReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
<PackageReference Include="xunit" Version="2.2.0" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">
<DebugType>portable</DebugType>
</PropertyGroup>

</Project>
19 changes: 2 additions & 17 deletions src/NReco.LambdaParser.Tests/Properties/AssemblyInfo.cs
Expand Up @@ -5,12 +5,10 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("NReco.LambdaParser.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Vitalii Fedorchenko")]
[assembly: AssemblyProduct("NReco.LambdaParser")]
[assembly: AssemblyCopyright("Copyright © Vitalii Fedorchenko 2015")]
[assembly: AssemblyCopyright("Copyright © Vitalii Fedorchenko 2015-2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Expand All @@ -20,17 +18,4 @@
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("62e18c29-c98d-4d6b-a27b-5d23558da4ac")]

// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: Guid("62e18c29-c98d-4d6b-a27b-5d23558da4ac")]

0 comments on commit 33ba49d

Please sign in to comment.