コード例 #1
0
    public bool PosTest2()
    {
        bool retVal = true;

        TestFramework.BeginScenario("Test IsAlive with long WeakReference");

        try
        {
            WeakReference extWR = new WeakReference(WRHelper.CreateAnObject("Test"), true);

            if (!extWR.IsAlive)
            {
                TestFramework.LogError("004", "WeakReference IsAlive not as expected. Expected : True; Actual: " + extWR.IsAlive);
                retVal = false;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            if (!extWR.IsAlive)
            {
                TestFramework.LogError("005", "WeakReference IsAlive not as expected. Expected : True; Actual: " + extWR.IsAlive);
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestFramework.LogError("006", "Unexpected exception occured: " + e);
            retVal = false;
        }

        return(retVal);
    }
コード例 #2
0
    // ATTENTION!!! ATTENTION!!! ATTENTION!!!
    //
    // If you encounter issues with object lifetime, please see more comments in WeakReferenceCtor2.cs

    public bool PosTest1()
    {
        bool retVal = true;

        TestFramework.BeginScenario("Test IsAlive with short WeakReference");

        try
        {
            WeakReference extWR = new WeakReference(WRHelper.CreateAnObject("Test"), false);

            if (!extWR.IsAlive)
            {
                TestFramework.LogError("001", "WeakReference IsAlive not as expected. Expected : True; Actual: " + extWR.IsAlive);
                retVal = false;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            //Dev10 Bug #413556: WeakReference object incorrectly kept alive. Enable after the test is fixed.
            //
            //if (extWR.IsAlive)
            //{
            //    TestFramework.LogError("002", "WeakReference IsAlive not as expected. Expected : False; Actual: " + extWR.IsAlive);
            //    retVal = false;
            //}
        }
        catch (Exception e)
        {
            TestFramework.LogError("003", "Unexpected exception occured: " + e);
            retVal = false;
        }

        return(retVal);
    }
コード例 #3
0
    // ATTENTION!!! ATTENTION!!! ATTENTION!!!
    //
    // There is no guarantee that WeakReference objects will be collected after GC.Collect().
    // The bottom line is, compiler generated temps for objects created locally (within the
    // same function), castings, boxing/unboxing will get their lifetimes extended to the
    // end of the function.
    //
    // All these are due to changes related to the MinOpts feature made during the
    // Silverlight/Arrowhead timeframe. For more information, see DevDiv Bugs 170524.
    //
    // Many of these behaviors are not documented. If any of the underlying implementation is
    // changed, the tests will need to be updated as well.

    public bool PosTest1()
    {
        bool retVal = true;

        TestFramework.BeginScenario("Test short WeakReference ctor");

        try
        {
            string        testStr = "Test";
            WeakReference extWR   = new WeakReference(WRHelper.CreateAnObject(testStr), false);

            if (!WRHelper.VerifyObject(extWR, testStr))
            {
                TestFramework.LogError("001", "WeakReference target not as expected. Expected : Test; Actual: " + extWR.Target.ToString());
                retVal = false;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            //Dev10 Bug #413556: WeakReference object incorrectly kept alive. Enable after the test is fixed.
            //
            //if (extWR.Target != null)
            //{
            //    TestFramework.LogError("002", "WeakReference target not as expected. Expected : null; Actual: " + extWR.Target.ToString());
            //    retVal = false;
            //}

            if (extWR.TrackResurrection != false)
            {
                TestFramework.LogError("003", "WeakReference track resurrection not as expected. Expected : false; Actual: " + extWR.TrackResurrection);
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestFramework.LogError("004", "Unexpected exception occurred: " + e);
            retVal = false;
        }

        return(retVal);
    }
コード例 #4
0
    public bool PosTest2()
    {
        bool retVal = true;

        TestFramework.BeginScenario("Test long WeakReference ctor");

        try
        {
            string        testStr = "Test";
            WeakReference extWR   = new WeakReference(WRHelper.CreateAnObject(testStr), true);

            if (!WRHelper.VerifyObject(extWR, testStr))
            {
                TestFramework.LogError("005", "WeakReference target not as expected. Expected : Test; Actual: " + extWR.Target.ToString());
                retVal = false;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            if (!WRHelper.VerifyObject(extWR, testStr))
            {
                TestFramework.LogError("006", "WeakReference target not as expected. Expected : null; Actual: " + extWR.Target.ToString());
                retVal = false;
            }

            if (extWR.TrackResurrection != true)
            {
                TestFramework.LogError("007", "WeakReference track resurrection not as expected. Expected : true; Actual: " + extWR.TrackResurrection);
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestFramework.LogError("008", "Unexpected exception occurred: " + e);
            retVal = false;
        }

        return(retVal);
    }