﻿#region Apache License
//
// 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.
//
#endregion

using System;

using log4net.Util;

using NUnit.Framework;

namespace log4net.Tests.Util {

	[TestFixture]
	public class TransformTest
	{
		[Test]
		public void MaskXmlInvalidCharactersAllowsJapaneseCharacters()
		{
			string kome = "\u203B";
			Assert.AreEqual(kome, Transform.MaskXmlInvalidCharacters(kome, "?"));
		}

		[Test]
		public void MaskXmlInvalidCharactersMasks0Char()
		{
			string c = "\u0000";
			Assert.AreEqual("?", Transform.MaskXmlInvalidCharacters(c, "?"));
		}
	}
}
