blob: 51386f7413cf5d91a4e402f480556339582b26e0 [file] [log] [blame]
/*
*
* 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 log4net.Util;
using NUnit.Framework;
using System.IO;
using System.Reflection;
using System.Configuration;
namespace log4net.Tests.Util
{
[TestFixture]
public class PatternStringTest : MarshalByRefObject
{
[Test]
public void TestEnvironmentFolderPathPatternConverter()
{
string[] specialFolderNames = Enum.GetNames(typeof(Environment.SpecialFolder));
foreach (string specialFolderName in specialFolderNames)
{
string pattern = "%envFolderPath{" + specialFolderName + "}";
PatternString patternString = new PatternString(pattern);
string evaluatedPattern = patternString.Format();
Environment.SpecialFolder specialFolder =
(Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), specialFolderName);
Assert.AreEqual(Environment.GetFolderPath(specialFolder), evaluatedPattern);
}
}
[Test]
public void TestAppSettingPathConverter()
{
string configurationFileContent = @"
<configuration>
<appSettings>
<add key=""TestKey"" value = ""TestValue"" />
</appSettings>
</configuration>
";
string configurationFileName = null;
AppDomain appDomain = null;
try
{
configurationFileName = CreateTempConfigFile(configurationFileContent);
appDomain = CreateConfiguredDomain("AppSettingsTestDomain", configurationFileName);
PatternStringTest pst = (PatternStringTest)appDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, this.GetType().FullName);
pst.TestAppSettingPathConverterInConfiguredDomain();
}
finally
{
if (appDomain != null) AppDomain.Unload(appDomain);
if (configurationFileName != null) File.Delete(configurationFileName);
}
}
public void TestAppSettingPathConverterInConfiguredDomain()
{
string pattern = "%appSetting{TestKey}";
PatternString patternString = new PatternString(pattern);
string evaluatedPattern = patternString.Format();
string appSettingValue = ConfigurationManager.AppSettings["TestKey"];
Assert.AreEqual("TestValue", appSettingValue, "Expected configuration file to contain a key TestKey with the value TestValue");
Assert.AreEqual(appSettingValue, evaluatedPattern, "Evaluated pattern expected to be identical to appSetting value");
string badPattern = "%appSetting{UnknownKey}";
patternString = new PatternString(badPattern);
evaluatedPattern = patternString.Format();
Assert.AreEqual("(null)", evaluatedPattern, "Evaluated pattern expected to be \"(null)\" for non-existent appSettings key");
}
private static string CreateTempConfigFile(string configurationFileContent)
{
string fileName = Path.GetTempFileName();
File.WriteAllText(fileName, configurationFileContent);
return fileName;
}
private static AppDomain CreateConfiguredDomain(string domainName, string configurationFileName)
{
AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
ads.ConfigurationFile = configurationFileName;
AppDomain ad = AppDomain.CreateDomain(domainName, null, ads);
return ad;
}
}
}