Namespace Serenity.CreateGame.Tests.Editor
Classes
AdoptAllRootRulesTests
Pure EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.AdoptAllRootRules — the root-set decision behind Serenity.CreateGame.Infrastructure.Editor.Steps.SettingsAdoptionFlow.AdoptAll(System.Collections.Generic.IReadOnlyList{Serenity.CreateGame.Infrastructure.Editor.Systems.SerenitySystemConfigurationRow},System.String,System.Boolean,System.Action), resolved purely from a row's state.
AdoptedReferenceBackfillScopeTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Adoption.AdoptedReferenceBackfillScope.IsInScope(System.String,System.String,System.Collections.Generic.IReadOnlyCollection{System.String}) — covers the fold onto
FoundationReferenceWalker.ShouldWalk: an AssetKey-only holder (an [AssetPathField] string
field, never an IFoundationSettings) must be in scope
too, not only a foundation-settings asset with its own declared contract row.
AdoptedReferenceEndToEndTests
End-to-end EditMode tests adopting REAL shipped systems (never hand-built fixtures) into a shared
scratch output root, proving invariant 3 — adopting a later system repairs references an EARLIER
adoption run left pointing at package content — through the full SystemAdoptionRunner
pipeline: planner, cloner, Id rename, forward remap pass, and back-fill pass, exactly as
SettingsAdoptionFlow drives them.
AdoptedReferenceRemapperTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Adoption.AdoptedReferenceRemapper: the write side of
FoundationReferenceContracts, mirroring SerenityAdoptedReferenceValidatorTests's
shipped/adopted scratch-root split, but asserting the VALUE after a rewrite rather than a report
entry. A "shipped" fixture lives under Serenity.Global.Infrastructure.Editor.SerenityEditorPaths.AssetsRoot; an "adopted" one
lives outside it, already carrying the Id an adoption run would have renamed it to — the state
Serenity.CreateGame.Infrastructure.Editor.Adoption.AdoptedReferenceRemapper.Remap(System.Collections.Generic.IReadOnlyList{System.String},Serenity.Global.Infrastructure.Editor.Validation.FoundationReferenceIndex,Serenity.Global.Infrastructure.Editor.Validation.AdoptedAssetKeyIndex,System.Action{System.String}) actually sees, since it always runs after the Id-rename
pass.
BootTaskAdoptionTranslationTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.BootTaskAdoptionTranslation.ToAdoptedPaths(System.Collections.Generic.IReadOnlyList{System.String},Serenity.CreateGame.Infrastructure.Editor.Adoption.SystemAdoptionPlan) — a pure lookup over a hand-built SystemAdoptionPlan, so no real assets or adoption run is needed to exercise it.
BootTaskCanonicalOrderTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.BootTaskCanonicalOrder: read-only checks against the real shipped task assets and profiles — no asset is created, modified or deleted.
BootTaskGuidArgumentRootsTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.BootTaskGuidArgumentRoots.ResolveReferencedAssetPaths(System.Collections.Generic.IReadOnlyList{System.String}) — the piece that
lets a boot task's opaque stringArgs[0] Guid argument (e.g. a splash cutscene a
PlayInitSplashScreen task plays) become an extra adoption root, since
UnityEditor.AssetDatabase.GetDependencies(System.String,System.Boolean) can never see a plain string reference.
BootTaskRequirementsTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.BootTaskRequirements — the declared "this task needs that system" table. Two of them are guards rather than behavior checks: a requirement naming something outside SerenityInstallableSystemCatalog would silently never gate anything, and a requiring task with no Serenity.CreateGame.Infrastructure.Editor.BootTaskCanonicalOrder slot could never be placed back into a profile.
BootTaskSelectionRulesTests
Pure unit tests for FilterBySelection(IReadOnlyList<string>, Func<string, string>, IReadOnlyCollection<string>, IReadOnlyCollection<string>, Func<string, string>) — no AssetDatabase, a
fake path-to-method-name resolver stands in for Serenity.Global.Infrastructure.Editor.InitializationPipeline.InstallTaskAuthoring.InstallMethodNameForShippedTaskPath(System.String)
and a fake requirement resolver for Serenity.CreateGame.Infrastructure.Editor.BootTaskRequirements.RequiredInstallMethodFor(System.String).
BootTaskSequenceRulesTests
Pure unit tests for InsertMissingSelectedTasks(IReadOnlyList<string>, IReadOnlyList<SerenityInstallableSystem>, Func<string, string>, Func<SerenityInstallableSystem, string>, IReadOnlyList<string>) — no
AssetDatabase; a synthetic sequence, a synthetic canonical order template and fake path/method-name
resolvers stand in for Serenity.CreateGame.Infrastructure.Editor.BootTaskCanonicalOrder and the real project scan
SerenityBootTaskCatalog performs in production.
CreateGameThemeCatalogTests
EditMode test for Serenity.CreateGame.Infrastructure.Editor.CreateGameThemeCatalog: read-only against the project's real shipped
themes under Assets/Serenity/Media/Ui/Themes — no temp folder needed, nothing is written or
cleaned up.
CreateGameWizardCreateFlowTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.CreateGameWizardCreateFlow.PrepareSceneGeneration(System.Func{System.Boolean})'s pure outcome shape
— the real EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo save-prompt dialog cannot be
exercised headless, so every case here injects its own stand-in through the method's
saveModifiedScenesIfUserWantsTo seam instead. The TMP-missing branch depends on whether this
project has TMP Essential Resources imported, so it is asserted only up to "not declined by the save
prompt", matching InitializeSerenityCreateStep's own contract of one log line per outcome
rather than one shared blocking message.
DefaultSettingsAssetCreatorTestSettings
A throwaway IFoundationSettings asset type for DefaultSettingsAssetCreatorTests.
A name of its own (not TestFoundationSettings) is required here: ReflectionActivationUtils.ResolveType
falls back to a short-name search across every loaded type, and a second, unrelated
TestFoundationSettings already exists (a private nested class in UnityDirectoryClonerTests),
which would make that name resolve to nothing.
DefaultSettingsAssetCreatorTests
EditMode tests for DefaultSettingsAssetCreator. Every fixture lives under a scratch
output root wiped in SetUp()/TearDown(); every test passes
registerAsAddressables: false so nothing here touches the Addressables settings.
InitializeSerenityCreateStepTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenityCreateStep.SystemsEligibleForTaskWiring(System.Collections.Generic.IReadOnlyList{Serenity.CreateGame.Infrastructure.Editor.Systems.SerenityInstallableSystem}): a bootstrap
system installs unconditionally and never gets its own Initialization Pipeline task, so the Create
step's task-wiring fan-out must skip it. Pure — no AssetDatabase, no GUI.
InitializeSerenityDoneStepComposerTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.InitializeSerenityDoneStepComposer.Build(Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectWiringResult,System.Int32,Serenity.ProjectRecipe.Infrastructure.Editor.SetupAssistant.MinimalLoopOptions,System.Action{System.String}) — a pure model builder over a
ProjectWiringResult, no AssetDatabase writes. Covers the headline naming the wired
profile, created-path reporting only naming what this run actually created, and the scene-only next
steps appearing exclusively when scene generation succeeded.
InitializeSerenitySettingsStepTests
EditMode tests for SettingsRowActionRules: the pure row → action mapping the
Settings step's per-row button draws from — no GUI, no AssetDatabase. Also covers
Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenitySettingsStep's own row-recompute caching (Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenitySettingsStep.EnsureRowsForTests(System.Collections.Generic.IReadOnlyList{Serenity.CreateGame.Infrastructure.Editor.Systems.SerenityInstallableSystem},System.String)).
InitializeSerenitySystemsStepTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenitySystemsStep's default selection.
InitializeSerenityWindowOpenWithSystemSelectedTests
Proves OpenWithSystemSelected(string) against real window state: the Hub's registered Systems entry point (Task A, slice 2) routes a specific system id here so the reader lands directly on it instead of finding and checking it themselves in the Systems checklist.
InitializeSerenityWindowStepErrorTests
Proves Serenity.CreateGame.Infrastructure.Editor.InitializeSerenityWindow.StepErrorForTests(System.Int32) against real window state, without an
OnGUI pass — mirrors CreateModalWindowStepErrorGateTests's pattern. The Systems case is
deliberately a "reports no error" assertion: an empty system selection is allowed (a reader who wants
only the wired pipeline itself is not blocked) and must never gate Next/Create, unlike an empty project
name or an unacceptable output root.
InstallableSystemDependencyOrderTests
EditMode tests for InstallableSystemDependencyOrder against synthetic graphs — no AppDomain scan involved. SerenityInstallableSystemCatalogTests covers the real catalog's end-to-end order.
PersistenceBackendCreationMenuTests
EditMode tests for PersistenceBackendCreationMenu: every concrete UnityStructuredBackendDefinition subtype is offered, and creating one lands the asset under the output root's Persistence folder, named after the option's display name.
PipelineProfileRowActionsTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.PipelineProfileRowActions: the "Boot pipeline" row's two actions with no dialog and no drawing, so both Serenity.CreateGame.Infrastructure.Editor.Steps.PipelineProfileRowGui (IMGUI) and the Hub "Systems" view's own row report the outcome their own way. Every case here takes the early, file-system-free failure path — a real Adopt/Complete run is covered end to end by ProjectPipelineProfileFactoryTests and ProjectPipelineCompletionTests, neither of which this class duplicates.
PipelineProfileRowRulesTests
Pure EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.PipelineProfileRowRules — the Settings step's "Boot pipeline" row state-to-badge mapping, and the one line describing what completing the project's own profile would do.
PipelineProfileRowStateTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.PipelineProfileRowState: the "Boot pipeline" row's presentation-free state, resolved once and shared by Serenity.CreateGame.Infrastructure.Editor.Steps.PipelineProfileRowGui (IMGUI) and the Hub "Systems" view's own row. Covers the two branches that never touch the shipped-task preview (Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineCompletion.Preview(System.String,System.Collections.Generic.IReadOnlyCollection{System.String},System.String,System.String@)) — Create (no project-owned profile) and Ambiguous (more than one) — so no on-disk scratch profile is needed; the Reuse branch is already covered end to end by PipelineProfileRowRulesTests and the step's own recompute tests.
ProjectPipelineCompletionRulesTests
Pure unit tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineCompletionRules.Plan(System.Collections.Generic.IReadOnlyList{System.String},System.Collections.Generic.IReadOnlyList{System.String},System.Func{System.String,System.String},System.Func{System.String,System.String},System.Collections.Generic.IReadOnlyList{System.String}) — no AssetDatabase: a
synthetic profile task list, synthetic shipped/adopted path pairs and a fake twin resolver stand in for
the real project scan Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineCompletion performs. The real
Serenity.CreateGame.Infrastructure.Editor.BootTaskCanonicalOrder IS the template here, since the placements under test are about
the actual splash tasks' real neighbours.
ProjectPipelineCompletionTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineCompletion — the Reuse-state counterpart of
ProjectPipelineProfileFactoryTests. Every test builds its OWN project profile under a
disposable scratch root (never InstallTaskAuthoring.FindProjectOwnedProfiles, which would
find the real project's own) by seeding it through
Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory.TryCreateFromShipped(System.String,System.Collections.Generic.IReadOnlyList{System.String},System.Action{System.String},System.String@,System.String@) with both output seams redirected, then
completes it and asserts against the profile on disk. The real project's own content is never touched.
ProjectPipelineProfileFactoryTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory. Creating a profile now adopts the shipped canonical one (Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineAdoption), which clones into Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineAdoption.AdoptionOutputRoot before the adopted profile itself is moved to Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory.ProjectProfileFolder — so every test here redirects BOTH seams to the same disposable scratch root via Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory.SetProjectProfileFolderOverrideForTests(System.String) and Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineAdoption.SetAdoptionOutputRootOverrideForTests(System.String) before running and restores them in TearDown() — the real project's own DefaultOutputFolder and Serenity.Global.Infrastructure.Editor.SerenityUserContentPaths.GameRoot are never touched.
ProjectWiringPinResolutionTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectWiringRunner.ResolveProjectOwnedSettingsPathOrNothing(System.String), the rule
behind the four InheritedObjectReference wiring rows: a generated boot scene is pinned to the
project's own settings asset when it has one, and to nothing at all when it does not — leaving the
shipped installer prefab's own pin in place rather than writing a package path the next Serenity update
overwrites.
Every candidate is a ProjectWiringPinTestSettings asset created through a ScratchAssetFixture, so the candidate set is exactly what each test says it is: under Serenity.CreateGame.Tests.Editor.ProjectWiringPinResolutionTests.PackageScratchFolder for shipped content, under Serenity.CreateGame.Tests.Editor.ProjectWiringPinResolutionTests.ProjectScratchFolder for the project's own.
ProjectWiringPinTestSettings
A throwaway settings asset type for ProjectWiringPinResolutionTests, so the fixture owns
every candidate the resolver can find instead of racing the shipped assets of a real settings type.
Lives in its own same-named file so Unity can bind its script when the tests create it as an asset
(mirrors UnityCollectionSettingsLoaderTestSettings). Carries no Id or Guid on purpose:
ProjectWiringRunner.ResolveProjectOwnedSettingsPathOrNothing finds candidates by simple type
name and decides between them by asset PATH, so a foundation identity surface would be dead weight.
ProjectWiringPlannerTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectWiringPlanner against real project state. This dev repo IS the
Serenity package itself, so it has zero project-owned initialization pipeline profiles by default (see
Engram architecture/boot-task-canonical-order) — the "no profile yet" cases read that real state
directly. The "one profile" case creates a disposable scratch profile outside Assets/Serenity
(project-owned per FoundationAssetOwnership.IsProjectOwnedPath) and deletes it in
TearDown(), without Addressables registration.
ProjectWiringRulesTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectWiringRules — pure state resolution, no AssetDatabase
access, so every case here is a plain input/output assertion.
ProjectWiringRunnerTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectWiringRunner against a disposable scratch output root — the
shipped project tree is never written to. Mirrors SerenityCreateGameSceneGeneratorTests's
cleanup pattern: every asset a run's OWN generated content lands under Serenity.CreateGame.Tests.Editor.ProjectWiringRunnerTests.ScratchFolder, so
TearDown() strips that one subtree's Addressables entries before deleting it — including the
project's own initialization pipeline profile, which Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory always
creates under its own pinned Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory.ProjectProfileFolder regardless
of Serenity.CreateGame.Tests.Editor.ProjectWiringRunnerTests.OutputRoot, redirected here to a subfolder of Serenity.CreateGame.Tests.Editor.ProjectWiringRunnerTests.ScratchFolder via
Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineProfileFactory.SetProjectProfileFolderOverrideForTests(System.String). Creating a profile
now adopts the shipped canonical one, cloning into Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineAdoption.AdoptionOutputRoot
first — also redirected here, to Serenity.CreateGame.Tests.Editor.ProjectWiringRunnerTests.ScratchFolder itself, via
Serenity.CreateGame.Infrastructure.Editor.Wiring.ProjectPipelineAdoption.SetAdoptionOutputRootOverrideForTests(System.String) — so the real project's own
pipeline folder and Assets/Game content are never touched.
SerenityBootTaskCatalogTests
EditMode tests for SerenityBootTaskCatalog's selection-aware overload — subtractive
(Serenity.CreateGame.Infrastructure.Editor.BootTaskSelectionRules) plus additive (Serenity.CreateGame.Infrastructure.Editor.BootTaskSequenceRules) — exercised
against the real shipped canonical profile (read-only for every system tested here — Score's task
asset already ships, so no test in this file writes to the project). Score (InstallScore) stands
in for "an attributed system's task"; DisableGameWrapper and InstallTimer stand in for
infrastructure tasks the shipped profile also carries; the three Play*SplashScreen tasks stand
in for "a task that requires a system without being one" (Serenity.CreateGame.Infrastructure.Editor.BootTaskRequirements).
SerenityBuildSettingsBinderTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.SerenityBuildSettingsBinder. UnityEditor.EditorBuildSettings.scenes is this dev project's REAL boot configuration (it ships Serenity_InitializationScene + GameScene), so every test snapshots the full array in SetUp() and restores it unconditionally in TearDown() — which then asserts the restore actually landed, so a leak into the shared project state fails loudly in the same run instead of silently corrupting it for whatever runs next.
SerenityCreateGameBootSceneTests
EditMode tests for the Create Game boot-scene engine. Every test that touches disk points at a private
temp folder — the shipped Serenity.CreateGame.Infrastructure.Editor.CreateGameScenePaths.DefaultRootFolder is never written to —
and cleans up both the assets and their Addressables entries in TearDown(), mirroring
SerenitySampleSceneGeneratorTests.
SerenityCreateGameSceneGeneratorTests
EditMode tests for SerenityCreateGameSceneGenerator. Every test that touches disk points
at a private temp folder — the shipped Serenity.CreateGame.Infrastructure.Editor.CreateGameScenePaths.DefaultRootFolder is never
written to — and cleans up both the assets and their Addressables entries in TearDown(),
mirroring SerenityCreateGameBootSceneTests and SerenitySampleSceneGeneratorTests.
SerenityInstallableSystemCatalogTests
EditMode tests for SerenityInstallableSystemCatalog: the reflection scan over every
[SerenityInstallableSystem]-decorated Install*() method on UnitySerenityInstaller.
SerenityInstallableSystemSelectionTests
EditMode tests for SelectTier(IReadOnlyList<SerenityInstallableSystem>, SerenityInstallableSystemTier): no real installer or
AssetDatabase content needed, so the catalog is a small in-memory fixture.
SerenitySystemConfigurationFreshnessWatcherTests
EditMode tests for SerenitySystemConfigurationFreshnessWatcher. Every test injects its own subscribe/unsubscribe delegates so none of them touch the real UnityEditor.EditorApplication.projectChanged event — a captured handler stands in for a raised project change.
SerenitySystemConfigurationResolverTests
EditMode tests for SerenitySystemConfigurationResolver. Every fixture is a real
TestFoundationSettings asset created on disk (the identity checks read
SerenityHealthCheckValidator.LoadFoundationAssets, a project-wide AssetDatabase scan,
so nothing here can be faked in-memory), created in SetUp and removed in TearDown.
SettingsAdoptionConfirmationGuiTests
Pure EditMode tests for SettingsAdoptionConfirmationGui's "Ids that will change" block —
built directly from hand-authored SystemAdoptionPlan instances (public constructor), so
none of these touch AssetDatabase.
SettingsReferenceRulesTests
EditMode tests for SettingsReferenceRules: pure field-type-to-system matching and
message building — no UnityEditor or AssetDatabase access.
SettingsRowActionExecutorTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Steps.SettingsRowActionExecutor: the Settings row action dispatch extracted
out of Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenitySettingsStep. Every case avoids any code path that shows a real
EditorUtility.DisplayDialog confirmation (Adopt/AdoptAllAssets are exercised only through their
own zero-candidate early returns), since nothing in this suite may block a headless run.
SettingsRowActionRulesTests
Unit tests for SettingsRowActionRules: the pure primary/secondary action mapping, with no asset on disk needed.
SettingsRowAssetsBadgeRulesTests
Pure EditMode tests for SettingsRowAssetsBadgeRules — every combination of shipped and remaining shipped asset counts the Settings step's second row badge can render.
SettingsRowBootTaskWiringRulesTests
Pure unit tests for SettingsRowBootTaskWiringRules — no AssetDatabase.
SettingsRowDependencyRulesTests
EditMode tests for SettingsRowDependencyRules: the pure "Depends on: ..." line and dependency-not-ready warning tooltip text behind SettingsRowDependencyGui's row, and shared by the Hub "Systems" view's own row.
SettingsRowReferenceAuditorTests
EditMode tests for SettingsRowReferenceAuditor against real scratch assets: a TestReferencingFoundationSettings asset with a reference to TestFoundationSettings that was never assigned keeps the row InProject with a warning, naming the field and the system to configure first, and offers Assign; assigning the sole project-owned candidate through SettingsReferenceInspector clears the warning. A reference that WAS assigned and is now dangling (its target deleted) downgrades the row to Invalid instead. Only a project-owned row (InProject) is audited at all — a shipped (InPackage) row's unassigned reference falls back to the factory default and is never flagged.
ShippedSystemAssetCatalogTests
Read-only EditMode tests for ShippedSystemAssetCatalog against the real shipped package — every test but RemainingMemberPaths_AfterMirroringOneMember_ExcludesThatMember() reads the project as-is and creates nothing; that one test mirrors a single member into a scratch, non-Addressable output folder, deleted again in TearDown().
ShippedSystemAssetCountsTests
EditMode tests for Serenity.CreateGame.Infrastructure.Editor.Systems.ShippedSystemAssetCounts: the shipped-vs-remaining asset count lookup extracted out of Serenity.CreateGame.Infrastructure.Editor.Steps.InitializeSerenitySettingsStep.
ShippedSystemAssetMembershipRulesTests
Pure EditMode tests for ShippedSystemAssetMembershipRules — hand-written paths and a
hand-written folder-rule table mirroring the relevant subset of UnityAddressablesLabeler.PathRules,
so these never touch AssetDatabase and stay independent of the labeler's internal table shape.
SystemAdoptionClosureRulesTests
Pure EditMode tests for SystemAdoptionClosureRules — no AssetDatabase, no assets
on disk; already-adopted detection is driven by a fake existence predicate.
SystemAdoptionFolderSummaryTests
Pure EditMode tests for SystemAdoptionFolderSummary — hand-written entries, no
AssetDatabase calls.
SystemAdoptionPlannerTests
EditMode tests for SystemAdoptionPlanner: real fixtures under a scratch package folder (a real shipped asset cannot stand in here, since these tests need to control the closure precisely), wiped in both SetUp() and TearDown().
SystemAdoptionRunnerTests
EditMode tests for SystemAdoptionRunner and SystemAdoptionVerifier. Every fixture lives under a scratch package folder and a scratch output root, both owned by a ScratchAssetFixture created in SetUp() and disposed in TearDown().
SystemBootTaskWiringInspectorTests
EditMode tests for SystemBootTaskWiringInspector. The profile-scanning half of the
question is already covered by InstallTaskAuthoringTests.ProjectOwnedProfileNamesByInstallMethodName_*
against real scratch profiles; these tests only need a method name real enough that no project profile
coincidentally carries it, so a made-up name stands in without needing a scratch fixture of its own.
TestFoundationSettings
A throwaway IFoundationSettings asset type for
SerenitySystemConfigurationResolverTests. Lives in its own same-named file so Unity
can bind its script when the tests create it as an asset (the same reason
SettingsAssetResolutionTestSettings gives).
TestReferencingFoundationSettings
A throwaway IFoundationSettings asset type for SettingsRowReferenceAuditorTests, carrying a reference to another settings asset (TestFoundationSettings) so the auditor's unassigned-reference detection has a real field to walk. Lives in its own same-named file so Unity can bind its script when the tests create it as an asset (the same reason TestFoundationSettings gives).