diff --git a/IMPLEMENTATION.md b/IMPLEMENTATION.md index 66ede0e..bdd36be 100644 --- a/IMPLEMENTATION.md +++ b/IMPLEMENTATION.md @@ -51,7 +51,7 @@ Each type lives in `src/FrameProcessor/Domain/`. Tests in `tests/FrameProcessor. - `enum { Landscape, Portrait }`. - JSON converter reading/writing kebab-case lowercase. -### [ ] 1.4 `Resolution` +### [x] 1.4 `Resolution` - `record(int Width, int Height)`. - `Resolution ForOrientation(Orientation o)` — swaps when portrait. diff --git a/src/FrameProcessor/Domain/Resolution.cs b/src/FrameProcessor/Domain/Resolution.cs new file mode 100644 index 0000000..66363ff --- /dev/null +++ b/src/FrameProcessor/Domain/Resolution.cs @@ -0,0 +1,11 @@ +namespace FrameProcessor.Domain; + +public sealed record Resolution(int Width, int Height) +{ + public Resolution ForOrientation(Orientation orientation) => orientation switch + { + Orientation.Landscape => this, + Orientation.Portrait => new Resolution(Height, Width), + _ => throw new ArgumentOutOfRangeException(nameof(orientation), orientation, null), + }; +} diff --git a/tests/FrameProcessor.Tests/ResolutionTests.cs b/tests/FrameProcessor.Tests/ResolutionTests.cs new file mode 100644 index 0000000..89bd98b --- /dev/null +++ b/tests/FrameProcessor.Tests/ResolutionTests.cs @@ -0,0 +1,44 @@ +using FrameProcessor.Domain; + +namespace FrameProcessor.Tests; + +public class ResolutionTests +{ + [Fact] + public void Constructor_StoresWidthAndHeight() + { + var resolution = new Resolution(1600, 1200); + + Assert.Equal(1600, resolution.Width); + Assert.Equal(1200, resolution.Height); + } + + [Fact] + public void ForOrientation_Landscape_ReturnsSameDimensions() + { + var resolution = new Resolution(1600, 1200); + + var oriented = resolution.ForOrientation(Orientation.Landscape); + + Assert.Equal(1600, oriented.Width); + Assert.Equal(1200, oriented.Height); + } + + [Fact] + public void ForOrientation_Portrait_SwapsWidthAndHeight() + { + var resolution = new Resolution(1600, 1200); + + var oriented = resolution.ForOrientation(Orientation.Portrait); + + Assert.Equal(1200, oriented.Width); + Assert.Equal(1600, oriented.Height); + } + + [Fact] + public void Equality_BasedOnWidthAndHeight() + { + Assert.Equal(new Resolution(1600, 1200), new Resolution(1600, 1200)); + Assert.NotEqual(new Resolution(1600, 1200), new Resolution(1200, 1600)); + } +}