c412469773
Implements the suggestions from the last review pass:
- Add AmiReel.Tests (MSTest), covering the pure logic in Models/ and
Services/: SupportedVideoFormats, AppSettings normalization,
UserFacingErrors.Summarize, the new FfmpegProgressParser/
FfmpegOutputFilter, RenderPipeline.Validate, BuildProgressMessage, and
MoveSourceVideos. 59 tests, all passing. UI code-behind and anything that
spawns an actual FFmpeg process are left to manual/integration testing.
Exclude AmiReel.Tests\**\*.cs from AmiReel.csproj's default item glob —
it's a subfolder of the app project now, so without the exclude the app
itself was compiling the MSTest-only test files.
- Extract the FFmpeg version/library-banner boilerplate list that
ProcessRunner (live log filter) and UserFacingErrors (error summarizer)
had each duplicated into a shared FfmpegOutputFilter.IsBoilerplateLine;
each caller keeps its own remaining context-specific checks on top.
Also extract ProcessRunner's line-parsing regexes into a standalone
FfmpegProgressParser so it's directly unit-testable without spawning a
process.
- Convert AppSettings and RenderSettings from positional record
constructors to named `required` init properties. Both records had
runs of same-typed consecutive parameters (three string timing fields
in AppSettings; three doubles then five ints in RenderSettings) that a
positional constructor would let get silently transposed at a call site
without the compiler catching it. Update the two call sites
(MainPage.xaml.cs) to object-initializer syntax.
- Add Properties/AssemblyInfo.cs with InternalsVisibleTo("AmiReel.Tests")
and make Validate/BuildProgressMessage/IsNoise internal so tests can
reach them directly instead of only through process-spawning entry
points.
- README: document `dotnet test`, and note that Package.appxmanifest's
Identity is a local-dev placeholder that needs a real publisher/cert
before MSIX distribution.
Verified: dotnet build (solution + test project) is 0 warnings/errors,
dotnet test is 59/59 passing, and the app still launches unchanged.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
92 lines
4.4 KiB
XML
92 lines
4.4 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
<PropertyGroup>
|
|
<OutputType>WinExe</OutputType>
|
|
<TargetFramework>net10.0-windows10.0.26100.0</TargetFramework>
|
|
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
|
|
<RootNamespace>AmiReel</RootNamespace>
|
|
<AssemblyName>AmiReel</AssemblyName>
|
|
<ApplicationIcon>branding\AmiReel.ico</ApplicationIcon>
|
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
|
<Platforms>x86;x64;ARM64</Platforms>
|
|
<RuntimeIdentifier Condition="'$(RuntimeIdentifier)' == ''">win-$([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLowerInvariant())</RuntimeIdentifier>
|
|
<PublishProfile Condition="Exists('Properties\PublishProfiles\win-$(Platform).pubxml')">win-$(Platform).pubxml</PublishProfile>
|
|
<UseWinUI>true</UseWinUI>
|
|
<WinUISDKReferences>false</WinUISDKReferences>
|
|
<EnableMsixTooling>true</EnableMsixTooling>
|
|
<WindowsPackageType>None</WindowsPackageType>
|
|
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<Nullable>enable</Nullable>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- AmiReel.Tests is a subfolder of this project's directory; exclude it from the
|
|
default SDK glob so its test files (and MSTest-only usings) aren't compiled
|
|
into the app itself. -->
|
|
<Compile Remove="AmiReel.Tests\**\*.cs" />
|
|
<EmbeddedResource Remove="AmiReel.Tests\**\*" />
|
|
<None Remove="AmiReel.Tests\**\*" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Content Include="Assets\SplashScreen.scale-200.png" />
|
|
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
|
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
|
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
|
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
|
<Content Include="Assets\Square44x44Logo.targetsize-48_altform-lightunplated.png" />
|
|
<Content Include="Assets\StoreLogo.png" />
|
|
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Manifest Include="$(ApplicationManifest)" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<EmbeddedResource Include="ThirdParty\ffmpeg.exe" Condition="Exists('ThirdParty\ffmpeg.exe')" LogicalName="AmiReel.Tools.ffmpeg.exe" />
|
|
<EmbeddedResource Include="ThirdParty\ffprobe.exe" Condition="Exists('ThirdParty\ffprobe.exe')" LogicalName="AmiReel.Tools.ffprobe.exe" />
|
|
</ItemGroup>
|
|
|
|
<!--
|
|
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
|
|
Tools extension to be activated for this project even if the Windows App SDK Nuget
|
|
package has not yet been restored.
|
|
-->
|
|
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
|
|
<ProjectCapability Include="Msix" />
|
|
</ItemGroup>
|
|
|
|
<!--
|
|
Microsoft.Windows.SDK.BuildTools.WinApp adds first-class support for
|
|
`dotnet run` on packaged WinUI apps: it hooks the .NET CLI Run target to
|
|
register a debug identity via the winapp CLI and launch the app with
|
|
package identity (AUMID).
|
|
Set <EnableWinAppRunSupport>false</EnableWinAppRunSupport> in a
|
|
<PropertyGroup> above to opt out.
|
|
-->
|
|
<ItemGroup>
|
|
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.28000.2526" />
|
|
<PackageReference Include="Microsoft.WindowsAppSDK" Version="2.3.1" />
|
|
<PackageReference Include="Microsoft.Windows.SDK.BuildTools.WinApp" Version="0.5.0" />
|
|
</ItemGroup>
|
|
|
|
<!--
|
|
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
|
|
Explorer "Package and Publish" context menu entry to be enabled for this project even if
|
|
the Windows App SDK Nuget package has not yet been restored.
|
|
-->
|
|
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
|
|
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
|
|
</PropertyGroup>
|
|
|
|
<!-- Publish Properties -->
|
|
<PropertyGroup>
|
|
<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
|
|
<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
|
|
<PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
|
|
<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
|
|
<IncludeAllContentForSelfExtract Condition="'$(Configuration)' != 'Debug'">True</IncludeAllContentForSelfExtract>
|
|
</PropertyGroup>
|
|
</Project>
|