public void CombineWith_NoneCancelable()
 {
     using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith(CancellationToken.None))
     {
         Assert.False(combined.Token.CanBeCanceled);
     }
 }
 public void CombineWith_Array_Empty_OriginalNonCancelable()
 {
     using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith())
     {
         Assert.False(combined.Token.CanBeCanceled);
     }
 }
    public void CombineWith_Array_Empty()
    {
        var cts1 = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = cts1.Token.CombineWith())
        {
            Assert.Equal(cts1.Token, combined.Token);
        }
    }
 public void CombinedCancellationToken_Equality_BetweenEqualInstances_None()
 {
     CancellationTokenExtensions.CombinedCancellationToken combined1 = CancellationToken.None.CombineWith(CancellationToken.None);
     CancellationTokenExtensions.CombinedCancellationToken combined2 = CancellationToken.None.CombineWith(CancellationToken.None);
     Assert.Equal(combined1.GetHashCode(), combined2.GetHashCode());
     Assert.True(combined1.Equals(combined2));
     Assert.True(combined1 == combined2);
     Assert.False(combined1 != combined2);
 }
    public void CombineWith_Array_OneArrayElementCancelable_Second()
    {
        var cts1 = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith(cts1.Token, CancellationToken.None))
        {
            Assert.Equal(cts1.Token, combined.Token);
        }
    }
    public void CombineWith_BothCancelable_SecondAlreadyCanceled()
    {
        var cts1   = new CancellationTokenSource();
        var second = new CancellationToken(true);

        using (CancellationTokenExtensions.CombinedCancellationToken combined = cts1.Token.CombineWith(second))
        {
            Assert.Equal(second, combined.Token);
        }
    }
    public void CombineWith_BothCancelable_FirstAlreadyCanceled()
    {
        var first = new CancellationToken(true);
        var cts2  = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = first.CombineWith(cts2.Token))
        {
            Assert.Equal(first, combined.Token);
        }
    }
    public void CombineWith_SecondCancelable()
    {
        var cts = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith(cts.Token))
        {
            Assert.True(combined.Token.CanBeCanceled);
            Assert.Equal(cts.Token, combined.Token);
        }
    }
    public void CombineWith_Array_OneArrayElementPreCanceled()
    {
        var ct = new CancellationToken(true);

        using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith(CancellationToken.None, ct, CancellationToken.None))
        {
            Assert.Equal(ct, combined.Token);
            Assert.True(combined.Token.IsCancellationRequested);
        }
    }
    public void CombineWith_Array_Empty_OriginalAlreadyCanceled()
    {
        CancellationToken cancellationToken = new CancellationToken(true);

        using (CancellationTokenExtensions.CombinedCancellationToken combined = cancellationToken.CombineWith())
        {
            Assert.True(combined.Token.IsCancellationRequested);
            Assert.Equal(cancellationToken, combined.Token);
        }
    }
    public void CombinedCancellationToken_Inequality_WithRealToken()
    {
        var cts = new CancellationTokenSource();

        CancellationTokenExtensions.CombinedCancellationToken combined1 = cts.Token.CombineWith(CancellationToken.None);
        CancellationTokenExtensions.CombinedCancellationToken combined2 = CancellationToken.None.CombineWith(CancellationToken.None);
        Assert.NotEqual(combined1.GetHashCode(), combined2.GetHashCode());
        Assert.False(combined1.Equals(combined2));
        Assert.False(combined1 == combined2);
        Assert.True(combined1 != combined2);
    }
    public void CombineWith_Array_TwoCancelable()
    {
        var cts1 = new CancellationTokenSource();
        var cts2 = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = cts1.Token.CombineWith(cts2.Token, CancellationToken.None))
        {
            Assert.NotEqual(cts1.Token, combined.Token);
            Assert.NotEqual(cts2.Token, combined.Token);
            cts2.Cancel();
            Assert.True(combined.Token.IsCancellationRequested);
        }
    }
    public void CombineWith_Array_TwoCancelable_AmidMany(bool cancelFirst)
    {
        var cts1 = new CancellationTokenSource();
        var cts2 = new CancellationTokenSource();

        using (CancellationTokenExtensions.CombinedCancellationToken combined = CancellationToken.None.CombineWith(cts1.Token, CancellationToken.None, cts2.Token, CancellationToken.None))
        {
            Assert.NotEqual(cts1.Token, combined.Token);
            Assert.NotEqual(cts2.Token, combined.Token);
            if (cancelFirst)
            {
                cts1.Cancel();
            }
            else
            {
                cts2.Cancel();
            }

            Assert.True(combined.Token.IsCancellationRequested);
        }
    }