Author: bodewig
Date: Thu Nov 7 15:40:38 2013
New Revision: 1539687
URL: http://svn.apache.org/r1539687
Log:
LOG4NET-132 - environment variables are case insensitive on Windows
Added:
logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs
(with props)
Modified:
logging/log4net/branches/log4net-1.2.x/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs
Modified:
logging/log4net/branches/log4net-1.2.x/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/branches/log4net-1.2.x/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs?rev=1539687&r1=1539686&r2=1539687&view=diff
==============================================================================
---
logging/log4net/branches/log4net-1.2.x/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs
(original)
+++
logging/log4net/branches/log4net-1.2.x/src/Repository/Hierarchy/XmlHierarchyConfigurator.cs
Thu Nov 7 15:40:38 2013
@@ -634,7 +634,11 @@ namespace log4net.Repository.Hierarchy
try
{
// Expand environment variables
in the string.
- propertyValue =
OptionConverter.SubstituteVariables(propertyValue,
Environment.GetEnvironmentVariables());
+ IDictionary environmentVariables =
Environment.GetEnvironmentVariables();
+ if (HasCaseInsensitiveEnvironment) {
+ environmentVariables =
CreateCaseInsensitiveWrapper(environmentVariables);
+ }
+ propertyValue =
OptionConverter.SubstituteVariables(propertyValue, environmentVariables);
}
catch(System.Security.SecurityException)
{
@@ -1023,6 +1027,38 @@ namespace log4net.Repository.Hierarchy
#endregion Protected Instance Methods
+#if !NETCF
+ private bool HasCaseInsensitiveEnvironment
+ {
+ get
+ {
+#if NET_1_0 || NET_1_1 || CLI_1_0
+ // actually there is no guarantee, but we don't know
better
+ return true;
+#elif MONO_1_0
+ // see above
+ return false;
+#else
+ PlatformID platform = Environment.OSVersion.Platform;
+ return platform != PlatformID.Unix && platform !=
PlatformID.MacOSX;
+#endif
+ }
+ }
+
+ private IDictionary CreateCaseInsensitiveWrapper(IDictionary
dict)
+ {
+ if (dict == null)
+ {
+ return dict;
+ }
+ Hashtable hash =
SystemInfo.CreateCaseInsensitiveHashtable();
+ foreach (DictionaryEntry entry in dict) {
+ hash[entry.Key] = entry.Value;
+ }
+ return hash;
+ }
+#endif
+
#region Private Constants
// String constants used while parsing the XML data
Added:
logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs
URL:
http://svn.apache.org/viewvc/logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs?rev=1539687&view=auto
==============================================================================
---
logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs
(added)
+++
logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs
Thu Nov 7 15:40:38 2013
@@ -0,0 +1,82 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+using System;
+using System.Xml;
+using NUnit.Framework;
+
+using log4net.Repository.Hierarchy;
+
+namespace log4net.Tests.Hierarchy
+{
+ [TestFixture]
+ public class XmlHierarchyConfiguratorTest
+ {
+
+ private string testProp;
+
+ public string TestProp
+ {
+ set
+ {
+ testProp = value;
+ }
+ get
+ {
+ return testProp;
+ }
+ }
+
+ [Test][Platform(Include="Win")]
+ public void EnvironmentOnWindowsIsCaseInsensitive()
+ {
+ SetTestPropWithPath();
+ Assert.AreNotEqual("Path=", TestProp);
+ }
+
+ [Test][Platform(Include="Unix")]
+ public void EnvironmentOnUnixIsCaseSensitive()
+ {
+ SetTestPropWithPath();
+ Assert.AreEqual("Path=", TestProp);
+ }
+
+ private void SetTestPropWithPath()
+ {
+ XmlDocument doc = new XmlDocument();
+ XmlElement el = doc.CreateElement("param");
+ el.SetAttribute("name", "TestProp");
+ el.SetAttribute("value", "Path=${path}");
+ new TestConfigurator().PublicSetParameter(el, this);
+ }
+
+ // workaround for SetParameter being protected
+ private class TestConfigurator : XmlHierarchyConfigurator {
+ public TestConfigurator() : base(null)
+ {
+ }
+ public void PublicSetParameter(XmlElement element, object target)
+ {
+ SetParameter(element, target);
+ }
+ }
+ }
+}
\ No newline at end of file
Propchange:
logging/log4net/branches/log4net-1.2.x/tests/src/Hierarchy/XmlHierarchyConfiguratorTest.cs
------------------------------------------------------------------------------
svn:executable = *