public IEnumerator SubScene_NotOpenedForEdit_RemainsClosedInPlayMode([Values(EnterPlayModeOptions.DisableDomainReload | EnterPlayModeOptions.DisableSceneReload)] EnterPlayModeOptions enterPlayModeOptions)
        {
            // Set editor settings
            EditorSettings.enterPlayModeOptionsEnabled = enterPlayModeOptions != EnterPlayModeOptions.None;
            EditorSettings.enterPlayModeOptions        = enterPlayModeOptions;
            var expectingDomainReload = !enterPlayModeOptions.HasFlag(EnterPlayModeOptions.DisableDomainReload);

            DisableSetupAndTearDown();

            EditorSceneManager.OpenScene("Assets/HelloCube/3. SubScene/SubScene.unity", OpenSceneMode.Single);
            var subScene = Object.FindObjectOfType <SubScene>();

            Assert.NotNull(subScene);
            Assert.IsFalse(subScene.IsLoaded);
            Assert.AreEqual(1, SceneManager.sceneCount);

            // Enter play mode
            yield return(new EnterPlayMode(expectingDomainReload));

            // Validate that subscene is still loaded
            subScene = Object.FindObjectOfType <SubScene>();
            Assert.NotNull(subScene);
            Assert.IsFalse(subScene.IsLoaded);
            Assert.AreEqual(1, SceneManager.sceneCount);

            yield return(new ExitPlayMode());

            EnableSetupAndTearDown();
        }
        public IEnumerator DefaultBootstrappedWorld_OnSecondEnterPlayMode_ProducesOneWorld([ValueSource(nameof(TestEnterPlayModeOptions))] EnterPlayModeOptions enterPlayModeOptions)
        {
            // Set editor settings
            EditorSettings.enterPlayModeOptionsEnabled = enterPlayModeOptions != EnterPlayModeOptions.None;
            EditorSettings.enterPlayModeOptions        = enterPlayModeOptions;
            m_ExpectingDomainReload = !enterPlayModeOptions.HasFlag(EnterPlayModeOptions.DisableDomainReload);

            DisableSetupAndTearDown();

            // Make sure we have an Editor world initialized
            AddVerificationScript();
            Assert.NotNull(World.DefaultGameObjectInjectionWorld);

            // Enter play mode
            Debug.Log("Before EnterPlayMode");
            yield return(new EnterPlayMode(m_ExpectingDomainReload));

            m_DefaultWorldsCount    = GetDefaultWorldsCount();
            m_EditorWorldsCount     = GetEditorWorldsCount();
            m_FirstEnterWorldsCount = World.All.Count;
            Debug.Log("Before ExitPlayMode");
            yield return(new ExitPlayMode());

            // Validate Game World in Play Mode
            Assert.AreEqual(1, m_DefaultWorldsCount);
            // Validate no Editor World in Play Mode
            Assert.AreEqual(0, m_EditorWorldsCount);

            Debug.Log("Before EnterPlayMode");
            yield return(new EnterPlayMode(m_ExpectingDomainReload));

            m_DefaultWorldsCount     = GetDefaultWorldsCount();
            m_EditorWorldsCount      = GetEditorWorldsCount();
            m_SecondEnterWorldsCount = World.All.Count;
            Debug.Log("Before ExitPlayMode");
            yield return(new ExitPlayMode());

            EnableSetupAndTearDown();

            Assert.AreEqual(1, m_DefaultWorldsCount);
            Assert.AreEqual(0, m_EditorWorldsCount);
            Assert.AreEqual(m_FirstEnterWorldsCount, m_SecondEnterWorldsCount);
        }