Namespace Serenity.Tests.Editor
Classes
AddressablesPathLabelRulesTests
A module label comes from the module's own location — its media folder, its script folder, its shipped boot task or one of the shipped layout paths — never from a word that happens to appear elsewhere in a path. Only the asset-type words stay word-anywhere, because they say what an asset is.
AudioChannelGroupReassignerTests
The Audio Channel Manager's Inconsistencies row says a channel with no usable mixer group can be reassigned "from this tool" — so it can: the row knows which channel it is about, and the reassignment writes the chosen group to that channel's settings through the shipped-content gate.
ClipSpatialSettingsDraftTests
The draft is the one carrier of a clip definition's spatial group outside the asset: it starts from the defaults of an untouched definition, writes all five values onto a definition, and applies the same rules as the definition itself.
CompositeHostedMenuLabelTests
A composite view hosts its child menus by building owned instances through the menu service, and the menu
installer only knows the menu definitions it discovers under the menu label. The shipped composite's child
menus live under Media/GeneratedViews, whose folder rule labels them as composite views only, so every
boot that installed the menus logged seven "unknown menu definition 'CompositeScreen_*'" warnings and drew the
composite empty. A menu definition is a menu wherever it lives: the labeler must say so by its type.
FoundationEditorIdentityLookupTests
What an inspector's Id row compares against. Two assets whose Id is still empty share nothing — an empty Id is "not set", never "already in use" — so one asset's inspector never shows a sibling's object chip. And a boot-created service component never exists as an asset of its own, so its inspector does not search the project for one.
SerenityAddressablesAutoLabelerTests
Tests for Serenity.Global.Infrastructure.Editor.Utils.SerenityAddressablesAutoLabeler.PartitionCandidates(System.Collections.Generic.IReadOnlyList{System.String},System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.String}): the fix that stops the
auto-labeler from only ever seeing .asset imports, so a package asset such as a shipped .wav
or .png reaches Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler.RetagAssets(System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{System.String}) instead of being dropped.
SerenityAddressablesInstallerTests
Pins the SessionState bookkeeping Serenity.Global.Infrastructure.Editor.Utils.SerenityAddressablesInstaller.QueueFullRetagAndBuild
owns, without letting the deferred ExecutePendingWork pass actually run: the method only
schedules that work via EditorApplication.delayCall, which never fires inside a synchronous
[Test] method, so asserting the keys right after the call is safe.
SerenityPackageImportRetaggerTests
Pure tests for Serenity.Global.Infrastructure.Editor.Utils.SerenityPackageImportRetagger.ContainsPackageContent(System.String[]): the detector that decides whether a completed package import touched Serenity content and must re-arm the full retag.
UnityAddressablesLabelerCreatorFolderTests
Every creator of a folder-labelled module writes into a default folder the labeler recognises as that module's: an asset placed there carries the module's label. The creators' own constants are the paths under test, so a creator that moves its default folder without the labeler following fails here.
UnityAddressablesLabelerModuleLabelOriginTests
The reverse of DecideLabels_EveryShippedEntry_DerivesNoLabelTheEntryDoesNotAlreadyCarry: every
module:* label a committed entry carries is one the labeler derives from the entry's own location, or
one an explained exception names. A committed label nothing can derive is a label a retag would never put
back, so it can only drift; an exception nothing needs any more is removed.
UnityAddressablesLabelerRetagNormalizationTests
EditMode tests for the label-normalization contract Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler.RetagAssets(System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{System.String})
applies through its AddressablesManagedLabelNormalizer collaborator: module labels are
additive-only (a re-evaluation at a new path never strips one an earlier call set), the ownership
label (PROJECT_OWNED) is the sole authoritative exception — added or
removed to match the asset's current path — and a label outside the managed set is never touched
either way. Every fixture is a real asset on disk; the labeler reads real
AddressableAssetSettings, so nothing here can be faked in-memory.
UnityAddressablesLabelerTests
Tests for the pure path/eligibility logic of Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler: Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler.IsCandidatePath(System.String) (root-scoped), Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler.IsRetagEligible(System.String) (root-agnostic, used by the "Retag Selected" tool) and Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler.BuildAddress(System.String). Validates the filtering that decides which assets are eligible for Addressables registration and how their addresses are derived during the retag process.
UnityAddressablesLabelerWizardFolderTests
The labels Serenity.Global.Infrastructure.Editor.Utils.UnityAddressablesLabeler derives for what the wizards write into their own default folders, at those literal paths. The Wave Set wizard's stage folder holds both the stage prefab and the wave assets, and the Character wizard writes to a plural folder, so a folder name cannot tell these modules apart: each asset must be labelled by what it is.
UnityAudioDepthCueGizmoDrawerTests
The strokes the Play Mode depth-cue gizmo sends to its canvas for one voice, checked against a recording canvas so
nothing here touches Handles: a sounding voice is one line from its source to the listener and one label at
its source, both in the voice's colour, a voice heard through a portal is two lines through the portal instead of one,
and a silent voice draws nothing.
UnityAudioDepthCueGizmoTests
The Play Mode depth-cue gizmo: a thin editor-only drawer over a pure model that decides what each voice shows. The line goes from green to red with how occluded the voice is, and the label reads the current cutoff in hertz; nothing of it exists in a player build.
UnityAudioDepthCueMusicChannelHealthCheckRepairTests
A music channel with depth cues switched on can never use them, because music channels create no cue filters. The Health Check lists it with a fix that switches the cues off, saves, reports and can be undone, and that fix refuses channels the package ships. A healthy project shows no row.
UnityAudioDepthCueOcclusionMaskHealthCheckRepairTests
A channel with depth cues on and no occlusion layer selected is listed in the Health Check with a fix that selects the default physics layers, saves, reports and can be undone, and that fix refuses channels the package ships. A healthy project shows no row.
UnityAudioDepthCueReverbCapHealthCheckRepairTests
A channel with the reverb on that allows no reverberated voice can never be heard. The Health Check lists it with a fix that sets the default voice limit, saves, reports and can be undone, and that fix refuses channels the package ships. A healthy project shows no row.
UnityAudioDepthCueReverbPresetHealthCheckRepairTests
A channel with the reverb on and the Off preset runs the reverb but starts from a silent room level, so it can never be heard. The Health Check lists it with a fix that selects the default preset, saves and reports, and that fix refuses channels the package ships. A healthy project shows no row.
UnityAudioDepthCueSettingsDefaultsTests
The depth-cue settings block must default to "off and inert": a fresh or legacy audio player settings asset behaves exactly as before, and the authored curves are never shared between instances.
UnityAudioDepthCueSettingsScanTests
The project-wide scan behind the depth-cue Health Check rows: it names the audio channels whose cues can never react to a wall, whose reverb is silenced by its cap or its preset, and the music channels that carry cues they cannot use (a music channel is listed by the music row only), and stays silent otherwise.
UnityAudioPlayerClipDefinitionEditorSpatialTests
The clip definition inspector draws the spatial group under a toggle: the fields are editable only while the toggle is on, and a group the runtime would ignore is reported with the rule it breaks. The disabled state itself is an IMGUI scope, so the contract is held on the two decisions behind it and on a real draw that must not throw.
UnityAudioPlayerClipDefinitionShippedContentTests
A clip definition whose stored Audio Clip Path drifted from its clip shows an "Update Audio Clip Path" button. On a definition the package ships the button must refuse — the next package update overwrites that file, which is why the import postprocessor already skips it — and the inspector must say why, while on the author's own copy the button still stores the current path.
The button runs Serenity.AudioPlayer.Infrastructure.Settings.Editor.UnityAudioPlayerClipPathSync.SyncIfStale(Serenity.AudioPlayer.Infrastructure.Settings.UnityAudioPlayerClipDefinition) and nothing else, so the click is driven through that method: an IMGUI click cannot be synthesized headlessly without the button's rect, which only the inspector's own layout knows. The notice is proven through a real inspector draw. The drift is made in memory only, so the shipped file never holds it.
UnityAudioPlayerClipPathExplicitSyncTests
A clip definition's stored Audio Clip Path is repaired only when the author asks: moving the clip or changing its Addressables address leaves the definition's file untouched, the Health Check lists the drift with an "Update Audio Clip Paths" fix that saves, reports and can be undone, and that fix refuses definitions the package ships.
UnityAudioPlayerServiceFrozenSurfaceTests
Characterization of the public and protected surface of UnityAudioPlayerService. User subclasses and shipped subclasses (the music player service) are compiled against it, so a member may be added but none of the pinned ones may be removed, renamed, retyped, re-scoped or have its virtual flag changed.
UnityAudioRoomAuthoringNoticesTests
What an author is told about an Audio Room, collected without a running game: a room that contains nothing (no enabled trigger collider, a collider that cannot answer, a solid collider), a room with no portal under it, and a healthy room that is told nothing. Portals count when they are real children whose nearest room is this one, active or not.
UnityAudioRoomComponentEditorTests
The inspector of an Audio Room: Unity builds it for the room, and every notice about the room is shown as an error when it is one (a solid collider) and as a warning otherwise.
UnityAudioRoomGizmoDrawerTests
The strokes the scene gizmos of an Audio Room and an Audio Portal send to their canvas, checked against a recording canvas so nothing here
touches Handles: a room is the twelve faint edges of its volume, a portal with a room is a line to the room's centre plus a label,
a portal without a room is only a label in its own colour, and a room that contains nothing draws nothing.