blob: be4f7e6c5ea2e55919d70b37d87be9ae9238d52c [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.
*
*/
// .NET Compact Framework 1.0 has no support for Environment.GetEnvironmentVariable()
// .NET Framework version 1.0 / 1.1 do not have support for SetEnvironmentVariable which is used in these tests.
#if !NETCF && NET_2_0
using System;
using System.IO;
using System.Text;
using NUnit.Framework;
namespace log4net.Tests.Util
{
[TestFixture]
public class EnvironmentPatternConverterTest
{
private const string ENVIRONMENT_VARIABLE_NAME = "LOG4NET_TEST_TEMP";
const string SYSTEM_LEVEL_VALUE = "SystemLevelEnvironmentValue";
const string USER_LEVEL_VALUE = "UserLevelEnvironmentValue";
const string PROCESS_LEVEL_VALUE = "ProcessLevelEnvironmentValue";
[Test]
public void SystemLevelEnvironmentVariable()
{
EnvironmentPatternConverter converter = new EnvironmentPatternConverter();
try {
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, SYSTEM_LEVEL_VALUE, EnvironmentVariableTarget.Machine);
}
catch (System.Security.SecurityException) {
Assert.Ignore("Test skipped as current user must not set system level environment variables");
}
converter.Option = ENVIRONMENT_VARIABLE_NAME;
StringWriter sw = new StringWriter();
converter.Convert(sw, null);
Assert.AreEqual(SYSTEM_LEVEL_VALUE, sw.ToString(), "System level environment variable not expended correctly.");
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, null, EnvironmentVariableTarget.Machine);
}
[Test]
public void UserLevelEnvironmentVariable()
{
EnvironmentPatternConverter converter = new EnvironmentPatternConverter();
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, USER_LEVEL_VALUE, EnvironmentVariableTarget.User);
converter.Option = ENVIRONMENT_VARIABLE_NAME;
StringWriter sw = new StringWriter();
converter.Convert(sw, null);
Assert.AreEqual(USER_LEVEL_VALUE, sw.ToString(), "User level environment variable not expended correctly.");
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, null, EnvironmentVariableTarget.User);
}
[Test]
public void ProcessLevelEnvironmentVariable()
{
EnvironmentPatternConverter converter = new EnvironmentPatternConverter();
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, PROCESS_LEVEL_VALUE);
converter.Option = ENVIRONMENT_VARIABLE_NAME;
StringWriter sw = new StringWriter();
converter.Convert(sw, null);
Assert.AreEqual(PROCESS_LEVEL_VALUE, sw.ToString(), "Process level environment variable not expended correctly.");
Environment.SetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, null);
}
private class EnvironmentPatternConverter
{
private object target = null;
public EnvironmentPatternConverter()
{
target = Utils.CreateInstance("log4net.Util.PatternStringConverters.EnvironmentPatternConverter,log4net");
}
public string Option
{
get { return Utils.GetProperty(target, "Option") as string; }
set { Utils.SetProperty(target, "Option", value); }
}
public void Convert(TextWriter writer, object state)
{
Utils.InvokeMethod(target, "Convert", writer, state);
}
}
}
}
#endif