| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- namespace UnitTests.ApplicationTests;
- /// <summary>
- /// Tests to ensure that mixing legacy static Application and modern instance-based models
- /// throws appropriate exceptions.
- /// </summary>
- public class ApplicationModelFencingTests
- {
- [Fact]
- public void Create_ThenInstanceAccess_ThrowsInvalidOperationException ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Create a modern instance-based application
- IApplication app = Application.Create ();
- app.Init ("fake");
- // Attempting to initialize using the legacy static model should throw
- var ex = Assert.Throws<InvalidOperationException> (() => { ApplicationImpl.Instance.Init ("fake"); });
- Assert.Contains ("Cannot use legacy static Application model", ex.Message);
- Assert.Contains ("after using modern instance-based model", ex.Message);
- // Clean up
- app.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void InstanceAccess_ThenCreate_ThrowsInvalidOperationException ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Initialize using the legacy static model
- IApplication staticInstance = ApplicationImpl.Instance;
- staticInstance.Init ("fake");
- // Attempting to create and initialize with modern instance-based model should throw
- var ex = Assert.Throws<InvalidOperationException> (() =>
- {
- IApplication app = Application.Create ();
- app.Init ("fake");
- });
- Assert.Contains ("Cannot use modern instance-based model", ex.Message);
- Assert.Contains ("after using legacy static Application model", ex.Message);
- // Clean up
- staticInstance.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void Init_ThenCreate_ThrowsInvalidOperationException ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Initialize using legacy static API
- IApplication staticInstance = ApplicationImpl.Instance;
- staticInstance.Init ("fake");
- // Attempting to create a modern instance-based application should throw
- var ex = Assert.Throws<InvalidOperationException> (() =>
- {
- IApplication _ = Application.Create ();
- });
- Assert.Contains ("Cannot use modern instance-based model", ex.Message);
- Assert.Contains ("after using legacy static Application model", ex.Message);
- // Clean up
- staticInstance.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void Create_ThenInit_ThrowsInvalidOperationException ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Create a modern instance-based application
- IApplication app = Application.Create ();
- app.Init ("fake");
- // Attempting to initialize using the legacy static model should throw
- var ex = Assert.Throws<InvalidOperationException> (() => { ApplicationImpl.Instance.Init ("fake"); });
- Assert.Contains ("Cannot use legacy static Application model", ex.Message);
- Assert.Contains ("after using modern instance-based model", ex.Message);
- // Clean up
- app.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void MultipleCreate_Calls_DoNotThrow ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Multiple calls to Create should not throw
- IApplication app1 = Application.Create ();
- IApplication app2 = Application.Create ();
- IApplication app3 = Application.Create ();
- Assert.NotNull (app1);
- Assert.NotNull (app2);
- Assert.NotNull (app3);
- // Clean up
- app1.Dispose ();
- app2.Dispose ();
- app3.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void MultipleInstanceAccess_DoesNotThrow ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Multiple accesses to Instance should not throw (it's a singleton)
- IApplication instance1 = ApplicationImpl.Instance;
- IApplication instance2 = ApplicationImpl.Instance;
- IApplication instance3 = ApplicationImpl.Instance;
- Assert.NotNull (instance1);
- Assert.Same (instance1, instance2);
- Assert.Same (instance2, instance3);
- // Clean up
- instance1.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- [Fact]
- public void ResetModelUsageTracking_AllowsSwitchingModels ()
- {
- // Reset the model usage tracking before each test
- ApplicationImpl.ResetModelUsageTracking ();
- // Use modern model
- IApplication app1 = Application.Create ();
- app1.Dispose ();
- // Reset the tracking
- ApplicationImpl.ResetModelUsageTracking ();
- // Should now be able to use legacy model
- IApplication staticInstance = ApplicationImpl.Instance;
- Assert.NotNull (staticInstance);
- staticInstance.Dispose ();
- // Reset again
- ApplicationImpl.ResetModelUsageTracking ();
- // Should be able to use modern model again
- IApplication app2 = Application.Create ();
- Assert.NotNull (app2);
- app2.Dispose ();
- ApplicationImpl.ResetModelUsageTracking ();
- }
- }
|