Skip to content

Commit

Permalink
Merge pull request #1054 from riganti/fix/strings-use-culture-invaria…
Browse files Browse the repository at this point in the history
…nt-operations

Removed usage of culture-sensitive string operations
  • Loading branch information
quigamdev committed Jun 17, 2021
2 parents aa07b84 + 4b2bb67 commit 8fc9ae9
Show file tree
Hide file tree
Showing 14 changed files with 29 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/DotVVM.CommandLine/Names.cs
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
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);
}
}
}
14 changes: 8 additions & 6 deletions src/DotVVM.Framework.Tests/Binding/JavascriptCompilationTests.cs
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
Expand Up @@ -231,8 +231,12 @@ private void AddDefaultStringTranslations()
AddMethodTranslator(typeof(string), nameof(string.LastIndexOf), parameters: new[] { typeof(string), typeof(int) }, translator: new GenericMethodCompiler(
a => a[0].Member("lastIndexOf").Invoke(a[1], a[2])));
AddMethodTranslator(typeof(string), nameof(string.ToUpper), parameterCount: 0, translator: new GenericMethodCompiler(
a => a[0].Member("toUpperCase").Invoke()));
a => a[0].Member("toLocaleUpperCase").Invoke()));
AddMethodTranslator(typeof(string), nameof(string.ToLower), parameterCount: 0, translator: new GenericMethodCompiler(
a => a[0].Member("toLocaleLowerCase").Invoke()));
AddMethodTranslator(typeof(string), nameof(string.ToUpperInvariant), parameterCount: 0, translator: new GenericMethodCompiler(
a => a[0].Member("toUpperCase").Invoke()));
AddMethodTranslator(typeof(string), nameof(string.ToLowerInvariant), parameterCount: 0, translator: new GenericMethodCompiler(
a => a[0].Member("toLowerCase").Invoke()));
AddMethodTranslator(typeof(string), nameof(string.Contains), parameters: new[] { typeof(string) }, translator: new GenericMethodCompiler(
a => a[0].Member("includes").Invoke(a[1])));
Expand Down
Expand Up @@ -893,7 +893,7 @@ private BindingParserNode ReadFormattedExpression()

private static object? ParseNumberLiteral(string text, out string? error)
{
text = text.ToLower();
text = text.ToLowerInvariant();
error = null;
NumberLiteralSuffix type = NumberLiteralSuffix.None;
var lastDigit = text[text.Length - 1];
Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.Framework/Controls/KnockoutHelper.cs
Expand Up @@ -307,7 +307,7 @@ private static JsExpression TransformOptionValueToExpression(DotvvmBindableObjec
{
return null;
}
var handlerName = $"concurrency-{mode.ToString().ToLower()}";
var handlerName = $"concurrency-{mode.ToString().ToLowerInvariant()}";
if ("default".Equals(queueName))
{
return JsonConvert.ToString(handlerName);
Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.Framework/Controls/RouteLink.cs
Expand Up @@ -111,7 +111,7 @@ protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequest

protected virtual void WriteEnabledBinding(IHtmlWriter writer, bool binding)
{
writer.AddKnockoutDataBind("dotvvm-enable", binding.ToString().ToLower());
writer.AddKnockoutDataBind("dotvvm-enable", binding.ToString().ToLowerInvariant());
}

protected virtual void WriteEnabledBinding(IHtmlWriter writer, IValueBinding binding)
Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.Framework/Controls/RouteLinkHelpers.cs
Expand Up @@ -159,7 +159,7 @@ private static string TranslateRouteParameter<T>(DotvvmBindableObject control, K
{
expression = JsonConvert.SerializeObject(param.Value, DefaultSerializerSettingsProvider.Instance.Settings);
}
return KnockoutHelper.MakeStringLiteral(caseSensitive ? param.Key : param.Key.ToLower()) + ": " + expression;
return KnockoutHelper.MakeStringLiteral(caseSensitive ? param.Key : param.Key.ToLowerInvariant()) + ": " + expression;
}

private static void EnsureValidBindingType(IBinding binding)
Expand Down
6 changes: 3 additions & 3 deletions src/DotVVM.Framework/Controls/ValidationSummary.cs
Expand Up @@ -75,9 +75,9 @@ protected override void AddAttributesToRender(IHtmlWriter writer, IDotvvmRequest
var group = new KnockoutBindingGroup();
{
group.Add("target", expression);
group.Add("includeErrorsFromChildren", IncludeErrorsFromChildren.ToString().ToLower());
group.Add("includeErrorsFromTarget", IncludeErrorsFromTarget.ToString().ToLower());
group.Add("hideWhenValid", HideWhenValid.ToString().ToLower());
group.Add("includeErrorsFromChildren", IncludeErrorsFromChildren.ToString().ToLowerInvariant());
group.Add("includeErrorsFromTarget", IncludeErrorsFromTarget.ToString().ToLowerInvariant());
group.Add("hideWhenValid", HideWhenValid.ToString().ToLowerInvariant());
}
writer.AddKnockoutDataBind("dotvvm-validationSummary", group);

Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.Framework/Hosting/MarkupFile.cs
Expand Up @@ -18,7 +18,7 @@ public override int GetHashCode()
{
unchecked
{
return ((FullPath != null ? FullPath.ToLower().GetHashCode() : 0) * 397) ^ LastWriteDateTimeUtc.GetHashCode();
return ((FullPath != null ? FullPath.ToLowerInvariant().GetHashCode() : 0) * 397) ^ LastWriteDateTimeUtc.GetHashCode();
}
}

Expand Down
Expand Up @@ -156,8 +156,8 @@ private static JObject CreateDateInfoJson(DateTimeFormatInfo di)
names = di.MonthNames,
namesAbbr = di.AbbreviatedMonthNames
},
AM = new[] { di.AMDesignator, di.AMDesignator.ToLower(), di.AMDesignator.ToUpper() },
PM = new[] { di.PMDesignator, di.PMDesignator.ToLower(), di.PMDesignator.ToUpper() },
AM = new[] { di.AMDesignator, di.AMDesignator.ToLowerInvariant(), di.AMDesignator.ToUpperInvariant() },
PM = new[] { di.PMDesignator, di.PMDesignator.ToLowerInvariant(), di.PMDesignator.ToUpperInvariant() },
eras = di.Calendar.Eras.Select(era => new { offset = 0, start = (string)null, name = di.GetEraName(era) }).ToArray(),
twoDigitYearMax = di.Calendar.TwoDigitYearMax,
patterns = new
Expand Down
Expand Up @@ -156,7 +156,7 @@ private string GetOperationNameFromPath(SwaggerOperationDescription operation)
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);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/DotVVM.Samples.Tests/ErrorsTests.cs
Expand Up @@ -83,7 +83,7 @@ public void Error_NotAllowedHardCodedPropertyValue()
AssertUI.InnerText(browser.First("[class='exceptionMessage']")
,
s =>
s.ToLower().Contains("was not recognized as a valid Boolean.".ToLower())
s.ToLowerInvariant().Contains("was not recognized as a valid boolean.")
, "Expected message is 'was not recognized as a valid Boolean.'");
AssertUI.InnerText(browser.First("[class='errorUnderline']")
Expand Down
Expand Up @@ -132,7 +132,7 @@ private void CheckRadioButtonsState(IBrowserWrapper browser, RadioButtonValues s
radios.RemoveAt(checkedRadioIndex);
radios.ForEach(s => AssertUI.IsNotChecked(s));

AssertUI.TextEquals(selectedColorElement, selectedColor.ToString().ToLower());
AssertUI.TextEquals(selectedColorElement, selectedColor.ToString().ToLowerInvariant());
}

private void RunComplexViewModelProtectionTest(Action<IBrowserWrapper> beforePostback, Action<IBrowserWrapper> afterPostback)
Expand Down

0 comments on commit 8fc9ae9

Please sign in to comment.