#1

#1

coverage for nullable type TryTo methods.

--- Dot.Net.DevFast/Dot.Net.DevFast.Tests/Extensions/StringExt/StringTryToTest.cs
+++ Dot.Net.DevFast/Dot.Net.DevFast.Tests/Extensions/StringExt/StringTryToTest.cs
@@ -71,6 +71,44 @@
         }

         [Test]
+        [TestCase("       ", default(Type), false)]
+        [TestCase("", default(Type), false)]
+        [TestCase(null, default(Type), false)]
+        [TestCase("stringtrytotest", default(Type), false)]
+        [TestCase("STRINGTRYTOTEST", default(Type), false)]
+        [TestCase("dot.net.DevFast.Tests.Extensions.stringext.stringtrytotest, dot.net.DevFast.Tests",
+            typeof(StringTryToTest), true)]
+        [TestCase("DOT.NET.DEVFAST.TESTS.EXTENSIONS.STRINGEXT.STRINGTRYTOTEST, DOT.NET.DevFast.TESTS",
+            typeof(StringTryToTest), true)]
+        [TestCase("Dot.Net.DevFast.Tests.Extensions.StringExt.StringTryToTest, Dot.Net.DevFast.Tests",
+            typeof(StringTryToTest), true)]
+        public void TryTo_Type_Works_As_Expected_When_IgnoreCase_Is_True(string input,
+            Type expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out Type outcome) == returnVal);
+            Assert.True(ReferenceEquals(outcome, expected));
+        }
+
+        [Test]
+        [TestCase("       ", default(Type), false)]
+        [TestCase("", default(Type), false)]
+        [TestCase(null, default(Type), false)]
+        [TestCase("stringtrytotest", default(Type), false)]
+        [TestCase("STRINGTRYTOTEST", default(Type), false)]
+        [TestCase("dot.net.DevFast.Tests.Extensions.stringext.stringtrytotest, dot.net.DevFast.tests",
+            default(Type), false)]
+        [TestCase("DOT.NET.DevFast.Tests.Extensions.STRINGEXT.STRINGTRYTOTEST, DOT.NET.DevFast.TESTS",
+            default(Type), false)]
+        [TestCase("Dot.Net.DevFast.Tests.Extensions.StringExt.StringTryToTest, Dot.Net.DevFast.Tests",
+            typeof(StringTryToTest), true)]
+        public void TryTo_Type_Works_As_Expected_When_IgnoreCase_Is_False(string input,
+            Type expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out Type outcome, false) == returnVal);
+            Assert.True(ReferenceEquals(outcome, expected));
+        }
+
+        [Test]
         [TestCase("true", true, true)]
         [TestCase("false", false, true)]
         [TestCase("  true   ", true, true)]
@@ -89,44 +127,6 @@
         {
             Assert.True(input.TryTo(out bool outcome) == returnVal);
             Assert.True(outcome.Equals(expected));
-        }
-
-        [Test]
-        [TestCase("       ", default(Type), false)]
-        [TestCase("", default(Type), false)]
-        [TestCase(null, default(Type), false)]
-        [TestCase("stringtrytotest", default(Type), false)]
-        [TestCase("STRINGTRYTOTEST", default(Type), false)]
-        [TestCase("dot.net.DevFast.Tests.Extensions.stringext.stringtrytotest, dot.net.DevFast.Tests",
-            typeof(StringTryToTest), true)]
-        [TestCase("DOT.NET.DEVFAST.TESTS.EXTENSIONS.STRINGEXT.STRINGTRYTOTEST, DOT.NET.DevFast.TESTS",
-            typeof(StringTryToTest), true)]
-        [TestCase("Dot.Net.DevFast.Tests.Extensions.StringExt.StringTryToTest, Dot.Net.DevFast.Tests",
-            typeof(StringTryToTest), true)]
-        public void TryTo_Type_Works_As_Expected_When_IgnoreCase_Is_True(string input,
-            Type expected, bool returnVal)
-        {
-            Assert.True(input.TryTo(out Type outcome) == returnVal);
-            Assert.True(ReferenceEquals(outcome, expected));
-        }
-
-        [Test]
-        [TestCase("       ", default(Type), false)]
-        [TestCase("", default(Type), false)]
-        [TestCase(null, default(Type), false)]
-        [TestCase("stringtrytotest", default(Type), false)]
-        [TestCase("STRINGTRYTOTEST", default(Type), false)]
-        [TestCase("dot.net.DevFast.Tests.Extensions.stringext.stringtrytotest, dot.net.DevFast.tests",
-            default(Type), false)]
-        [TestCase("DOT.NET.DevFast.Tests.Extensions.STRINGEXT.STRINGTRYTOTEST, DOT.NET.DevFast.TESTS",
-            default(Type), false)]
-        [TestCase("Dot.Net.DevFast.Tests.Extensions.StringExt.StringTryToTest, Dot.Net.DevFast.Tests",
-            typeof(StringTryToTest), true)]
-        public void TryTo_Type_Works_As_Expected_When_IgnoreCase_Is_False(string input,
-            Type expected, bool returnVal)
-        {
-            Assert.True(input.TryTo(out Type outcome, false) == returnVal);
-            Assert.True(ReferenceEquals(outcome, expected));
         }

         [Test]
@@ -488,6 +488,418 @@
             }
         }

+        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+        [Test]
+        [TestCase("true", true, true)]
+        [TestCase("false", false, true)]
+        [TestCase("  true   ", true, true)]
+        [TestCase(" false  ", false, true)]
+        [TestCase("  TRUE   ", true, true)]
+        [TestCase(" FALSE  ", false, true)]
+        [TestCase("  TRuE   ", true, true)]
+        [TestCase(" FAlsE  ", false, true)]
+        [TestCase("notbool", null, false)]
+        [TestCase("boolean", null, false)]
+        [TestCase(" invalid_bool ", null, false)]
+        [TestCase("       ", null, true)]
+        [TestCase("", null, true)]
+        [TestCase(null, null, true)]
+        public void TryTo_Nullable_Bool_Works_As_Expected(string input, bool? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out bool? outcome) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, 3, true)]
+        [TestCase("-2147483648", NumberStyles.Any, null, int.MinValue, true)]
+        [TestCase("2147483647", NumberStyles.Any, null, int.MaxValue, true)]
+        [TestCase("-2 147 483 648", NumberStyles.Any, "fr-FR", int.MinValue, true)]
+        [TestCase("2 147 483 647", NumberStyles.Any, "fr-FR", int.MaxValue, true)]
+        public void TryTo_Nullable_Int_Works_As_Expected(string input, NumberStyles style, string provider,
+            int? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out int? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (long)3, true)]
+        [TestCase("-2147483648", NumberStyles.Any, null, (long)int.MinValue, true)]
+        [TestCase("2147483647", NumberStyles.Any, null, (long)int.MaxValue, true)]
+        [TestCase("-2 147 483 648", NumberStyles.Any, "fr-FR", (long)int.MinValue, true)]
+        [TestCase("2 147 483 647", NumberStyles.Any, "fr-FR", (long)int.MaxValue, true)]
+        [TestCase("-9223372036854775808", NumberStyles.Any, null, long.MinValue, true)]
+        [TestCase("9223372036854775807", NumberStyles.Any, null, long.MaxValue, true)]
+        [TestCase("-9 223 372 036 854 775 808", NumberStyles.Any, "fr-FR", long.MinValue, true)]
+        [TestCase("9 223 372 036 854 775 807", NumberStyles.Any, "fr-FR", long.MaxValue, true)]
+        public void TryTo_Nullable_Long_Works_As_Expected(string input, NumberStyles style, string provider,
+            long? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out long? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (byte)3, true)]
+        [TestCase("0", NumberStyles.Any, null, byte.MinValue, true)]
+        [TestCase("255", NumberStyles.Any, null, byte.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, "fr-FR", byte.MinValue, true)]
+        [TestCase("255", NumberStyles.Any, "fr-FR", byte.MaxValue, true)]
+        public void TryTo_Nullable_Byte_Works_As_Expected(string input, NumberStyles style, string provider,
+            byte? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out byte? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (sbyte)3, true)]
+        [TestCase("-128", NumberStyles.Any, null, sbyte.MinValue, true)]
+        [TestCase("127", NumberStyles.Any, null, sbyte.MaxValue, true)]
+        [TestCase("-128", NumberStyles.Any, "fr-FR", sbyte.MinValue, true)]
+        [TestCase("127", NumberStyles.Any, "fr-FR", sbyte.MaxValue, true)]
+        public void TryTo_Nullable_SByte_Works_As_Expected(string input, NumberStyles style, string provider,
+            sbyte? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out sbyte? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (short)3, true)]
+        [TestCase("-32768", NumberStyles.Any, null, short.MinValue, true)]
+        [TestCase("32767", NumberStyles.Any, null, short.MaxValue, true)]
+        [TestCase("-32 768", NumberStyles.Any, "fr-FR", short.MinValue, true)]
+        [TestCase("32 767", NumberStyles.Any, "fr-FR", short.MaxValue, true)]
+        public void TryTo_Nullable_Short_Works_As_Expected(string input, NumberStyles style, string provider,
+            short? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out short? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (ushort)3, true)]
+        [TestCase("0", NumberStyles.Any, null, ushort.MinValue, true)]
+        [TestCase("65535", NumberStyles.Any, null, ushort.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, "fr-FR", ushort.MinValue, true)]
+        [TestCase("65 535", NumberStyles.Any, "fr-FR", ushort.MaxValue, true)]
+        public void TryTo_Nullable_UShort_Works_As_Expected(string input, NumberStyles style, string provider,
+            ushort? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out ushort? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (uint)3, true)]
+        [TestCase("0", NumberStyles.Any, null, uint.MinValue, true)]
+        [TestCase("4294967295", NumberStyles.Any, null, uint.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, "fr-FR", uint.MinValue, true)]
+        [TestCase("4 294 967 295", NumberStyles.Any, "fr-FR", uint.MaxValue, true)]
+        public void TryTo_Nullable_UInt_Works_As_Expected(string input, NumberStyles style, string provider,
+            uint? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out uint? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0000", NumberStyles.Any, null, (ulong)3, true)]
+        [TestCase("0", NumberStyles.Any, null, (ulong)uint.MinValue, true)]
+        [TestCase("4294967295", NumberStyles.Any, null, (ulong)uint.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, "fr-FR", (ulong)uint.MinValue, true)]
+        [TestCase("4 294 967 295", NumberStyles.Any, "fr-FR", (ulong)uint.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, null, ulong.MinValue, true)]
+        [TestCase("18446744073709551615", NumberStyles.Any, null, ulong.MaxValue, true)]
+        [TestCase("0", NumberStyles.Any, "fr-FR", ulong.MinValue, true)]
+        [TestCase("18 446 744 073 709 551 615", NumberStyles.Any, "fr-FR", ulong.MaxValue, true)]
+        public void TryTo_Nullable_ULong_Works_As_Expected(string input, NumberStyles style, string provider,
+            ulong? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out ulong? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, (float)3.0001, true)]
+        [TestCase("3.0000", NumberStyles.Any, null, (float)3, true)]
+        [TestCase("-3.40282", NumberStyles.Any, null, (float)-3.40282, true)]
+        [TestCase("3.40282", NumberStyles.Any, null, (float)3.40282, true)]
+        [TestCase("-3,40282", NumberStyles.Any, "fr-FR", (float)-3.40282, true)]
+        [TestCase("3,40282", NumberStyles.Any, "fr-FR", (float)3.40282, true)]
+        public void TryTo_Nullable_Float_Works_As_Expected(string input, NumberStyles style, string provider,
+            float? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out float? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome.Equals(expected));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, null, true)]
+        [TestCase("", NumberStyles.Any, null, null, true)]
+        [TestCase(null, NumberStyles.Any, null, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, null, false)]
+        [TestCase("a2", NumberStyles.Any, null, null, false)]
+        [TestCase("3a123", NumberStyles.Any, null, null, false)]
+        [TestCase("3_", NumberStyles.Any, null, null, false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, null, null, false)]
+        [TestCase("3.0001", NumberStyles.Any, null, 3.0001, true)]
+        [TestCase("3.0000", NumberStyles.Any, null, (double)3, true)]
+        [TestCase("-3.40282", NumberStyles.Any, null, -3.40282, true)]
+        [TestCase("3.40282", NumberStyles.Any, null, 3.40282, true)]
+        [TestCase("-3,40282", NumberStyles.Any, "fr-FR", -3.40282, true)]
+        [TestCase("3,40282", NumberStyles.Any, "fr-FR", 3.40282, true)]
+        public void TryTo_Nullable_Double_Works_As_Expected(string input, NumberStyles style, string provider,
+            double? expected, bool returnVal)
+        {
+            Assert.True(input.TryTo(out double? outcome, style,
+                    string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(returnVal ? outcome.Equals(expected) : (outcome == null));
+        }
+
+        [Test]
+        [TestCase("       ", NumberStyles.Any, null, true)]
+        [TestCase("", NumberStyles.Any, "fr-FR", true)]
+        [TestCase(null, NumberStyles.Any, null, true)]
+        [TestCase("    a3   ", NumberStyles.Any, null, false)]
+        [TestCase("a2", NumberStyles.Any, "fr-FR", false)]
+        [TestCase("3a123", NumberStyles.Any, null, false)]
+        [TestCase("3_", NumberStyles.Any, "fr-FR", false)]
+        [TestCase("3    ", NumberStyles.AllowLeadingWhite, null, false)]
+        [TestCase("   3", NumberStyles.AllowTrailingWhite, "fr-FR", false)]
+        public void TryTo_Nullable_Decimal_When_Return_Value_Is_False(string input, NumberStyles style,
+            string provider, bool returnVal)
+        {
+            Assert.True(input.TryTo(out decimal? outcome, style,
+                string.IsNullOrWhiteSpace(provider) ? null : new CultureInfo(provider)) == returnVal);
+            Assert.True(outcome == null);
+        }
+
+        [Test]
+        public void TryTo_Nullable_Decimal_When_Return_Value_Is_True_And_String_Is_Valid()
+        {
+            Assert.True("3.0001".TryTo(out decimal? outcome));
+            Assert.True(outcome.Equals(3.0001m));
+
+            Assert.True("3.0000".TryTo(out outcome));
+            Assert.True(outcome.Equals(3.0000m));
+
+            Assert.True("3.40282".TryTo(out outcome));
+            Assert.True(outcome.Equals(3.40282m));
+
+            Assert.True("-3.40282".TryTo(out outcome));
+            Assert.True(outcome.Equals(-3.40282m));
+
+            Assert.True("3,40282".TryTo(out outcome, NumberStyles.Any, new CultureInfo("fr-FR")));
+            Assert.True(outcome.Equals(3.40282m));
+
+            Assert.True("-3,40282".TryTo(out outcome, NumberStyles.Any, new CultureInfo("fr-FR")));
+            Assert.True(outcome.Equals(-3.40282m));
+        }
+
+        [Test]
+        [TestCase(null, "does not matter", true)]
+        [TestCase("          ", "does not matter", true)]
+        [TestCase("", "does not matter", true)]
+        [TestCase("2001-01-01 00:00:00", "yyyy-MM-dd hh:mm:ss", true)]
+        [TestCase("2001-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss", true)]
+        [TestCase("2001-01-01 25:00:00", "yyyy-MM-dd HH:mm:ss", false)]
+        [TestCase("2001-01-01 15:00:00", "yyyy-MM-dd hh:mm:ss", false)]
+        [TestCase("01-01-2001 00:00:00", "MM-dd-yyyy hh:mm:ss", true)]
+        [TestCase("01-01-2001 00:00:00", "MM-dd-yyyy HH:mm:ss", true)]
+        [TestCase("01-01-2001 25:00:00", "MM-dd-yyyy HH:mm:ss", false)]
+        [TestCase("01-01-2001 15:00:00", "MM-dd-yyyy hh:mm:ss", false)]
+        public void TryTo_Nullable_DateTime_Works_As_Expected_With_Given_Format(string input, string format,
+            bool expectedReturn)
+        {
+            if (expectedReturn)
+            {
+                Assert.True(input.TryTo(out DateTime? ts, format));
+                if (string.IsNullOrWhiteSpace(input))
+                {
+                    Assert.True(ts == null);
+                }
+                else
+                {
+                    Assert.True(new DateTime(2001, 01, 01, 0, 0, 0).Equals(ts.Value));
+                }
+            }
+            else
+            {
+                Assert.False(input.TryTo(out DateTime? ts, format));
+                Assert.True(ts == null);
+            }
+        }
+
+        [Test]
+        [TestCase(null, "does not matter", true)]
+        [TestCase("          ", "does not matter", true)]
+        [TestCase("", "does not matter", true)]
+        [TestCase("2001-01-01 00:00:00", "MM-dd-yyyy hh:mm:ss|yyyy-MM-dd hh:mm:ss", true)]
+        [TestCase("2001-01-01 00:00:00", "MM-dd-yyyy hh:mm:ss|yyyy-MM-dd HH:mm:ss", true)]
+        [TestCase("2001-01-01 25:00:00", "MM-dd-yyyy hh:mm:ss|yyyy-MM-dd HH:mm:ss", false)]
+        [TestCase("2001-01-01 15:00:00", "MM-dd-yyyy hh:mm:ss|yyyy-MM-dd hh:mm:ss", false)]
+        [TestCase("01-01-2001 00:00:00", "yyyy-MM-dd hh:mm:ss|MM-dd-yyyy hh:mm:ss", true)]
+        [TestCase("01-01-2001 00:00:00", "yyyy-MM-dd hh:mm:ss|MM-dd-yyyy HH:mm:ss", true)]
+        [TestCase("01-01-2001 25:00:00", "yyyy-MM-dd hh:mm:ss|MM-dd-yyyy HH:mm:ss", false)]
+        [TestCase("01-01-2001 15:00:00", "yyyy-MM-dd hh:mm:ss|MM-dd-yyyy hh:mm:ss", false)]
+        public void TryTo_Nullable_DateTime_Works_As_Expected_With_Format_Collection(string input,
+            string formatBarSeparated, bool expectedReturn)
+        {
+            if (expectedReturn)
+            {
+                Assert.True(input.TryTo(formatBarSeparated.Split('|'), out DateTime? ts));
+                if (string.IsNullOrWhiteSpace(input))
+                {
+                    Assert.True(ts == null);
+                }
+                else
+                {
+                    Assert.True(new DateTime(2001, 01, 01, 0, 0, 0).Equals(ts));
+                }
+            }
+            else
+            {
+                Assert.False(input.TryTo(formatBarSeparated.Split('|'), out DateTime? ts));
+                Assert.True(ts == null);
+            }
+        }
+
+        [Test]
+        [TestCase("", true)]
+        [TestCase("         ", true)]
+        [TestCase(null, true)]
+        [TestCase("2001-01-01 00:00:00", true)]
+        [TestCase("2001-01-01 00:00:00", true)]
+        [TestCase("2001-01-01 25:00:00", false)]
+        [TestCase("2001-01-01 15:00:00", true)]
+        [TestCase("01-01-2001 00:00:00", true)]
+        [TestCase("01-01-2001 60:60:60", false)]
+        [TestCase("01-01-2001 25:00:00", false)]
+        [TestCase("12-31-2001 23:59:59", true)]
+        public void TryTo_Nullable_DateTime_Works_As_Expected_With_No_Format(string input, bool expectedReturn)
+        {
+            if (expectedReturn)
+            {
+                Assert.True(input.TryTo(out DateTime? ts));
+                if (string.IsNullOrWhiteSpace(input))
+                {
+                    Assert.True(ts == null);
+                }
+                else
+                {
+                    Assert.True(DateTime.Parse(input).Equals(ts));
+                }
+            }
+            else
+            {
+                Assert.False(input.TryTo(out DateTime? ts));
+                Assert.True(ts == null);
+            }
+        }
+
         private static bool PerformTryToEnum<T>(string input, out T value, bool ignoreCase = true)
             where T : struct
         {


circumvent the issue with Assembly.GetName being SecurityCritical on SL

--- Mono.Cecil/Import.cs
+++ Mono.Cecil/Import.cs
@@ -164,6 +164,7 @@
 		AssemblyNameReference ImportScope (SR.Assembly assembly)
 		{
 			AssemblyNameReference scope;
+#if !SILVERLIGHT
 			var name = assembly.GetName ();

 			if (TryGetAssemblyNameReference (name, out scope))
@@ -178,6 +179,16 @@
 			module.AssemblyReferences.Add (scope);

 			return scope;
+#else
+			var name = AssemblyNameReference.Parse (assembly.FullName);
+
+			if (TryGetAssemblyNameReference (name, out scope))
+				return scope;
+
+			module.AssemblyReferences.Add (name);
+
+			return name;
+#endif
 		}

 		bool TryGetAssemblyNameReference (SR.AssemblyName name, out AssemblyNameReference assembly_reference)


Adding support for launching a browser link

--- ExtendedMap/ExtendedMap/ExtendedMap.Forms.Plugin.iOS/Services/PhoneService.cs
+++ ExtendedMap/ExtendedMap/ExtendedMap.Forms.Plugin.iOS/Services/PhoneService.cs
@@ -17,7 +17,7 @@
   {
     public void OpenBrowser(string url)
     {
-      throw new NotImplementedException();
+      UIApplication.SharedApplication.OpenUrl(new NSUrl(url));
     }

     public void DialNumber(string number, string name)


Fixing bug in Loop logic

Fixing bug in Loop logic

--- UnityEngineAnalyzer/UnityEngineAnalyzer/FindMethodsInUpdate/DoNotUseFindMethodsInUpdateAnalyzer.cs
+++ UnityEngineAnalyzer/UnityEngineAnalyzer/FindMethodsInUpdate/DoNotUseFindMethodsInUpdateAnalyzer.cs
@@ -80,7 +80,7 @@
                 SymbolInfo symbolInfo;
                 if (!TryGetSymbolInfo(context, invocation, out symbolInfo))
                 {
-                    break;
+                    continue;
                 }
                 //var symbolInfo = context.SemanticModel.GetSymbolInfo(invocation);


Resolved #247: PermissionChecker should implement IIocManagerAccessor.

--- src/Abp.Zero/Authorization/PermissionChecker.cs
+++ src/Abp.Zero/Authorization/PermissionChecker.cs
@@ -15,12 +15,14 @@
     /// <typeparam name="TTenant"></typeparam>
     /// <typeparam name="TRole"></typeparam>
     /// <typeparam name="TUser"></typeparam>
-    public abstract class PermissionChecker<TTenant, TRole, TUser> : IPermissionChecker, ITransientDependency
+    public abstract class PermissionChecker<TTenant, TRole, TUser> : IPermissionChecker, ITransientDependency, IIocManagerAccessor
         where TRole : AbpRole<TUser>, new()
         where TUser : AbpUser<TUser>
         where TTenant : AbpTenant<TUser>
     {
         private readonly AbpUserManager<TTenant, TRole, TUser> _userManager;
+
+        public IIocManager IocManager { get; set; }

         public ILogger Logger { get; set; }


fix multiple result operator

fix multiple result operator

--- src/ArangoDB.Client/Query/ArangoModelVisitor.cs
+++ src/ArangoDB.Client/Query/ArangoModelVisitor.cs
@@ -71,14 +71,22 @@

             QueryModel = queryModel;

-            var resultOperator = queryModel.ResultOperators.Count != 0 ? queryModel.ResultOperators[0] : null;
-            var aggregateFunction = resultOperator != null && aggregateResultOperatorFunctions.ContainsKey(resultOperator.GetType())
-                ? aggregateResultOperatorFunctions[resultOperator.GetType()] : null;
-
-            if (resultOperator is FirstResultOperator)
+            string aggregateFunction = null;
+
+            // get the first aggregateResultOperatorFunction, because only one of them can be used at a time
+            foreach (var r in queryModel.ResultOperators)
+            {
+                if (aggregateResultOperatorFunctions.ContainsKey(r.GetType()))
+                {
+                    aggregateFunction = aggregateResultOperatorFunctions[r.GetType()];
+                    break;
+                }
+            }
+
+            if (queryModel.ResultOperators.Count(x => x is FirstResultOperator) != 0)
                 queryModel.BodyClauses.Add(new SkipTakeClause(Expression.Constant(0), Expression.Constant(1)));

-            if (aggregateFunction != null)
+            if (string.IsNullOrEmpty(aggregateFunction) == false)
                 QueryText.AppendFormat(" return {0} (( ", aggregateFunction);

             if (!IgnoreFromClause && queryModel.MainFromClause.ItemType != typeof(AQL))
@@ -300,7 +308,7 @@
                 ? traversalClause.Direction.Value
                 : Utils.EdgeDirectionToString(EdgeDirection.Any));

-            if(traversalClause.TargetVertex != null)
+            if (traversalClause.TargetVertex != null)
             {
                 QueryText.Append(" shortest_path ");
                 GetAqlExpression(traversalClause.StartVertex, queryModel);
@@ -309,7 +317,7 @@
             }
             else
                 GetAqlExpression(traversalClause.StartVertex, queryModel);
-
+
             if (string.IsNullOrEmpty(traversalClause.GraphName) == false)
             {
                 QueryText.AppendFormat("  graph \"{0}\" ", traversalClause.GraphName);
@@ -327,14 +335,14 @@

                     if (e.Direction.HasValue)
                         edges.AppendFormat("{0} ", Utils.EdgeDirectionToString(e.Direction.Value));
-
+
                     edges.Append(LinqUtility.ResolvePropertyName(e.CollectionName));
                 }

                 QueryText.Append(edges);
             }

-            if(traversalClause.Options != null)
+            if (traversalClause.Options != null)
             {
                 QueryText.AppendFormat(" options {0} ", new DocumentSerializer(Db).SerializeWithoutReader(traversalClause.Options.Value));
             }


Changes 3D bar chart example to use category3d axis.

This is a breaking change introduced by ExtJS 6.5.0 which requires the
category axis to be Ext.chart.axis.Category3D when the series is
Ext.chart.series.Bar3D.

Related github issues: extnet/Ext.NET#1515 and
extnet/Ext.NET.Examples.MVC#6 item 11.

--- src/Areas/Chart_Bar/Views/Basic_3D/Index.cshtml
+++ src/Areas/Chart_Bar/Views/Basic_3D/Index.cshtml
@@ -122,7 +122,7 @@
                         .Maximum(100)
                         .Renderer(r => r.Handler = "return label.toFixed(0) + '%';"),

-                    X.CategoryAxis()
+                    X.Category3DAxis()
                         .Position(Position.Left)
                         .Fields("Name")
                         .Grid(true)


prefix in test case MutableHierarchyTestRemoveValue wre partly wrong

--- Elementary.Hierarchy.Collections.Test/MutableHierarchyTestRemoveValue.cs
+++ Elementary.Hierarchy.Collections.Test/MutableHierarchyTestRemoveValue.cs
@@ -56,7 +56,7 @@
         }

         [Test]
-        public void IMH_Remove_value_from_child_doesnt_create_new_hierarchy()
+        public void MH_Remove_value_from_child_doesnt_create_new_hierarchy()
         {
             // ARRANGE
             string test = "test";
@@ -87,7 +87,7 @@
         }

         [Test]
-        public void IMH_Remove_value_from_child_twice_doesnt_create_new_hierarchy()
+        public void MH_Remove_value_from_child_twice_doesnt_create_new_hierarchy()
         {
             // ARRANGE
             string test = "test";
@@ -110,7 +110,7 @@
         }

         [Test]
-        public void IMH_Remove_value_from_unknown_node_throws()
+        public void MH_Remove_value_from_unknown_node_throws()
         {
             // ARRANGE


git-svn-id: http://svn.castleproject.org:8080/svn/castle/trunk@372 73e77b4c-caa6-f847-a29a-24ab75ae54b6

--- Facilities/Prevalence/Castle.Facilities.Prevalence/PrevalenceFacility.cs
+++ Facilities/Prevalence/Castle.Facilities.Prevalence/PrevalenceFacility.cs
@@ -120,7 +120,7 @@

 		private void ConfigureSnapshot(IConfiguration engineConfig, IDictionary properties)
 		{
-			int period = GetSnapshotPeriod(engineConfig);
+			float period = GetSnapshotPeriod(engineConfig);

 			if (RequiresSnapshots(period))
 			{
@@ -137,11 +137,11 @@
 			}
 		}

-		private int GetSnapshotPeriod(IConfiguration engineConfig)
+		private float GetSnapshotPeriod(IConfiguration engineConfig)
 		{
 			try
 			{
-				return Convert.ToInt32(engineConfig.Attributes["snapshotHoursPeriod"]);
+				return Convert.ToSingle(engineConfig.Attributes["snapshotHoursPeriod"]);
 			}
 			catch (FormatException e)
 			{
@@ -149,7 +149,7 @@
 			}
 		}

-		private bool RequiresSnapshots(int period)
+		private bool RequiresSnapshots(float period)
 		{
 			return period > 0;
 		}
@@ -184,7 +184,7 @@

 		protected void TakeSnapshotIfRequired(IConfiguration engineConfig)
 		{
-			int period = GetSnapshotPeriod(engineConfig);
+			float period = GetSnapshotPeriod(engineConfig);

 			if (RequiresSnapshots(period))
 			{


Access storage failure is readable.

Access storage failure is readable.

--- Framework/Lokad.Cqrs.Portable/Core.Inbox/Events/FailedToAccessStorage.cs
+++ Framework/Lokad.Cqrs.Portable/Core.Inbox/Events/FailedToAccessStorage.cs
@@ -21,5 +21,9 @@
             QueueName = queueName;
             MessageId = messageId;
         }
+        public override string ToString()
+        {
+            return string.Format("Failed to read '{0}' from '{1}': {2}", MessageId, QueueName, Exception.Message);
+        }
     }
 }


update

update

--- Infrastructure/CSharpGL.Models/ObjFileFormat/ParsingActions/ObjParser.cs
+++ Infrastructure/CSharpGL.Models/ObjFileFormat/ParsingActions/ObjParser.cs
@@ -31,16 +31,48 @@
         ///
         /// </summary>
         /// <returns></returns>
-        public List<ObjMesh> Parse()
+        public ParsingResult Parse()
         {
+            var result = new ParsingResult();
             var context = new ObjParsingContext(this.objFilename);

-            foreach (var item in this.parsingActions)
+            try
             {
-                item.Parse(context);
+                foreach (var item in this.parsingActions)
+                {
+                    item.Parse(context);
+                }
+            }
+            catch (Exception ex)
+            {
+                result.Error = ex;
             }

-            return context.MeshList;
+            return result;
+        }
+    }
+
+    /// <summary>
+    ///
+    /// </summary>
+    public class ParsingResult
+    {
+        /// <summary>
+        ///
+        /// </summary>
+        public Exception Error { get; internal set; }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public List<ObjMesh> MeshList { get; private set; }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public ParsingResult()
+        {
+            this.MeshList = new List<ObjMesh>();
         }
     }
 }


Using Circuit.ReferenceTemperature

Using Circuit.ReferenceTemperature

--- SpiceSharp/Components/RLC/RES/ModelBaseParameters.cs
+++ SpiceSharp/Components/RLC/RES/ModelBaseParameters.cs
@@ -16,7 +16,7 @@
             get => NominalTemperature - Circuit.CelsiusKelvin;
             set => NominalTemperature.Value = value + Circuit.CelsiusKelvin;
         }
-        public GivenParameter NominalTemperature { get; } = new GivenParameter(300.15);
+        public GivenParameter NominalTemperature { get; } = new GivenParameter(Circuit.ReferenceTemperature);
         [ParameterName("tc1"), ParameterInfo("First order temperature coefficient")]
         public GivenParameter TemperatureCoefficient1 { get; } = new GivenParameter();
         [ParameterName("tc2"), ParameterInfo("Second order temperature oefficient")]


Fixing a typo. (changeset 1234665)

Fixing a typo. (changeset 1234665)

--- Src/Compilers/Core/Source/MetadataReader/PEModule.cs
+++ Src/Compilers/Core/Source/MetadataReader/PEModule.cs
@@ -145,7 +145,7 @@
             {
                 if (lazyMetadataReader == null)
                 {
-                    // PEModule is either craeted with metadata reader or PE reader.
+                    // PEModule is either created with metadata reader or PE reader.
                     Debug.Assert(peReaderOpt != null);
                     if (!peReaderOpt.HasMetadata)
                     {


added scheduledrugs reply to addschedule

--- StillKickingMeBack/Controllers/ScheduleController.cs
+++ StillKickingMeBack/Controllers/ScheduleController.cs
@@ -40,7 +40,7 @@
         }
         [HttpPost]
         [Route("api/Patient/Schedule")]
-        public int? AddSchedule(ScheduleModel model)
+        public IEnumerable<JoinedPatientMeds> AddSchedule(ScheduleModel model)
         {
             var headers = Request.Headers;
             if (headers.Contains("Authorization"))
@@ -65,7 +65,11 @@
                 schedule.week_repeat_code = model.week_repeat_code;
                 db.Patient_Medication_rels.InsertOnSubmit(schedule);
                 db.SubmitChanges();
-                return schedule.Id;
+                var schedules = db.Patient_Medication_rels.Where(m => m.User_IDFK == Convert.ToInt64(headers.GetValues("Authorization").First())).Where(m => m.active);
+                return from s in schedules
+                       join m in db.Medications
+                       on s.Medication_IDFK equals m.Id
+                       select new JoinedPatientMeds(m.Name, s.amount, m.eat_with_food, m.dosage_mg, s.start_date, s.week_repeat_code, s.end_date, s.severity, m.active, m.max_pills, s.repeat_interval, s.time_to_take);
             }
             return null;
         }


Better tracing

Better tracing

--- src/ConveyorBelt.Tooling/ElasticsearchClient.cs
+++ src/ConveyorBelt.Tooling/ElasticsearchClient.cs
@@ -47,8 +47,8 @@
                 }
                 catch
                 {
-                    text = response.Content.ReadAsStringAsync().Result;
-                    throw new ApplicationException(string.Format("Error {0}: {1}",
+                    text = result.Content.ReadAsStringAsync().Result;
+                    throw new ApplicationException(string.Format("Error [WHICH] {0}: {1}",
                      result.StatusCode,
                      text));
                 }
@@ -56,7 +56,8 @@
             }
             else
             {
-                throw new ApplicationException(string.Format("Error {0}: {1}",
+                TheTrace.TraceInformation("It sent Back this {0}", (int) response.StatusCode);
+                throw new ApplicationException(string.Format("Error [WHAT] {0}: {1}",
                     response.StatusCode,
                     text));
             }


add simple letrec and letrec*

add simple letrec and letrec*

--- src/CorvusAlba.MyLittleLispy.Runtime/Context.cs
+++ src/CorvusAlba.MyLittleLispy.Runtime/Context.cs
@@ -143,7 +143,11 @@
 		    },
 		    {"import", Import},
 		    {"and", And},
-		    {"or", Or}
+		    {"or", Or},
+
+		    // TODO for jit-compiler letrec and letrec* will have different implementations
+		    {"letrec", Let},
+		    {"letrec*", LetSequential},
 		};

 	    _globalFrame = new Frame();


fixed tests

fixed tests

--- src/Dotnet.Script.Tests/ScriptPublisherTests.cs
+++ src/Dotnet.Script.Tests/ScriptPublisherTests.cs
@@ -42,7 +42,7 @@
         {
             using (var workspaceFolder = new DisposableFolder())
             {
-                var runtimeId = _scriptEnvironment.RuntimeIdentifier == "win10-x64" ? "osx -x64" : "win10-x64";
+                var runtimeId = _scriptEnvironment.RuntimeIdentifier == "win10-x64" ? "osx-x64" : "win10-x64";
                 var code = @"WriteLine(""hello world"");";
                 var mainPath = Path.Combine(workspaceFolder.Path, "main.csx");
                 File.WriteAllText(mainPath, code);
@@ -52,7 +52,11 @@

                 var publishPath = Path.Combine(workspaceFolder.Path, "publish", runtimeId);
                 Assert.True(Directory.Exists(publishPath), $"Publish directory {publishPath} was not found.");
-                Assert.True(Directory.EnumerateFiles(publishPath).GetEnumerator().MoveNext(), $"Publish directory {publishPath} was empty.");
+
+                using (var enumerator = Directory.EnumerateFiles(publishPath).GetEnumerator())
+                {
+                    Assert.True(enumerator.MoveNext(), $"Publish directory {publishPath} was empty.");
+                }
             }
         }

@@ -69,7 +73,7 @@
                 var publishResult = Execute(string.Join(" ", args), workspaceFolder.Path);
                 Assert.Equal(0, publishResult.exitCode);

-                var exePath = Path.Combine(publishRootFolder.Path, _scriptEnvironment.RuntimeIdentifier, "script");
+                var exePath = Path.Combine(publishRootFolder.Path, "script");
                 var executableRunResult = _commandRunner.Execute(exePath);

                 Assert.Equal(0, executableRunResult);


Fix accidental change to copyright symbol

--- src/FeatureToggleSolution/SharedAssemblyInfo.cs
+++ src/FeatureToggleSolution/SharedAssemblyInfo.cs
@@ -10,7 +10,7 @@
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyProduct("FeatureToggle")]
-[assembly: AssemblyCopyright("Copyright � Jason Roberts 2011")]
+[assembly: AssemblyCopyright("Copyright © Jason Roberts 2011")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]


Fix compilation error about implementing abstract member

--- MOE.Common/Business/WCFServiceLibrary/SignalPreemptAggregationOptions.cs
+++ MOE.Common/Business/WCFServiceLibrary/SignalPreemptAggregationOptions.cs
@@ -87,15 +87,14 @@
             throw new System.NotImplementedException();
         }

-        protected void GetTimeAggregateChart(List<Models.Signal> signals, Chart chart)
+        protected override void GetTimeAggregateChart(Models.Signal signal, Chart chart)
         {

             int i = 1;

-            foreach(Models.Signal signal in signals)
-            {
+
                 Series series = new Series();
                 series.Color = GetSeriesColorByNumber(i);
                 series.Name = signal.SignalID;
@@ -125,7 +124,7 @@

             }
-            }
+

     }
 }}


update of version for release

update of version for release

--- Master/Appleseed/Projects/Appleseed.Framework/Properties/AssemblyInfo.cs
+++ Master/Appleseed/Projects/Appleseed.Framework/Properties/AssemblyInfo.cs
@@ -32,6 +32,6 @@
 //
 // You can specify all the values or you can default the Revision and Build Numbers
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("1.4.98.383")]
-[assembly: AssemblyFileVersion("1.4.98.383")]
+[assembly: AssemblyVersion("1.4.131.463")]
+[assembly: AssemblyFileVersion("1.4.131.463")]


Changed initial test project to use NUnit

--- Testing-001/Test.MyApplication/PersonServiceTests.cs
+++ Testing-001/Test.MyApplication/PersonServiceTests.cs
@@ -1,12 +1,12 @@
 using System;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+using NUnit.Framework;

 namespace Test.MyApplication
 {
-    [TestClass]
+    [TestFixture]
     public class PersonServiceTests
     {
-        [TestMethod]
+        [Test]
         public void GetAgeGroup_InvalidPerson_ApplicationExceptionThrown()
         {
             // TODO: implement test


Added CornerRadius to SegmentedButtonGroup

Allows to control the CornerRadius on the SegmentedButtonGroup

--- src/FreshEssentials/Controls/SegmentedButton.cs
+++ src/FreshEssentials/Controls/SegmentedButton.cs
@@ -34,6 +34,14 @@
         {
             get { return (Command)GetValue(CommandProperty); }
             set { SetValue(CommandProperty, value); }
+        }
+
+        public static readonly BindableProperty CornerRadiusProperty = BindableProperty.Create<SegmentedButtonGroup, int>(p => p.CornerRadius, 0);
+
+        public int CornerRadius
+        {
+            get { return (int)GetValue(CornerRadiusProperty); }
+            set { SetValue(CornerRadiusProperty, value); }
         }

         public IList<SegmentedButton> SegmentedButtons


[BugBash] Fix to feed bug affecting Mehdi and Jake

--- src/FunnelWeb.Web/Controllers/FeedController.cs
+++ src/FunnelWeb.Web/Controllers/FeedController.cs
@@ -24,7 +24,7 @@
         {
             var settings = Settings.GetSettings<FunnelWebSettings>();

-			var feedUrl = new Uri(Request.Url, Url.Action("Recent", "WikiAdmin", new { Area = "Admin" }));
+			var feedUrl = new Uri(Request.Url, Url.Action("Recent", "Wiki"));
             return new FeedResult(
                 new Atom10FeedFormatter(
                     new SyndicationFeed(settings.SiteTitle, settings.SearchDescription, feedUrl, items)
@@ -52,8 +52,8 @@

             var items =
                 from e in entries
-				let itemUri = new Uri(Request.Url, Url.Action("Page", "WikiAdmin", new { Area = "Admin", page = e.Name }))
-				let viaFeedUri = new Uri(Request.Url, "/via-feed" + Url.Action("Page", "WikiAdmin", new { Area = "Admin", page = e.Name }))
+				let itemUri = new Uri(Request.Url, Url.Action("Page", "Wiki", new { page = e.Name }))
+				let viaFeedUri = new Uri(Request.Url, "/via-feed" + Url.Action("Page", "Wiki", new { page = e.Name }))
                 orderby e.Published descending
                 let content = SyndicationContent.CreateHtmlContent(
                             BuildFeedItemBody(itemUri, viaFeedUri, e.LatestRevision))


Sort deployment groups in deployment list

--- src/Galaxy/WebEnd/Models/DeploymentListModel.cs
+++ src/Galaxy/WebEnd/Models/DeploymentListModel.cs
@@ -16,7 +16,7 @@
         {
             AllFeeds = dashBoard.Feeds.ConvertToArray(feed => new KeyValuePair<ObjectId, string>(feed.Id, feed.Name), dashBoard.Feeds.Count);
             Deployments = dashBoard.Deployments.ConvertToArray(x => new DeploymentModel(x, AllFeeds), dashBoard.Deployments.Count);
-            Groups = Deployments.Select(GetGroup).Distinct().ToArray();
+            Groups = Deployments.Select(GetGroup).Distinct().OrderBy(x => x).ToArray();
         }

         public string[] Groups { get; set; }


Only add missing operator overloads in C# generator.

--- src/Generator/Passes/CheckOperatorsOverloads.cs
+++ src/Generator/Passes/CheckOperatorsOverloads.cs
@@ -24,18 +24,21 @@
             // Check for C++ operators that cannot be represented in C#.
             CheckInvalidOperators(@class);

-            // The comparison operators, if overloaded, must be overloaded in pairs;
-            // that is, if == is overloaded, != must also be overloaded. The reverse
-            // is also true, and similar for < and >, and for <= and >=.
-
-            HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.EqualEqual,
-                                              CXXOperatorKind.ExclaimEqual);
-
-            HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.Less,
-                                              CXXOperatorKind.Greater);
-
-            HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.LessEqual,
-                                              CXXOperatorKind.GreaterEqual);
+            if (Driver.Options.IsCSharpGenerator)
+            {
+                // The comparison operators, if overloaded, must be overloaded in pairs;
+                // that is, if == is overloaded, != must also be overloaded. The reverse
+                // is also true, and similar for < and >, and for <= and >=.
+
+                HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.EqualEqual,
+                                                  CXXOperatorKind.ExclaimEqual);
+
+                HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.Less,
+                                                  CXXOperatorKind.Greater);
+
+                HandleMissingOperatorOverloadPair(@class, CXXOperatorKind.LessEqual,
+                                                  CXXOperatorKind.GreaterEqual);
+            }

             return false;
         }


handling EF data type normalization

handling EF data type normalization

--- src/Horton.MigrationGenerator/DDL/ColumnInfo.cs
+++ src/Horton.MigrationGenerator/DDL/ColumnInfo.cs
@@ -135,23 +135,9 @@
             return " " + CheckConstraintExpression;
         }

-        internal static ColumnInfo FromSQL(Column column)
-        {
-            var columnInfo = new ColumnInfo(column.Name, column.TypeName)
-            {
-                IsNullable = column.is_nullable,
-                IsMaxLength = column.max_length == -1,
-                IsIdentity = column.is_identity,
-                MaxLength = column.max_length,
-                Scale = column.scale,
-                Precision = column.precision,
-                IsRowGuid = column.is_rowguidcol,
-                IsComputed = column.is_computed,
-                ComputedColumnDefinitionExpression = column.computed_column_definition,
-                IsPersisted = column.is_persisted,
-            };
-
-            switch (columnInfo.DataType)
+        private void FixColumnType()
+        {
+            switch (DataType)
             {
                 case "bit":
                 case "tinyint":
@@ -171,24 +157,23 @@
                 case "geometry":
                 case "geography":
                 case "xml":
-                    columnInfo.IsMaxLength = false;
-                    columnInfo.MaxLength = null;
-                    columnInfo.Scale = null;
-                    columnInfo.Precision = null;
+                    IsMaxLength = false;
+                    MaxLength = null;
+                    Scale = null;
+                    Precision = null;
                     break;
                 case "datetime2":
                 case "datetimeoffset":
                 case "time":
-                    columnInfo.IsMaxLength = false;
-                    columnInfo.MaxLength = null;
-                    columnInfo.Precision = null;
+                    IsMaxLength = false;
+                    MaxLength = null;
+                    Precision = null;
                     break;
                 case "nvarchar":
                 case "nchar":
                 case "ntext":
-                    columnInfo.MaxLength = columnInfo.MaxLength / 2;
-                    columnInfo.Precision = null;
-                    columnInfo.Scale = null;
+                    Precision = null;
+                    Scale = null;
                     break;
                 case "varchar":
                 case "char":
@@ -196,19 +181,48 @@
                 case "varbinary":
                 case "image":
                 case "text":
-                    columnInfo.Precision = null;
-                    columnInfo.Scale = null;
+                    Precision = null;
+                    Scale = null;
                     break;
                 case "decimal":
                 case "numeric":
-                    columnInfo.IsMaxLength = false;
-                    columnInfo.MaxLength = null;
+                    IsMaxLength = false;
+                    MaxLength = null;
                     break;
                 case "float":
                 case "real":
-                    columnInfo.IsMaxLength = false;
-                    columnInfo.MaxLength = null;
-                    columnInfo.Scale = null;
+                    IsMaxLength = false;
+                    MaxLength = null;
+                    Scale = null;
+                    break;
+            }
+        }
+
+        internal static ColumnInfo FromSQL(Column column)
+        {
+            var columnInfo = new ColumnInfo(column.Name, column.TypeName)
+            {
+                IsNullable = column.is_nullable,
+                IsMaxLength = column.max_length == -1,
+                IsIdentity = column.is_identity,
+                MaxLength = column.max_length,
+                Scale = column.scale,
+                Precision = column.precision,
+                IsRowGuid = column.is_rowguidcol,
+                IsComputed = column.is_computed,
+                ComputedColumnDefinitionExpression = column.computed_column_definition,
+                IsPersisted = column.is_persisted,
+            };
+
+            columnInfo.FixColumnType();
+
+            // Special case: SQL storage size for unicode is 2x size
+            switch (columnInfo.DataType)
+            {
+                case "nvarchar":
+                case "nchar":
+                case "ntext":
+                    columnInfo.MaxLength = columnInfo.MaxLength / 2;
                     break;
             }

@@ -279,6 +293,8 @@
                 columnInfo.Precision = null;
             }

+            columnInfo.FixColumnType();
+
             // TODO: detect "rowversion" data types

             return columnInfo;


Fixes connection to remote fails with random errors.

--- src/Host/Broker/Impl/Sessions/SessionManager.cs
+++ src/Host/Broker/Impl/Sessions/SessionManager.cs
@@ -8,6 +8,8 @@
 using System.Linq;
 using System.Security;
 using System.Security.Principal;
+using System.Threading.Tasks;
+using Microsoft.Common.Core;
 using Microsoft.Common.Core.Logging;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Options;
@@ -85,17 +87,19 @@
             Session session;

             lock (_sessions) {
-                var userSessions = GetOrCreateSessionList(user);
+                var oldUserSessions = GetOrCreateSessionList(user);

-                var oldSession = userSessions.FirstOrDefault(s => s.Id == id);
-                if (oldSession != null) {
+                var oldSessions = oldUserSessions.Where(s => s.Id == id).ToArray();
+                foreach (var oldSession in oldSessions) {
                     try {
-                        oldSession.KillHost();
+                        oldUserSessions.Remove(oldSession);
+                        Task.Run(() => oldSession.KillHost()).DoNotWait();
                     } catch (Exception) { }

                     oldSession.State = SessionState.Terminated;
                 }

+                var userSessions = GetOrCreateSessionList(user);
                 session = new Session(this, user, id, interpreter, commandLineArguments, _sessionLogger, _messageLogger);
                 session.StateChanged += Session_StateChanged;


Fix GlobalRequestMessage to be able to handle other custom messages

--- Renci.SshClient/Renci.SshNet/Messages/Connection/GlobalRequestMessage.cs
+++ Renci.SshClient/Renci.SshNet/Messages/Connection/GlobalRequestMessage.cs
@@ -74,21 +74,24 @@
         protected override void LoadData()
         {
             var requestName = this.ReadAsciiString();
+
+            this.WantReply = this.ReadBoolean();
+
             switch (requestName)
             {
                 case "tcpip-forward":
                     this.RequestName = GlobalRequestName.TcpIpForward;
+                    this.AddressToBind = this.ReadString();
+                    this.PortToBind = this.ReadUInt32();
                     break;
                 case "cancel-tcpip-forward":
                     this.RequestName = GlobalRequestName.CancelTcpIpForward;
+                    this.AddressToBind = this.ReadString();
+                    this.PortToBind = this.ReadUInt32();
                     break;
                 default:
                     break;
             }
-
-            this.WantReply = this.ReadBoolean();
-            this.AddressToBind = this.ReadString();
-            this.PortToBind = this.ReadUInt32();
         }

         /// <summary>


Increase lock timeout of RefreshTokenHandler to 5 sec by default - and make settable. (see #87)

--- src/IdentityModel/Client/RefreshTokenHandler.cs
+++ src/IdentityModel/Client/RefreshTokenHandler.cs
@@ -16,8 +16,6 @@
     /// </summary>
     public class RefreshTokenHandler : DelegatingHandler
     {
-        private static readonly TimeSpan LockTimeout = TimeSpan.FromSeconds(2);
-
         private readonly SemaphoreSlim _lock = new SemaphoreSlim(1, 1);
         private readonly TokenClient _tokenClient;

@@ -25,6 +23,8 @@
         private string _refreshToken;
         private bool _disposed;

+        public TimeSpan Timeout { get; set; } = TimeSpan.FromSeconds(5);
+
         /// <summary>
         /// Gets the current access token
         /// </summary>
@@ -32,7 +32,7 @@
         {
             get
             {
-                if (_lock.Wait(LockTimeout))
+                if (_lock.Wait(Timeout))
                 {
                     try
                     {
@@ -55,7 +55,7 @@
         {
             get
             {
-                if (_lock.Wait(LockTimeout))
+                if (_lock.Wait(Timeout))
                 {
                     try
                     {
@@ -165,7 +165,7 @@
                 return false;
             }

-            if (await _lock.WaitAsync(LockTimeout, cancellationToken).ConfigureAwait(false))
+            if (await _lock.WaitAsync(Timeout, cancellationToken).ConfigureAwait(false))
             {
                 try
                 {
@@ -204,7 +204,7 @@

         private async Task<string> GetAccessTokenAsync(CancellationToken cancellationToken)
         {
-            if (await _lock.WaitAsync(LockTimeout, cancellationToken).ConfigureAwait(false))
+            if (await _lock.WaitAsync(Timeout, cancellationToken).ConfigureAwait(false))
             {
                 try
                 {


Extending finger detection

Extending finger detection

--- UVRefocus/Assets/UVRefocus/Editor/UVRefocusEditor.cs
+++ UVRefocus/Assets/UVRefocus/Editor/UVRefocusEditor.cs
@@ -32,6 +32,8 @@
     private static Texture2D _sInstanceUVMap = null;

     private bool _mShowFingerTips = false;
+
+    private bool _mExtendFingerTips = false;

     /// <summary>
     /// Open an instance of the panel
@@ -140,6 +142,8 @@

             _mShowFingerTips = EditorGUILayout.Toggle("ShowFingerTips", _mShowFingerTips);

+            _mExtendFingerTips = EditorGUILayout.Toggle("ExtendFingerTips", _mExtendFingerTips);
+
             /*
             string meshAsset = AssetDatabase.GetAssetPath(_mMesh);
             GUILayout.Label(string.Format("Asset={0}", meshAsset));
@@ -1197,8 +1201,90 @@

         #endregion

-        #region show result
-
+        DisplayMarchCount(marchCounts, dictFaces, colors);
+
+        #region Isolate each finger tip
+
+        if (_mShowFingerTips)
+        {
+            List<List<int>> fingers = new List<List<int>>();
+            for (int fingerCount = 0; fingerCount < 5; ++fingerCount)
+            {
+                List<int> searchGroup = new List<int>();
+                foreach (KeyValuePair<int, int> kvp in fingerGroups)
+                {
+                    searchGroup.Add(kvp.Key);
+                    break;
+                }
+                List<int> finger = GetAdjacentFaces(fingerGroups, searchGroup, sortedFaces, dictFaces, dictVerteces, verts);
+                fingers.Add(finger);
+            }
+
+            //sort fingers by Z
+            fingers.Sort(
+                delegate(List<int> finger1, List<int> finger2)
+                {
+                    if (finger1.Count == 0)
+                    {
+                        return 0;
+                    }
+                    int face1 = finger1[0];
+                    if (finger2.Count == 0)
+                    {
+                        return 0;
+                    }
+                    int face2 = finger2[0];
+                    return verts[face1].z.CompareTo(verts[face2].z);
+                });
+
+            DisplayFingers(fingers, dictFaces, colors);
+
+            if (_mExtendFingerTips)
+            {
+                // march counts in sort order
+                marchCounts = new Dictionary<int, int>();
+                order = 0;
+                foreach (int face in sortedFaces)
+                {
+                    marchCounts[face] = order;
+                    ++order;
+                }
+
+                DisplayMarchCount(marchCounts, dictFaces, colors);
+
+                // select a larger part of each finger
+                for (int fingerId = 0; fingerId < fingers.Count; ++fingerId)
+                {
+                    List<int> finger = fingers[fingerId];
+                    if (finger.Count > 0)
+                    {
+                        fingerGroups = new Dictionary<int, int>();
+                        foreach (KeyValuePair<int, int> kvp in marchCounts)
+                        {
+                            float ratio1 = kvp.Value/(float) order;
+                            if (ratio1 < 0.45f)
+                            {
+                                fingerGroups[kvp.Key] = 0;
+                            }
+                        }
+                        List<int> searchGroup = new List<int>();
+                        searchGroup.Add(finger[0]);
+                        fingers[fingerId] = GetAdjacentFaces(fingerGroups, searchGroup, sortedFaces, dictFaces,
+                            dictVerteces, verts);
+                    }
+                }
+
+                DisplayFingers(fingers, dictFaces, colors);
+            }
+        }
+
+        #endregion
+
+        #endregion
+    }
+
+    void DisplayMarchCount(Dictionary<int, int> marchCounts, Dictionary<int, List<int>> dictFaces, Color32[] colors)
+    {
         foreach (KeyValuePair<int, int> kvp in marchCounts)
         {
             int face = kvp.Key;
@@ -1206,92 +1292,23 @@
             int face2 = dictFaces[face][1];
             int face3 = dictFaces[face][2];

-            float ratio1 = kvp.Value / (float)order;
+            float ratio1 = kvp.Value / (float)marchCounts.Count;
             float ratio2 = ratio1;
             float ratio3 = ratio1;

-            colors[face1] = GetColorRatio(ratio1);
-            colors[face2] = GetColorRatio(ratio2);
-            colors[face3] = GetColorRatio(ratio3);
-        }
-
-        #region Isolate each finger tip
-
-        if (_mShowFingerTips)
-        {
-            List<List<int>> fingers = new List<List<int>>();
-            for (int fingerCount = 0; fingerCount < 5; ++fingerCount)
-            {
-                List<int> searchGroup = new List<int>();
-                foreach (KeyValuePair<int, int> kvp in fingerGroups)
-                {
-                    searchGroup.Add(kvp.Key);
-                    break;
-                }
-                List<int> finger = GetAdjacentFaces(fingerGroups, searchGroup, sortedFaces, dictFaces, dictVerteces, verts);
-                fingers.Add(finger);
-            }
-
-            //sort fingers by Z
-            fingers.Sort(
-                delegate(List<int> finger1, List<int> finger2)
-                {
-                    if (finger1.Count == 0)
-                    {
-                        return 0;
-                    }
-                    int face1 = finger1[0];
-                    if (finger2.Count == 0)
-                    {
-                        return 0;
-                    }
-                    int face2 = finger2[0];
-                    return verts[face1].z.CompareTo(verts[face2].z);
-                });
-
-            DisplayFingers(fingers, dictFaces, colors);
-
-            /*
-
-            // march counts in sort order
-            marchCounts = new Dictionary<int, int>();
-            order = 0;
-            foreach (int face in sortedFaces)
-            {
-                marchCounts[face] = order;
-                ++order;
-            }
-
-            // select a larger part of each finger
-            for (int fingerId = 0; fingerId < fingers.Count; ++fingerId)
-            {
-                List<int> finger = fingers[fingerId];
-                if (finger.Count > 0)
-                {
-                    fingerGroups = new Dictionary<int, int>();
-                    foreach (KeyValuePair<int, int> kvp in marchCounts)
-                    {
-                        float ratio1 = kvp.Value / (float)order;
-                        if (ratio1 < 0.6f)
-                        {
-                            fingerGroups[kvp.Key] = 0;
-                        }
-                    }
-                    List<int> searchGroup = new List<int>();
-                    searchGroup.Add(finger[0]);
-                    fingers[fingerId] = GetAdjacentFaces(fingerGroups, searchGroup, sortedFaces, dictFaces, dictVerteces, verts);
-                }
-            }
-
-            DisplayFingers(fingers, dictFaces, colors);
-            */
-        }
-
-        #endregion
-
-        #endregion
-
-        #endregion
+            if (colors[face1] == Color.black)
+            {
+                colors[face1] = GetColorRatio(ratio1);
+            }
+            if (colors[face2] == Color.black)
+            {
+                colors[face2] = GetColorRatio(ratio2);
+            }
+            if (colors[face3] == Color.black)
+            {
+                colors[face3] = GetColorRatio(ratio3);
+            }
+        }
     }

     void DisplayFingers(List<List<int>> fingers, Dictionary<int, List<int>> dictFaces, Color32[] colors)


binarysearchtreetest: remove redundant

binarysearchtreetest: remove redundant

--- UnitTest/DataStructuresTests/BinarySearchTreeTest.cs
+++ UnitTest/DataStructuresTests/BinarySearchTreeTest.cs
@@ -128,7 +128,6 @@
             {
                 // Insert unique values
                 binarySearchTree.Insert(values);
-                inserting_duplicates_passed = true;
             }
             catch
             {


WIP server simulation stuff

WIP server simulation stuff

--- UnityProject/Assets/Scripts/PlayGroups/PlayerSync.cs
+++ UnityProject/Assets/Scripts/PlayGroups/PlayerSync.cs
@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using NUnit.Framework.Constraints;
 using Tilemaps;
 using Tilemaps.Behaviours.Layers;
 using Tilemaps.Behaviours.Objects;
@@ -16,7 +17,7 @@

 		public override string ToString()
 		{
-			return $"{nameof( MoveNumber )}: {MoveNumber}, {nameof( Position )}: {Position}";
+			return $"[Move: {MoveNumber}, Pos: {Position}]";
 		}
 	}

@@ -37,6 +38,7 @@

 		private Matrix matrix => registerTile.Matrix;
 		private Queue<PlayerAction> pendingActions;
+		private Queue<PlayerAction> serverPendingActions;
 		public PlayerMove playerMove;
 		private PlayerScript playerScript;
 		private PlayerSprites playerSprites;
@@ -59,6 +61,7 @@
 		private RegisterTile pullRegister;
 		private PushPull pushPull; //The pushpull component on this player
 		private RegisterTile registerTile;
+		private PlayerState serverTargetState;
 		private PlayerState serverState;

 		[SyncVar] private PlayerState serverStateCache; //used to sync with new players
@@ -103,6 +106,7 @@
 				PlayerState state = new PlayerState {MoveNumber = 0, Position = position};
 				serverState = state;
 				serverStateCache = state;
+				serverTargetState = state;
 			}
 		}

@@ -149,6 +153,10 @@
 			{
 				pendingActions = new Queue<PlayerAction>();
 				UpdatePredictedState();
+			}
+			if ( isServer )
+			{
+				serverPendingActions = new Queue<PlayerAction>();
 			}
 			playerScript = GetComponent<PlayerScript>();
 			playerSprites = GetComponent<PlayerSprites>();
@@ -176,7 +184,7 @@
 					}
 					return;
 				}
-				if (predictedState.Position == transform.localPosition && !playerMove.isGhost)
+				if (predictedState.Position == transform.localPosition && !playerMove.isGhost) //FIXME: causes spam when running into a wall
 				{
 					DoAction();
 				}
@@ -205,17 +213,34 @@
 			PlayerAction action = playerMove.SendAction();
 			if (action.keyCodes.Length != 0)
 			{
+				if ( predictedState.Position.Equals(NextState(predictedState, action).Position) )
+				{
+//					Debug.LogWarning("Client ignoring shitty action and cleaning up queue");
+					pendingActions.Clear();
+					ResetPredictedState();
+					return;
+				}
 				pendingActions.Enqueue(action);
+//				Debug.Log($"Client requesting {action} ({pendingActions.Count} in queue)");
 				UpdatePredictedState();
 				CmdAction(action);
 			}
 		}

+		private void ResetPredictedState()
+		{
+			predictedState = serverState;
+		}
+
 		private void Synchronize()
 		{
 			if (isLocalPlayer && GameData.IsHeadlessServer)
 			{
 				return;
+			}
+			if ( isServer )
+			{
+				CheckStateUpdate();
 			}

 			PlayerState state = DetermineState();
@@ -271,7 +296,44 @@

 		private PlayerState DetermineState()
 		{
+			if ( isServer )
+			{
+				return isLocalPlayer ? predictedState : serverTargetState;
+			}
 			return isLocalPlayer ? predictedState : serverState;
+		}
+
+		[Server]
+		private void CheckStateUpdate()
+		{
+			//checking only player movement for now
+			Vector2Int localPos = Vector2Int.RoundToInt(transform.localPosition);
+			if ( localPos == Vector2Int.RoundToInt(serverState.Position) )
+			{
+				return;
+			}
+			if ( localPos == Vector2Int.RoundToInt(serverTargetState.Position) )
+			{
+//				Debug.Log($"Applying {serverTargetState}");
+				SetServerState(serverTargetState);
+				TryUpdateServerTarget();
+			}
+		}
+
+		/// Tries to assign next target from queue to serverTargetState if there are any
+		/// (In order to start lerping towards it)
+		[Server]
+		private void TryUpdateServerTarget()
+		{
+			if ( serverPendingActions.Count != 0 )
+			{
+			int count = serverPendingActions.Count;
+//			for ( int i = 0; i < count; i++ )
+//				{
+					serverTargetState = NextState(serverTargetState, serverPendingActions.Dequeue());
+//				}
+//				Debug.Log($"Server: Updated target {serverTargetState}");/*, advanced by {count}*//*, {serverPendingActions.Count} pending*/
+			}
 		}

 		private void SetServerState(PlayerState newState)
@@ -332,11 +394,33 @@
 		private void CmdAction(PlayerAction action)
 		{
 			//Not ready for a new action yet!
-			if(serverState.Position != transform.localPosition){
-				return;
-			}
-
-			serverState = NextState(serverState, action);
+//			if(serverState.Position != transform.localPosition){
+//				return;
+//			}
+
+			bool pointlessTargetState = serverTargetState.Position == NextState(serverTargetState, action).Position;
+//			bool pointlessServerState = serverState.Position == NextState(serverState, action).Position;
+//			if ( pointlessTargetState || pointlessServerState )
+//			{
+//				Debug.LogWarning($"Ignoring pointless action: Target={pointlessTargetState}/Server={pointlessServerState}");
+//				return;
+//			}
+
+//			serverTargetState = NextState(serverTargetState, action);
+//			Debug.Log($"Server: Updated target {serverTargetState}");/*, {serverPendingActions.Count} pending*/
+
+			if ( !pointlessTargetState )
+			{
+				//add action to server simulation queue
+				serverPendingActions.Enqueue(action);
+				TryUpdateServerTarget();
+			}
+			else
+			{//Clear server queue at the first sign of trouble
+//				Debug.LogWarning($"Ignoring pointless action: Target={pointlessTargetState}");
+				serverPendingActions.Clear();
+			}
+
 			//Do not cache the position if the player is a ghost
 			//or else new players will sync the deadbody with the last pos
 			//of the gost:
@@ -344,21 +428,20 @@
 			{
 				serverStateCache = serverState;
 			}
-			RpcOnServerStateChange(serverState);
+//			RpcOnServerStateChange(serverState);
 		}

 		private void UpdatePredictedState()
 		{
-			//Wait for the server to catch up or else the movement states will go out of order
-			if(serverState.MoveNumber <= predictedState.MoveNumber){
-				return;
-			}
+			//redraw prediction point from received serverState using pending actions
 			predictedState = serverState;

-			foreach (PlayerAction action in pendingActions)
-			{
-				predictedState = NextState(predictedState, action);
-			}
+			foreach ( PlayerAction pendingAction in pendingActions )
+			{
+				predictedState = NextState(predictedState, pendingAction);
+			}
+			PostToChatMessage.Send($"Redraw prediction: {serverState}->{predictedState}({pendingActions.Count} steps) ", ChatChannel.System);
+//			Debug.Log($"Client updated: {serverState}->{predictedState}(after {pendingActions.Count} actions) ");
 		}

 		private PlayerState NextState(PlayerState state, PlayerAction action)
@@ -405,13 +488,27 @@
 		private void RpcOnServerStateChange(PlayerState newState)
 		{
 			serverState = newState;
+			PostToChatMessage.Send($"Got server update {serverState}", ChatChannel.System);
 			if (pendingActions != null)
 			{
-				while (pendingActions.Count > 0 && pendingActions.Count > predictedState.MoveNumber - serverState.MoveNumber)
-				{
-					pendingActions.Dequeue();
-				}
-				Debug.Log($"Client state change {newState} ({pendingActions.Count} queued) ");
+				//invalidate queue if serverstate was never predicted
+				bool serverAhead = serverState.MoveNumber > predictedState.MoveNumber;
+				bool posMismatch = serverState.MoveNumber == predictedState.MoveNumber && serverState.Position != predictedState.Position;
+				if ( serverAhead || posMismatch )
+				{
+					Debug.LogWarning($"Clearing queue: serverAhead={serverAhead}, posMismatch={posMismatch}");
+					pendingActions.Clear();
+				}
+				else
+				{
+					//removing actions already acknowledged by server from pending queue
+//					Debug.Log($"{pendingActions.Count} > {predictedState.MoveNumber} - {serverState.MoveNumber}");
+					while (pendingActions.Count > 0 && pendingActions.Count > predictedState.MoveNumber - serverState.MoveNumber)
+					{
+						pendingActions.Dequeue();
+//						Debug.Log($"{pendingActions.Count} > {predictedState.MoveNumber} - {serverState.MoveNumber}");
+					}
+				}
 				UpdatePredictedState();
 			}
 		}


Minor optimization.

Minor optimization.

--- src/Magick.NET.Core/Profiles/Exif/ExifReader.cs
+++ src/Magick.NET.Core/Profiles/Exif/ExifReader.cs
@@ -47,7 +47,8 @@

         private void Read()
         {
-            if (_reader.ReadString(4) == "Exif")
+            // Exif
+            if (_reader.ReadLong() == 0x45786966)
             {
                 if (_reader.ReadShort() != 0)
                     return;
@@ -55,7 +56,8 @@
                 _startIndex = 6;
             }

-            _reader.IsLittleEndian = _reader.ReadString(2) == "II";
+            // II
+            _reader.IsLittleEndian = _reader.ReadShort() == 0x4949;

             if (ReadShort() != 0x002A)
                 return;


Fix MTU negotiation (almost).

Fix MTU negotiation (almost).

--- src/MiNET/MiNET/Net/RakNet/RakOfflineHandler.cs
+++ src/MiNET/MiNET/Net/RakNet/RakOfflineHandler.cs
@@ -152,20 +152,20 @@
 		{
 			if (message.mtuSize != DefaultMtuSize)
 			{
-				Log.Warn($"Error, mtu differ from what we sent. Received {message.mtuSize} bytes");
-				return;
+				Log.Debug($"Error, mtu differ from what we sent. Received {message.mtuSize} bytes");
+				//return;
 			}

 			Log.Debug($"Server with ID {message.serverGuid} security={message.serverHasSecurity}");

-			SendOpenConnectionRequest2(senderEndpoint);
-		}
-
-		private void SendOpenConnectionRequest2(IPEndPoint targetEndPoint)
+			SendOpenConnectionRequest2(senderEndpoint, message.mtuSize);
+		}
+
+		private void SendOpenConnectionRequest2(IPEndPoint targetEndPoint, short mtuSize)
 		{
 			var packet = OpenConnectionRequest2.CreateObject();
 			packet.remoteBindingAddress = targetEndPoint;
-			packet.mtuSize = DefaultMtuSize;
+			packet.mtuSize = mtuSize;
 			packet.clientGuid = _clientGuid;

 			byte[] data = packet.Encode();
@@ -184,12 +184,12 @@
 			HaveServer = true;

 			Thread.Sleep(100);
-			SendConnectionRequest(senderEndpoint);
-		}
-
-		public void SendConnectionRequest(IPEndPoint targetEndPoint)
-		{
-			var session = new RakSession(_connectionInfo, _sender, targetEndPoint, DefaultMtuSize)
+			SendConnectionRequest(senderEndpoint, message.mtuSize);
+		}
+
+		public void SendConnectionRequest(IPEndPoint targetEndPoint, short mtuSize)
+		{
+			var session = new RakSession(_connectionInfo, _sender, targetEndPoint, mtuSize)
 			{
 				State = ConnectionState.Connecting,
 				LastUpdatedTime = DateTime.UtcNow,


Apply `configureHostServices` after the `fallbackProvider` - allows MVC to override `IApplicationEnvironment` in functional tests

--- src/Microsoft.AspNet.Hosting/HostingServices.cs
+++ src/Microsoft.AspNet.Hosting/HostingServices.cs
@@ -17,16 +17,19 @@
         private static IServiceCollection Import(IServiceProvider fallbackProvider, Action<IServiceCollection> configureHostServices)
         {
             var services = new ServiceCollection();
-            if (configureHostServices != null)
-            {
-                configureHostServices(services);
-            }
             var manifest = fallbackProvider.GetRequiredService<IServiceManifest>();
             foreach (var service in manifest.Services)
             {
                 services.AddTransient(service, sp => fallbackProvider.GetService(service));
             }
+
             services.AddSingleton<IServiceManifest>(sp => new HostingManifest(services));
+
+            if (configureHostServices != null)
+            {
+                configureHostServices(services);
+            }
+
             return services;
         }


Fixed IP config if already used by interface that has IPv4 & IPv6 disabled, but is online

--- Network/Interface.cs
+++ Network/Interface.cs
@@ -51,9 +51,9 @@
         public string Description;
         public AdapterType Type;
         public string Mac = "N/A";
-
+
         public ushort InterfaceMetric;
-
+
         // IPv4
         public bool IPv4Enabled;
         // TODO: accomodate naming conventions
@@ -119,7 +119,7 @@
         // Acquiring functions
         // ===================

-        public static ConcurrentDictionary<Guid, NetworkInterface> GetAll(Action<string>UpdateStatus = null)
+        public static ConcurrentDictionary<Guid, NetworkInterface> GetAll(Action<string> UpdateStatus = null)
         {
             ConcurrentDictionary<Guid, NetworkInterface> NICs = new ConcurrentDictionary<Guid, NetworkInterface>();
             try
@@ -128,7 +128,8 @@
                 ManagementClass Win32_NetworkAdapterConfiguration = new ManagementClass("Win32_NetworkAdapterConfiguration");
                 ManagementObjectCollection Win32_NetworkAdapterConfiguration_Items;
                 try { Win32_NetworkAdapterConfiguration_Items = Win32_NetworkAdapterConfiguration.GetInstances(); }
-                catch (COMException) {
+                catch (COMException)
+                {
                     System.Windows.Forms.MessageBox.Show("\"" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\" function failed this time becose WMI did not respond in time. Try again.", "WMI error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                     return NICs;
                 }
@@ -162,7 +163,7 @@
                 if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1)
                 {
                     System.Net.NetworkInformation.NetworkInterface loopbackNic = nics.Where((i) =>
-                        (i.Supports(NetworkInterfaceComponent.IPv4) &&  i.Supports(NetworkInterfaceComponent.IPv6) &&
+                        (i.Supports(NetworkInterfaceComponent.IPv4) && i.Supports(NetworkInterfaceComponent.IPv6) &&
                         i.GetIPProperties().GetIPv6Properties().Index == 1)).FirstOrDefault();
                     NetworkInterface.Loopback.networkInterface = loopbackNic;
                     NetworkInterface.Loopback.Guid = new Guid(loopbackNic.Id);
@@ -270,7 +271,7 @@
                                         NICs[guid].IPv4Gateway.Add(new IPGatewayAddress(route.Gateway, route.Metric));
                                     else
                                         NICs[guid].IPv6Gateway.Add(new IPGatewayAddress(route.Gateway, route.Metric));
-
+
                                 List<IPGatewayAddress> gateways = NICs[guid].IPv4Gateway;
                                 gateways.Sort((x, y) => x.GatewayMetric.CompareTo(y.GatewayMetric));
                                 if (gateways.Any((i) => !IPAddress.Parse(i.Address).Equals(IPAddress.Any)))
@@ -283,9 +284,9 @@
                                 }
                                 else
                                     if (NICs[guid].IPv4Address.Count > 0)
-                                        NICs[guid].LocalIPv4Exit = NICs[guid].IPv4Address[0].Address;
-
-
+                                    NICs[guid].LocalIPv4Exit = NICs[guid].IPv4Address[0].Address;
+
+
                                 RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces\Tcpip_" + nic.Id, true);
                                 if (key != null)
                                 {
@@ -450,8 +451,8 @@

                             }
             }
-            catch (Exception e)
-            {
+            catch (Exception e)
+            {
                 if (ExceptionThrown != null)
                     ExceptionThrown(null, new ExceptionEventArgs(e));
             }
@@ -474,7 +475,7 @@
                 IPv4BytesReceived = stats.BytesReceived;
                 IPv4BytesSent = stats.BytesSent;
             }
-            catch
+            catch
             {
                 IPv4InSpeed = 0;
                 IPv4InSpeedAvg10 = IPv4InSpeedAvg10 * 9 / 10 + IPv4InSpeed * 1 / 10;
@@ -692,8 +693,12 @@
                         string name = (string)nameKey.GetValue("Name", "");
                         nameKey.Close();
                         ushort status = (ushort)GetAdapterStatus(name);
-                        if (status == 1 || status == 2 || status == 3 || status == 8 || status == 9) // online
+                        if ((status == 1 || status == 2 || status == 3 || status == 8 || status == 9) && // online
+                            System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces().Where(i =>
+                            i.Id.ToUpper() == guid && (i.Supports(NetworkInterfaceComponent.IPv4) || i.Supports(NetworkInterfaceComponent.IPv6))).Count() > 0)
+                        {
                             return name;
+                        }
                         else if (enableDhcp == 0) // offline, only if static config
                         {
                             System.Windows.Forms.DialogResult result = System.Windows.Forms.MessageBox.Show(
@@ -1520,71 +1525,71 @@
                 return new string[] { "Disabled", "IP Only", "IP & DNS" }[(int)Dhcpv4Enabled];
             }
         }
-
+
         public enum AdapterType
         {
             [Description("ASDL")]
             AsymmetricDsl = NetworkInterfaceType.AsymmetricDsl,
             [Description("ATM")]
-	        Atm = NetworkInterfaceType.Atm,
+            Atm = NetworkInterfaceType.Atm,
             [Description("Basic ISDN")]
             BasicIsdn = NetworkInterfaceType.BasicIsdn,
             [Description("Ethernet")]
-	        Ethernet = NetworkInterfaceType.Ethernet,
+            Ethernet = NetworkInterfaceType.Ethernet,
             [Description("Ethernet 3Mb/s")]
-	        Ethernet3Megabit = NetworkInterfaceType.Ethernet3Megabit,
+            Ethernet3Megabit = NetworkInterfaceType.Ethernet3Megabit,
             [Description("Fast Ethernet 100Base-FX")]
-	        FastEthernetFx = NetworkInterfaceType.FastEthernetFx,
+            FastEthernetFx = NetworkInterfaceType.FastEthernetFx,
             [Description("Fast Ethernet 100Base-T")]
-	        FastEthernetT = NetworkInterfaceType.FastEthernetT,
+            FastEthernetT = NetworkInterfaceType.FastEthernetT,
             [Description("FDDI")]
-	        Fddi = NetworkInterfaceType.Fddi,
+            Fddi = NetworkInterfaceType.Fddi,
             [Description("Modem")]
-	        GenericModem = NetworkInterfaceType.GenericModem,
+            GenericModem = NetworkInterfaceType.GenericModem,
             [Description("Gigabit Ethernet")]
-	        GigabitEthernet = NetworkInterfaceType.GigabitEthernet,
+            GigabitEthernet = NetworkInterfaceType.GigabitEthernet,
             [Description("High Performance Serial Bus")]
-	        HighPerformanceSerialBus = NetworkInterfaceType.HighPerformanceSerialBus,
+            HighPerformanceSerialBus = NetworkInterfaceType.HighPerformanceSerialBus,
             [Description("IP over ATM")]
-	        IPOverAtm = NetworkInterfaceType.IPOverAtm,
+            IPOverAtm = NetworkInterfaceType.IPOverAtm,
             [Description("ISDN")]
-	        Isdn = NetworkInterfaceType.Isdn,
+            Isdn = NetworkInterfaceType.Isdn,
             [Description("Loopback")]
-	        Loopback = NetworkInterfaceType.Loopback,
+            Loopback = NetworkInterfaceType.Loopback,
             [Description("MDSL")]
-	        MultiRateSymmetricDsl = NetworkInterfaceType.MultiRateSymmetricDsl,
+            MultiRateSymmetricDsl = NetworkInterfaceType.MultiRateSymmetricDsl,
             [Description("PPP")]
-	        Ppp = NetworkInterfaceType.Ppp,
+            Ppp = NetworkInterfaceType.Ppp,
             [Description("Primary rate ISDN")]
-	        PrimaryIsdn = NetworkInterfaceType.PrimaryIsdn,
+            PrimaryIsdn = NetworkInterfaceType.PrimaryIsdn,
             [Description("RADSL")]
-	        RateAdaptDsl = NetworkInterfaceType.RateAdaptDsl,
+            RateAdaptDsl = NetworkInterfaceType.RateAdaptDsl,
             [Description("SLIP")]
-	        Slip = NetworkInterfaceType.Slip,
+            Slip = NetworkInterfaceType.Slip,
             [Description("SDSL")]
-	        SymmetricDsl = NetworkInterfaceType.SymmetricDsl,
+            SymmetricDsl = NetworkInterfaceType.SymmetricDsl,
             [Description("Token-Ring")]
-	        TokenRing = NetworkInterfaceType.TokenRing,
+            TokenRing = NetworkInterfaceType.TokenRing,
             [Description("Tunnel")]
-	        Tunnel = NetworkInterfaceType.Tunnel,
+            Tunnel = NetworkInterfaceType.Tunnel,
             [Description("Unknown")]
-	        Unknown = NetworkInterfaceType.Unknown,
+            Unknown = NetworkInterfaceType.Unknown,
             [Description("VDSL")]
-	        VeryHighSpeedDsl = NetworkInterfaceType.VeryHighSpeedDsl,
+            VeryHighSpeedDsl = NetworkInterfaceType.VeryHighSpeedDsl,
             [Description("Wireless IEEE 802.11")]
-	        Wireless80211 = NetworkInterfaceType.Wireless80211,
+            Wireless80211 = NetworkInterfaceType.Wireless80211,
             [Description("WiMax")]
-	        Wman = 237,
+            Wman = 237,
             /// <summary>
             /// GSM-based
             /// </summary>
             [Description("GSM-based")]
-	        Wwanpp = 243,
+            Wwanpp = 243,
             /// <summary>
             /// CDMA-based
             /// </summary>
             [Description("CDMA-based")]
-	        Wwanpp2 = 244
+            Wwanpp2 = 244
         }

         public enum Status : ushort


Add support for enum types in interop method signatures

--- NiL.JS/Core/Tools.cs
+++ NiL.JS/Core/Tools.cs
@@ -519,6 +519,9 @@
                         if (targetType == typeof(Number))
                             return new Number(jsobj.dValue);

+                        if (targetType.IsEnum)
+                            return Enum.ToObject(targetType, jsobj.dValue);
+
                         return null;
                     }
                 case JSValueType.Integer:
@@ -547,6 +550,9 @@

                         if (targetType == typeof(Number))
                             return new Number(jsobj.iValue);
+
+                        if (targetType.IsEnum)
+                            return Enum.ToObject(targetType, jsobj.iValue);

                         return null;
                     }
@@ -591,6 +597,8 @@
                                     return (decimal)r;
                                 return null;
                             }
+                            if (targetType.IsEnum)
+                                return Enum.Parse(targetType, jsobj.Value.ToString());
                         }

                         if (targetType == typeof(string))


only detect window monitor when it opens.

--- WalletWasabi.Gui/Behaviors/BindWindowSizeBehavior.cs
+++ WalletWasabi.Gui/Behaviors/BindWindowSizeBehavior.cs
@@ -3,6 +3,7 @@
 using Avalonia.Xaml.Interactivity;
 using System;
 using System.Linq;
+using System.Reactive.Disposables;
 using System.Reactive.Linq;

 namespace WalletWasabi.Gui.Behaviors
@@ -10,6 +11,7 @@
 	public class BindWindowSizeBehavior : Behavior<Window>
 	{
 		private Size _maxSize;
+		private CompositeDisposable _disposables;

 		/// <summary>
 		/// Defines the <see cref="Width"/> property.
@@ -45,29 +47,36 @@
 		{
 			base.OnAttached();

-			var screen = AssociatedObject.Screens.ScreenFromPoint(AssociatedObject.Position);
+			_disposables?.Dispose();
+
+			_disposables = new CompositeDisposable();
+
+			Observable.FromEventPattern(AssociatedObject, nameof(AssociatedObject.Opened))
+				.Subscribe(_ => AssociatedObject_Opened())
+				.DisposeWith(_disposables);
+		}
+
+		protected override void OnDetaching()
+		{
+			base.OnDetaching();
+
+			_disposables?.Dispose();
+			_disposables = null;
+		}
+
+		private void AssociatedObject_Opened()
+		{
+			var screen = AssociatedObject.Screens.ScreenFromVisual(AssociatedObject);

 			_maxSize = screen.WorkingArea.Size.ToSize(screen.PixelDensity) * 0.95;

 			this.GetObservable(HeightProperty)
 				.Where(x => !double.IsNaN(x))
-				.Subscribe(x =>
-				{
-					if (x >= _maxSize.Height)
-					{
-						AssociatedObject.Height = _maxSize.Height;
-					}
-				});
+				.Subscribe(x => AssociatedObject.Height = x >= _maxSize.Height ? _maxSize.Height : x);

 			this.GetObservable(WidthProperty)
 				.Where(x => !double.IsNaN(x))
-				.Subscribe(x =>
-				{
-					if (x >= _maxSize.Width)
-					{
-						AssociatedObject.Width = _maxSize.Width;
-					}
-				});
+				.Subscribe(x => AssociatedObject.Width = x >= _maxSize.Width ? _maxSize.Width : x);
 		}
 	}
 }


Added a parameter for filtering incomplete entries

Feed readers such as Feedly do not update feed entries after fetching them, which causes Feedly to return a snapshot of the entry at the time of fetching, rather than the final entry with all of the changes.
Users can add ?shouldFilterIncomplete=true and only get finalized entries from the day before.

--- PlatformStatusTracker/PlatformStatusTracker.Web/Controllers/HomeController.cs
+++ PlatformStatusTracker/PlatformStatusTracker.Web/Controllers/HomeController.cs
@@ -30,7 +30,7 @@
             return View(await HomeIndexViewModel.CreateAsync(_changeSetRepository));
         }

-        public async Task<IActionResult> Feed()
+        public async Task<IActionResult> Feed(bool shouldFilterIncomplete = false)
         {
             var result = View(await HomeIndexViewModel.CreateAsync(_changeSetRepository));
             result.ContentType = "application/atom+xml";


Fix Present

Fix Present

Now returns results in info.results field

--- CSGL.Vulkan/VkQueue.cs
+++ CSGL.Vulkan/VkQueue.cs
@@ -218,10 +218,14 @@
                 infoNative.pSwapchains = (IntPtr)swapchainsNative;
                 infoNative.pImageIndices = (IntPtr)imageIndices;

+                if (info.results != null) infoNative.pResults = (IntPtr)results;
+
                 var result = Device.Commands.queuePresent(queue, ref infoNative);

-                for (int i = 0; i < resultsLength; i++) {   //default resultsLength is 0, safe to iterate
-                    info.results[i] = results[i];
+                if (info.results != null) {
+                    for (int i = 0; i < resultsLength; i++) {
+                        info.results[i] = results[i];
+                    }
                 }

                 if (!(result == VkResult.Success || result == VkResult.SuboptimalKhr)) throw new QueueException(result, string.Format("Error presenting from queue: {0}", result));


Fix bug DNN-3888: do not show then localization tab when edit admin pages.

--- Website/DesktopModules/Admin/Tabs/ManageTabs.ascx.cs
+++ Website/DesktopModules/Admin/Tabs/ManageTabs.ascx.cs
@@ -474,6 +474,16 @@

         {

+            if (!localizationPanel.Visible)
+
+            {
+
+                return;
+
+            }
+
+
+
             MakeTranslatable.Visible = false;

             MakeNeutral.Visible = false;
@@ -960,7 +970,13 @@

         {

-            if (PortalSettings.ContentLocalizationEnabled && LocaleController.Instance.GetLocales(PortalId).Count > 1)
+            if (PortalSettings.ContentLocalizationEnabled
+
+                && LocaleController.Instance.GetLocales(PortalId).Count > 1
+
+                && _tab.TabID != PortalSettings.AdminTabId
+
+                && _tab.ParentId != PortalSettings.AdminTabId)

             {


Refactored

Refactored

--- YAMP.Core/Expressions/Elementary/SymbolExpression.cs
+++ YAMP.Core/Expressions/Elementary/SymbolExpression.cs
@@ -21,16 +21,16 @@
 		{
 		}

-        public SymbolExpression(String content)
+        public SymbolExpression(String symbolName)
         {
-            _symbolName = content;
+            _symbolName = symbolName;
         }

-        public SymbolExpression(ParseEngine engine, String name)
+        public SymbolExpression(ParseEngine engine, String symbolName)
             : base(engine)
         {
-            _symbolName = name;
-            Length = name.Length;
+            _symbolName = symbolName;
+            Length = symbolName.Length;
 		}

         #endregion


Forms: CCLabel.Android: Removing references to Game instance

--- src/label_nodes/CCLabel-Android.cs
+++ src/label_nodes/CCLabel-Android.cs
@@ -29,9 +29,9 @@

             bool hasPremultipliedAlpha;

-            var display = Game.Activity.WindowManager.DefaultDisplay;
-            var metrics = new DisplayMetrics();
-            display.GetMetrics(metrics);
+//            var display = Game.Activity.WindowManager.DefaultDisplay;
+//            var metrics = new DisplayMetrics();
+//            display.GetMetrics(metrics);

             // Do not take into account ScaleDensity for now.
 //            var fontScaleFactor = metrics.ScaledDensity;
@@ -57,7 +57,7 @@

                 CCContentManager.SharedContentManager.GetAssetStreamAsBytes(fontName, out fontName);

-                var activity = Game.Activity;
+                var activity = Android.App.Application.Context;

                 try
                 {


update to use correct pipebind property

update to use correct pipebind property

--- Solutions/PowerShell.Commands/Commands/ContentTypes/RemoveContentType.cs
+++ Solutions/PowerShell.Commands/Commands/ContentTypes/RemoveContentType.cs
@@ -36,7 +36,7 @@
                     }
                     else if (!string.IsNullOrEmpty(Identity.Name))
                     {
-                        ct = SelectedWeb.GetContentTypeByName(Identity.Id);
+                        ct = SelectedWeb.GetContentTypeByName(Identity.Name);
                     }
                 }
                 if(ct != null)


Updated cmdlet to support email address and login name for users

--- Solutions/PowerShell.Commands/Commands/Principals/RemoveUserFromGroup.cs
+++ Solutions/PowerShell.Commands/Commands/Principals/RemoveUserFromGroup.cs
@@ -12,7 +12,7 @@
     public class RemoveUserFromGroup : SPOWebCmdlet
     {

-        [Parameter(Mandatory = true, HelpMessage = "A valid logon name of a user")]
+        [Parameter(Mandatory = true, HelpMessage = "A valid login name of a user")]
         [Alias("LogonName")]
         public string LoginName = string.Empty;

@@ -21,7 +21,24 @@

         protected override void ExecuteCmdlet()
         {
-            SelectedWeb.RemoveUserFromGroup(GroupName, LoginName);
+            try
+            {
+                Group group = SelectedWeb.SiteGroups.GetByName(GroupName);
+                User user = SelectedWeb.SiteUsers.GetByEmail(LoginName);
+                ClientContext.Load(user);
+                ClientContext.Load(group);
+                ClientContext.ExecuteQueryRetry();
+                SelectedWeb.RemoveUserFromGroup(group, user);
+            }
+            catch
+            {
+                Group group = SelectedWeb.SiteGroups.GetByName(GroupName);
+                User user = SelectedWeb.SiteUsers.GetByLoginName(LoginName);
+                ClientContext.Load(user);
+                ClientContext.Load(group);
+                ClientContext.ExecuteQueryRetry();
+                SelectedWeb.RemoveUserFromGroup(group, user);
+            }
         }
     }
 }