mirror of https://github.com/SixLabors/ImageSharp
5 changed files with 177 additions and 62 deletions
@ -0,0 +1,95 @@ |
|||||
|
// Copyright (c) Six Labors and contributors.
|
||||
|
// Licensed under the Apache License, Version 2.0.
|
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Tests.Formats.Jpg |
||||
|
{ |
||||
|
using SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder; |
||||
|
using SixLabors.ImageSharp.Formats.Jpeg.GolangPort; |
||||
|
|
||||
|
using Xunit; |
||||
|
|
||||
|
public class JFifMarkerTests |
||||
|
{ |
||||
|
// Taken from actual test image
|
||||
|
private readonly byte[] bytes = { 0x4A, 0x46, 0x49, 0x46, 0x0, 0x1, 0x1, 0x1, 0x0, 0x60, 0x0, 0x60, 0x0 }; |
||||
|
|
||||
|
// Altered components
|
||||
|
private readonly byte[] bytes2 = { 0x4A, 0x46, 0x49, 0x46, 0x0, 0x1, 0x1, 0x1, 0x0, 0x48, 0x0, 0x48, 0x0 }; |
||||
|
|
||||
|
// Incorrect density values. Zero is invalid.
|
||||
|
private readonly byte[] bytes3 = { 0x4A, 0x46, 0x49, 0x46, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 }; |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerLengthIsCorrect() |
||||
|
{ |
||||
|
Assert.Equal(13, JFifMarker.Length); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerReturnsCorrectParsedValue() |
||||
|
{ |
||||
|
bool isJFif = JFifMarker.TryParse(this.bytes, out var marker); |
||||
|
|
||||
|
Assert.True(isJFif); |
||||
|
Assert.Equal(1, marker.MajorVersion); |
||||
|
Assert.Equal(1, marker.MinorVersion); |
||||
|
Assert.Equal(1, marker.DensityUnits); |
||||
|
Assert.Equal(96, marker.XDensity); |
||||
|
Assert.Equal(96, marker.YDensity); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerIgnoresIncorrectValue() |
||||
|
{ |
||||
|
bool isJFif = JFifMarker.TryParse(new byte[] { 0, 0, 0, 0 }, out var marker); |
||||
|
|
||||
|
Assert.False(isJFif); |
||||
|
Assert.Equal(default(JFifMarker), marker); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerIgnoresCorrectHeaderButInvalidDensities() |
||||
|
{ |
||||
|
bool isJFif = JFifMarker.TryParse(this.bytes3, out var marker); |
||||
|
|
||||
|
Assert.False(isJFif); |
||||
|
Assert.Equal(default(JFifMarker), marker); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerEqualityIsCorrect() |
||||
|
{ |
||||
|
JFifMarker.TryParse(this.bytes, out var marker); |
||||
|
JFifMarker.TryParse(this.bytes, out var marker2); |
||||
|
|
||||
|
Assert.True(marker.Equals(marker2)); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerInEqualityIsCorrect() |
||||
|
{ |
||||
|
JFifMarker.TryParse(this.bytes, out var marker); |
||||
|
JFifMarker.TryParse(this.bytes2, out var marker2); |
||||
|
|
||||
|
Assert.False(marker.Equals(marker2)); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerHashCodeIsReplicable() |
||||
|
{ |
||||
|
JFifMarker.TryParse(this.bytes, out var marker); |
||||
|
JFifMarker.TryParse(this.bytes, out var marker2); |
||||
|
|
||||
|
Assert.True(marker.GetHashCode().Equals(marker2.GetHashCode())); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void MarkerHashCodeIsUnique() |
||||
|
{ |
||||
|
JFifMarker.TryParse(this.bytes, out var marker); |
||||
|
JFifMarker.TryParse(this.bytes2, out var marker2); |
||||
|
|
||||
|
Assert.False(marker.GetHashCode().Equals(marker2.GetHashCode())); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue