// -----------------------------------------------------------------------
//
//
// 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.
//
//
// -----------------------------------------------------------------------
namespace Lucene.Net.Support
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#if NUNIT
using NUnit.Framework;
using Extensions.NUnit;
#else
using Gallio.Framework;
using MbUnit.Framework;
#endif
using Lucene.Net.Internal;
using System.Threading;
[TestFixture]
[Category(TestCategories.Unit)]
[Parallelizable]
public class WeakReferenceOfTTest
{
[Test]
public void Constructor()
{
var instance = Create();
WeakReference weakReference = null;
Assert.DoesNotThrow(() =>
{
weakReference = new WeakReference(instance);
});
Assert.AreEqual(instance, weakReference.Target);
Assert.IsTrue(weakReference.IsAlive);
Assert.IsFalse(weakReference.TrackResurrection);
}
[Test]
public void ConstructorWithResurrection()
{
var instance = Create();
WeakReference weakReference = null;
Assert.DoesNotThrow(() =>
{
weakReference = new WeakReference(instance, true);
});
Assert.AreEqual(instance, weakReference.Target);
Assert.IsTrue(weakReference.IsAlive);
Assert.IsTrue(weakReference.TrackResurrection);
}
[Test]
public void GarbageCollection()
{
// creating the instance inside the method would keep the instance alive,
// thus we create this instance in a static method.
var instance = Create();
WeakReference weakReference = null;
weakReference = new WeakReference(instance);
Assert.AreEqual(instance, weakReference.Target);
Assert.IsTrue(weakReference.IsAlive);
instance = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.WaitForFullGCComplete();
Assert.IsFalse(weakReference.IsAlive);
Assert.IsNull(weakReference.Target);
}
private static ReferenceType Create()
{
var instance = new ReferenceType() { Name = "test" };
return instance;
}
}
}