Skip to content

Commit

Permalink
Merge branch 'feature/azure-pipelines-linux' into feature/azure-pipel…
Browse files Browse the repository at this point in the history
…ines
  • Loading branch information
cafour committed Jul 15, 2021
2 parents b78e986 + 204ec76 commit e3f4aef
Show file tree
Hide file tree
Showing 55 changed files with 791 additions and 120 deletions.
6 changes: 6 additions & 0 deletions .azure/pipelines/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,29 @@ jobs:
env:
GITHUB_TOKEN: $(GitHub.Token)
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFormat: VSTest
testResultsFiles: $(DOTVVM_ROOT)/artifacts/test/unit-test-results.trx
buildConfiguration: $(BUILD_CONFIGURATION)
testRunTitle: Linux Unit Tests
failTaskOnFailedTests: true
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFormat: VSTest
testResultsFiles: $(DOTVVM_ROOT)/artifacts/test/ui-test-results.trx
buildConfiguration: $(BUILD_CONFIGURATION)
testRunTitle: Linux UI Tests
failTaskOnFailedTests: true
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFormat: JUnit
testResultsFiles: $(DOTVVM_ROOT)/artifacts/test/js-test-results.xml
buildConfiguration: $(BUILD_CONFIGURATION)
testRunTitle: Linux Jest Tests
failTaskOnFailedTests: true

- job: testWindows
displayName: Run tests on Windows
Expand Down
10 changes: 5 additions & 5 deletions ci/linux/run.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#/bin/bash
#!/bin/bash

# ================
# argument parsing
Expand All @@ -10,7 +10,7 @@ LONGOPTS="help,\
root:,config:,samples-profile:,samples-port:,samples-port-api:,\
all,clean,npm-build,sln-restore,sln-build,unit-tests,js-tests,ui-tests,\
no-all,no-clean,no-npm-build,no-sln-restore,no-sln-build,no-unit-tests,no-js-tests,no-ui-tests"
TEMP=$(getopt -o "$SHORTOPS" -l "$LONGOPTS" -n "$PROGRAM" -- "$@")
TEMP=$(getopt -o "$SHORTOPTS" -l "$LONGOPTS" -n "$PROGRAM" -- "$@")
if [ $? -ne 0 ]; then
exit 1
fi
Expand Down Expand Up @@ -111,7 +111,7 @@ EOF
exit 1
fi

eval $OPTION=$VALUE
eval "$OPTION=$VALUE"
shift
continue;
;;
Expand Down Expand Up @@ -169,8 +169,8 @@ function run_named_command {
shift

print_header $NAME
tput setaf 4 && printf "running '$@'\n" && tput sgr0
eval $@
tput setaf 4 && echo "running '$@'" && tput sgr0
eval "$@"
}

function ensure_named_command {
Expand Down
4 changes: 2 additions & 2 deletions src/DotVVM.CommandLine/DotVVM.CommandLine.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyTitle>DotVVM.CommandLine</AssemblyTitle>
<AssemblyName>dotnet-dotvvm</AssemblyName>
<VersionPrefix>3.1.0-preview03-112034</VersionPrefix>
<VersionPrefix>3.1.0-preview06-final</VersionPrefix>
<TargetFramework>netcoreapp2.1</TargetFramework>
<AssemblyOriginatorKeyFile>dotvvmwizard.snk</AssemblyOriginatorKeyFile>
<SignAssembly>true</SignAssembly>
Expand All @@ -21,7 +21,7 @@
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
<PackageId>DotVVM.CommandLine</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>Command-line tools for DotVVM.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand Down
4 changes: 2 additions & 2 deletions src/DotVVM.CommandLine/Names.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static string GetClass(string name)
}

var sb = new StringBuilder(name);
sb[0] = char.ToUpper(sb[0]);
sb[0] = char.ToUpperInvariant(sb[0]);
return sb.ToString();
}

Expand All @@ -39,7 +39,7 @@ public static string GetViewModel(string viewName)
}

var sb = new StringBuilder(viewName);
sb[0] = char.ToUpper(sb[0]);
sb[0] = char.ToUpperInvariant(sb[0]);

if (!viewName.EndsWith(ViewModelClassSuffix, StringComparison.CurrentCultureIgnoreCase))
{
Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.CommandLine/OpenApi/ApiClientUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private static string GetOperationNameFromPath(OpenApiOperationDescription opera
var pathSegments = operation.Path.Trim('/').Split('/').Where(s => !s.Contains('{')).ToArray();
var lastPathSegment = pathSegments.LastOrDefault();
var path = string.Concat(pathSegments.Take(pathSegments.Length - 1).Select(s => s + "_"));
return path + operation.Method.ToString()[0].ToString().ToUpper() + operation.Method.ToString().Substring(1).ToLower() + ConversionUtilities.ConvertToUpperCamelCase(lastPathSegment.Replace('_', '-'), false);
return path + operation.Method.ToString()[0].ToString().ToUpperInvariant() + operation.Method.ToString().Substring(1).ToLowerInvariant() + ConversionUtilities.ConvertToUpperCamelCase(lastPathSegment.Replace('_', '-'), false);
}
}
}
4 changes: 2 additions & 2 deletions src/DotVVM.Core/DotVVM.Core.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<VersionPrefix>3.1.0-preview03-112034</VersionPrefix>
<VersionPrefix>3.1.0-preview06-final</VersionPrefix>
<TargetFrameworks>netstandard1.6;net451</TargetFrameworks>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Expand All @@ -17,7 +17,7 @@
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<PackageId>DotVVM.Core</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>This package contains base classes and interfaces of DotVVM that might be useful in a business layer.
DotVVM is an open source ASP.NET-based framework which allows to build modern web apps without writing any JavaScript code.</Description>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>DotVVM.Api.Swashbuckle.AspNetCore</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>Swashbuckle.AspNetCore extensions for DotVVM.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net451</TargetFramework>
<PackageId>DotVVM.Api.Swashbuckle.Owin</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>Swashbuckle.Owin extensions for DotVVM.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<VersionPrefix>3.1.0-preview03-112034</VersionPrefix>
<VersionPrefix>3.1.0-preview06-final</VersionPrefix>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Expand All @@ -17,7 +17,7 @@
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<PackageId>DotVVM.AspNetCore</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>
This package contains ASP.NET Core middleware and hosting infrastructure for DotVVM apps. It supports both .NET Framework and .NET Core.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<VersionPrefix>3.1.0-preview03-112034</VersionPrefix>
<VersionPrefix>3.1.0-preview06-final</VersionPrefix>
<TargetFramework>net451</TargetFramework>
<RuntimeIdentifiers>win7-x64;win7-x86</RuntimeIdentifiers>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Expand All @@ -17,7 +17,7 @@
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<PackageId>DotVVM.Owin</PackageId>
<PackageVersion>3.1.0-preview03-112034</PackageVersion>
<PackageVersion>3.1.0-preview06-final</PackageVersion>
<Authors>RIGANTI</Authors>
<Description>
This package contains OWIN middleware and hosting infrastructure for DotVVM apps.
Expand Down
70 changes: 70 additions & 0 deletions src/DotVVM.Framework.Tests/Binding/BindingCompilationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,14 @@ public void BindingCompiler_Valid_Lambda_Test()
Assert.AreEqual(65, result2);
}

[TestMethod]
public void BindingCompiler_GenericMethodCall_ExplicitTypeParameters()
{
var viewModel = new TestViewModel { StringProp = "abc" };
var result = (Type)ExecuteBinding("GetType<string>(StringProp)", viewModel);
Assert.AreEqual(typeof(string), result);
}

[TestMethod]
[DataRow("() => ;", typeof(Action), null)]
[DataRow("() => \"HelloWorld\"", typeof(Func<string>), typeof(string))]
Expand Down Expand Up @@ -379,6 +387,68 @@ public void BindingCompiler_Valid_LambdaParameter_PreferFunc(string expr)
Assert.AreEqual("Func", result);
}

[TestMethod]
[DataRow("(int? arg) => arg.Value + 1", typeof(Func<int?, int>))]
[DataRow("(double? arg) => arg.Value + 0.1", typeof(Func<double?, double>))]
public void BindingCompiler_Valid_LambdaParameter_Nullable(string expr, Type type)
{
var viewModel = new TestLambdaCompilation();
var result = ExecuteBinding(expr, viewModel);
Assert.AreEqual(type, result.GetType());
}

[TestMethod]
[DataRow("(int[] array) => array[0]", typeof(Func<int[], int>))]
[DataRow("(double[] array) => array[0]", typeof(Func<double[], double>))]
[DataRow("(int[][] jaggedArray) => jaggedArray[0][1]", typeof(Func<int[][], int>))]
[DataRow("(int[][] jaggedArray) => jaggedArray[0]", typeof(Func<int[][], int[]>))]
public void BindingCompiler_Valid_LambdaParameter_Array(string expr, Type type)
{
var viewModel = new TestLambdaCompilation();
var result = ExecuteBinding(expr, viewModel);
Assert.AreEqual(type, result.GetType());
}

[TestMethod]
[DataRow("(int?[] arrayOfNullables) => arrayOfNullables[0]", typeof(Func<int?[], int?>))]
[DataRow("(System.Collections.Generic.List<int?> list) => list[0]", typeof(Func<List<int?>, int?>))]
[DataRow("(System.Collections.Generic.List<int?[]> list) => list[0]", typeof(Func<List<int?[]>, int?[]>))]
[DataRow("(System.Collections.Generic.List<int?[][]> list) => list[0][0]", typeof(Func<List<int?[][]>, int?[]>))]
[DataRow("(System.Collections.Generic.Dictionary<int?,double?> dict) => dict[0]", typeof(Func<Dictionary<int?, double?>, double?>))]
[DataRow("(System.Collections.Generic.Dictionary<int?[],double?> dict) => 0", typeof(Func<Dictionary<int?[], double?>, int>))]
public void BindingCompiler_Valid_LambdaParameter_CombinedTypeModifies(string expr, Type type)
{
var viewModel = new TestLambdaCompilation();
var result = ExecuteBinding(expr, viewModel);
Assert.AreEqual(type, result.GetType());
}

[TestMethod]
[DataRow("(string? arg) => arg")]
[DataRow("(int[]? arg) => arg")]
public void BindingCompiler_Invalid_LambdaParameter_NullableReferenceTypes(string expr)
{
var exceptionThrown = false;
try
{
var viewModel = new TestLambdaCompilation();
ExecuteBinding(expr, viewModel);
}
catch (Exception e)
{
// Get inner-most exception
var current = e;
while (current.InnerException != null)
current = current.InnerException;

Assert.AreEqual(typeof(BindingCompilationException), current.GetType());
StringAssert.Contains(current.Message, "as nullable is not supported!");
exceptionThrown = true;
}

Assert.IsTrue(exceptionThrown);
}

[TestMethod]
public void BindingCompiler_Valid_ExtensionMethods()
{
Expand Down
49 changes: 49 additions & 0 deletions src/DotVVM.Framework.Tests/Binding/CustomExtensionMethodTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,61 @@ public void Call_NotImportedExtensionMethodThrows()
// Not imported extension
CreateCall(notImportedTarget, Array.Empty<Expression>(), new[] { new NamespaceImport("DotVVM.Framework.Tests.Binding") });
}

[TestMethod]
public void Call_ExtensionMethodsWithOptionalArguments_UseDefaultValue()
{
var importedTarget = new MethodGroupExpression() {
MethodName = nameof(TestExtensions.ExtensionMethodWithOptionalArgument),
Target = Expression.Constant(11)
};

// Imported extension
var expression = CreateCall(importedTarget, Array.Empty<Expression>(), new[] { new NamespaceImport("DotVVM.Framework.Tests.Binding"), new NamespaceImport("DotVVM.Framework.Tests.Binding") });
var result = Expression.Lambda<Func<int>>(expression).Compile().Invoke();
Assert.AreEqual(321, result);
}

[TestMethod]
public void Call_ExtensionMethodsWithOptionalArguments_OverrideDefaultValue()
{
var importedTarget = new MethodGroupExpression() {
MethodName = nameof(TestExtensions.ExtensionMethodWithOptionalArgument),
Target = Expression.Constant(11)
};

// Imported extension
var expression = CreateCall(importedTarget, new[] { Expression.Constant(123) }, new[] { new NamespaceImport("DotVVM.Framework.Tests.Binding") });
var result = Expression.Lambda<Func<int>>(expression).Compile().Invoke();
Assert.AreEqual(123, result);
}

[TestMethod]
public void Call_ExtensionMethods_DuplicitImport_DoesNotThrow()
{
var importedTarget = new MethodGroupExpression() {
MethodName = nameof(TestExtensions.Increment),
Target = Expression.Constant(11)
};

// Imported extension
var expression = CreateCall(importedTarget, Array.Empty<Expression>(),
new[] {
new NamespaceImport("DotVVM.Framework.Tests.Binding"),
new NamespaceImport("DotVVM.Framework.Tests.Binding")
});
var result = Expression.Lambda<Func<int>>(expression).Compile().Invoke();
Assert.AreEqual(12, result);
}
}

public static class TestExtensions
{
public static int Increment(this int number)
=> ++number;

public static int ExtensionMethodWithOptionalArgument(this int number, int arg = 321)
=> arg;
}

namespace AmbiguousExtensions
Expand Down
14 changes: 8 additions & 6 deletions src/DotVVM.Framework.Tests/Binding/JavascriptCompilationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ public void JsTranslator_EnumerableDistinct_NonPrimitiveTypesThrows(string bindi
public void JsTranslator_EnumerableMax(string binding, string property, bool nullable)
{
var result = CompileBinding(binding, new[] { new NamespaceImport("System.Linq") }, new[] { typeof(TestArraysViewModel) });
Assert.AreEqual($"dotvvm.translations.array.max({property}(),function(arg){{return ko.unwrap(arg);}},{(!nullable).ToString().ToLower()})", result);
Assert.AreEqual($"dotvvm.translations.array.max({property}(),function(arg){{return ko.unwrap(arg);}},{(!nullable).ToString().ToLowerInvariant()})", result);
}

[TestMethod]
Expand All @@ -629,7 +629,7 @@ public void JsTranslator_EnumerableMax(string binding, string property, bool nul
public void JsTranslator_EnumerableMax_WithSelector(string binding, string property, bool nullable)
{
var result = CompileBinding(binding, new[] { new NamespaceImport("System.Linq") }, new[] { typeof(TestArraysViewModel) });
Assert.AreEqual($"dotvvm.translations.array.max({property}(),function(item){{return -ko.unwrap(item);}},{(!nullable).ToString().ToLower()})", result);
Assert.AreEqual($"dotvvm.translations.array.max({property}(),function(item){{return -ko.unwrap(item);}},{(!nullable).ToString().ToLowerInvariant()})", result);
}

[TestMethod]
Expand All @@ -656,7 +656,7 @@ public void JsTranslator_EnumerableMax_WithSelector(string binding, string prope
public void JsTranslator_EnumerableMin(string binding, string property, bool nullable)
{
var result = CompileBinding(binding, new[] { new NamespaceImport("System.Linq") }, new[] { typeof(TestArraysViewModel) });
Assert.AreEqual($"dotvvm.translations.array.min({property}(),function(arg){{return ko.unwrap(arg);}},{(!nullable).ToString().ToLower()})", result);
Assert.AreEqual($"dotvvm.translations.array.min({property}(),function(arg){{return ko.unwrap(arg);}},{(!nullable).ToString().ToLowerInvariant()})", result);
}

[TestMethod]
Expand All @@ -683,7 +683,7 @@ public void JsTranslator_EnumerableMin(string binding, string property, bool nul
public void JsTranslator_EnumerableMin_WithSelector(string binding, string property, bool nullable)
{
var result = CompileBinding(binding, new[] { new NamespaceImport("System.Linq") }, new[] { typeof(TestArraysViewModel) });
Assert.AreEqual($"dotvvm.translations.array.min({property}(),function(item){{return -ko.unwrap(item);}},{(!nullable).ToString().ToLower()})", result);
Assert.AreEqual($"dotvvm.translations.array.min({property}(),function(item){{return -ko.unwrap(item);}},{(!nullable).ToString().ToLowerInvariant()})", result);
}

[TestMethod]
Expand Down Expand Up @@ -941,8 +941,10 @@ public void JavascriptCompilation_ApiRefreshOn()
}

[DataTestMethod]
[DataRow("StringProp.ToUpper()", "StringProp().toUpperCase()")]
[DataRow("StringProp.ToLower()", "StringProp().toLowerCase()")]
[DataRow("StringProp.ToUpper()", "StringProp().toLocaleUpperCase()")]
[DataRow("StringProp.ToLower()", "StringProp().toLocaleLowerCase()")]
[DataRow("StringProp.ToUpperInvariant()", "StringProp().toUpperCase()")]
[DataRow("StringProp.ToLowerInvariant()", "StringProp().toLowerCase()")]
[DataRow("StringProp.IndexOf('test')", "StringProp().indexOf(\"test\")")]
[DataRow("StringProp.IndexOf('test',1)", "StringProp().indexOf(\"test\",1)")]
[DataRow("StringProp.LastIndexOf('test')", "StringProp().lastIndexOf(\"test\")")]
Expand Down
Loading

0 comments on commit e3f4aef

Please sign in to comment.