File: UnitTests\TestContracts.cs
Web Access
Project: src\test\Microsoft.ML.Core.Tests\Microsoft.ML.Core.Tests.csproj (Microsoft.ML.Core.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Microsoft.ML.Runtime;
using Microsoft.ML.TestFramework;
using Xunit;
using Xunit.Abstractions;
 
namespace Microsoft.ML.RunTests
{
    public sealed class TestContracts : BaseTestClass
    {
        public TestContracts(ITestOutputHelper output) : base(output)
        {
        }
 
        private void Helper(IExceptionContext ectx, MessageSensitivity expected)
        {
            Contracts.AssertValueOrNull(ectx);
            bool caught = false;
 
            try
            {
                ectx.CheckParam(false, nameof(ectx), "Whoops");
            }
            catch (Exception e)
            {
                Assert.Equal(expected, e.Sensitivity());
                caught = true;
            }
            Assert.True(caught, "Exception was not caught at all");
 
            caught = false;
            try
            {
                throw ectx.ExceptNotSupp("Oops!");
            }
            catch (Exception e)
            {
                Assert.Equal(expected, e.Sensitivity());
                caught = true;
            }
            Assert.True(caught, "Exception was not caught at all");
        }
 
        [Fact]
        public void ExceptionSensitivity()
        {
            var env = new MLContext(1);
            // Default sensitivity should be unknown, that is, all bits set.
            Helper(null, MessageSensitivity.Unknown);
            // If we set it to be not sensitive, then the messages should be marked insensitive,
            // and so forth.
            Helper(Contracts.NotSensitive(), MessageSensitivity.None);
            Helper(Contracts.UserSensitive(), MessageSensitivity.UserData);
            Helper(Contracts.SchemaSensitive(), MessageSensitivity.Schema);
            Helper(Contracts.UserSensitive().SchemaSensitive(), MessageSensitivity.UserData | MessageSensitivity.Schema);
 
            // Run these same tests with the environment.
            Helper(env, MessageSensitivity.Unknown);
            Helper(env.NotSensitive(), MessageSensitivity.None);
            Helper(env.UserSensitive(), MessageSensitivity.UserData);
            Helper(env.SchemaSensitive(), MessageSensitivity.Schema);
            Helper(env.UserSensitive().SchemaSensitive(), MessageSensitivity.UserData | MessageSensitivity.Schema);
        }
    }
}