ios/SpectrumKit/SpectrumKitTests/FSPConfigurationTests.mm (172 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
#import <XCTest/XCTest.h>
#import <SpectrumKit/FSPConfiguration.h>
#import <SpectrumKit/FSPConfiguration_Private.h>
using namespace facebook::spectrum;
@interface FSPConfigurationTests : XCTestCase
@end
@implementation FSPConfigurationTests
- (void)testDefaultValues
{
const auto configuration = [FSPConfiguration new];
XCTAssertEqual(configuration.general.interpretMetadata, YES);
XCTAssertEqualObjects(configuration.general.defaultBackgroundColor, [UIColor colorWithRed:1 green:1 blue:1 alpha:1]);
XCTAssertEqual(configuration.general.propagateChromaSamplingModeFromSource, YES);
XCTAssertEqual(configuration.general.chromaSamplingModeOverride, FSPConfigurationChromaSamplingModeOverrideNone);
XCTAssertEqual(configuration.jpeg.useTrellis, YES);
XCTAssertEqual(configuration.jpeg.useProgressive, NO);
XCTAssertEqual(configuration.jpeg.useOptimizeScan, NO);
XCTAssertEqual(configuration.jpeg.useCompatibleDCScanOption, NO);
XCTAssertEqual(configuration.jpeg.usePSNRQuantTable, NO);
XCTAssertEqual(configuration.png.useInterlacing, NO);
XCTAssertEqual(configuration.png.compressionLevel, FSPPngCompressionLevelDefault);
XCTAssertEqual(configuration.webp.method, 3);
XCTAssertEqual(configuration.webp.imageHint, FSPConfigurationWebpImageHintDefault);
}
- (void)testInternalTypeConversion
{
XCTAssertEqual(makeDefaultInternalConfiguration(), [makeDefaultConfiguration() makeInternalConfiguration]);
}
#pragma mark - Copy
- (void)testCopyIsEqual
{
const auto object = makeDefaultConfiguration();
XCTAssertEqualObjects(object, [object copy]);
}
#pragma mark - Equality
- (void)testIsEqual
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
XCTAssertEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentGeneralBackgroundColor
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.general.defaultBackgroundColor = UIColor.greenColor;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentGeneralInterpretMetadata
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.general.interpretMetadata = YES;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentGeneralPropagateChromaSamplingModeFromSource
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.general.propagateChromaSamplingModeFromSource = NO;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentGeneralChromaSamplingModeOverride
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.general.chromaSamplingModeOverride = FSPConfigurationChromaSamplingModeOverride420;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentJpegUseTrellis
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.jpeg.useTrellis = YES;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentJpegUseProgressive
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.jpeg.useProgressive = NO;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentJpegUseOptimizeScan
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.jpeg.useOptimizeScan = YES;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentJpegUseCompatibleDCScanOption
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.jpeg.useCompatibleDCScanOption = NO;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentJpegUsePSNRQuantTable
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.jpeg.usePSNRQuantTable = NO;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentPngUseInterlacing
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.png.useInterlacing = NO;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentPngCompressionLevel
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.png.compressionLevel = FSPPngCompressionLevelBestSpeed;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentWebpMethod
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.webp.method = 4;
XCTAssertNotEqualObjects(object, object2);
}
- (void)testIsNotEqualOnDifferentWebpImageHint
{
const auto object = makeDefaultConfiguration();
const auto object2 = makeDefaultConfiguration();
object2.webp.imageHint = FSPConfigurationWebpImageHintPicture;
XCTAssertNotEqualObjects(object, object2);
}
#pragma mark - Helpers
static Configuration makeDefaultInternalConfiguration()
{
auto configuration = Configuration{};
configuration.general.defaultBackgroundColor(image::Color{255, 0, 0});
configuration.general.interpretMetadata(false);
configuration.general.propagateChromaSamplingModeFromSource(true);
configuration.general.chromaSamplingModeOverride(Configuration::General::ChromaSamplingModeOverride::S444);
configuration.jpeg.useTrellis(false);
configuration.jpeg.useProgressive(true);
configuration.jpeg.useOptimizeScan(false);
configuration.jpeg.useCompatibleDcScanOpt(true);
configuration.jpeg.usePsnrQuantTable(true);
configuration.png.useInterlacing(true);
configuration.png.compressionLevel(Configuration::Png::CompressionLevelBestCompression);
configuration.webp.method(2);
configuration.webp.imageHint(Configuration::Webp::ImageHint::Photo);
return configuration;
}
static FSPConfiguration *makeDefaultConfiguration()
{
const auto generalConfiguration = [[FSPConfigurationGeneral alloc] initWithDefaultBackgroundColor:UIColor.redColor
interpretMetadata:NO
propagateChromaSamplingModeFromSource:YES
chromaSamplingModeOverride:FSPConfigurationChromaSamplingModeOverride444];
const auto jpegConfiguration = [[FSPConfigurationJpeg alloc] initWithUseTrellis:NO
useProgressive:YES
useOptimizeScan:NO
useCompatibleDCScanOption:YES
usePSNRQuantTable:YES];
const auto pngConfiguration = [[FSPConfigurationPng alloc] initWithUseInterlacing:YES
compressionLevel:FSPPngCompressionLevelBestCompression];
const auto webpConfiguration = [[FSPConfigurationWebp alloc] initWithMethod:2
imageHint:FSPConfigurationWebpImageHintPhoto];
return [[FSPConfiguration alloc] initWithGeneral:generalConfiguration
jpeg:jpegConfiguration
png:pngConfiguration
webp:webpConfiguration];
}
@end