blob: 2544c653b5127137a386a488216cd2c8cea18bb7 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {ImageOrientation} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/image_orientation.js';
import {assertEquals} from 'chrome://test/chai_assert.js';
import {ImageLoaderUtil} from './image_loader_util.js';
import {LoadImageRequest} from './load_image_request.js';
/**
* Casts a map of options as an incoming load request to test CopyParameters.
*
* @param {Image} source
* @param {Object} options
* @return {!ImageLoaderUtil.CopyParameters} Calculated copy parameters.
*/
function calculateCopyParametersFromOptions(source, options) {
return ImageLoaderUtil.calculateCopyParameters(
source, /** @type{!LoadImageRequest} */ (options));
}
/**
* Test case:
* - Source image: 200x50
* - Target: max size is 100x100
*/
export function testNormalImage() {
const source = new Image();
source.width = 200;
source.height = 50;
const options = {
maxWidth: 100,
maxHeight: 100,
orientation: ImageOrientation.fromClockwiseRotation(0)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(0, result.source.x);
assertEquals(0, result.source.y);
assertEquals(200, result.source.width);
assertEquals(50, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(100, result.target.width);
assertEquals(25, result.target.height);
assertEquals(100, result.canvas.width);
assertEquals(25, result.canvas.height);
}
/**
* Test case:
* - Source image: 50x200 90 deg clock-wise rotated image.
* - Target: max size is 100x100
*/
export function testRotatedImage() {
const source = new Image();
source.width = 50;
source.height = 200;
const options = {
maxWidth: 100,
maxHeight: 100,
orientation: ImageOrientation.fromClockwiseRotation(1)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(0, result.source.x);
assertEquals(0, result.source.y);
assertEquals(50, result.source.width);
assertEquals(200, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(25, result.target.width);
assertEquals(100, result.target.height);
assertEquals(100, result.canvas.width);
assertEquals(25, result.canvas.height);
}
/**
* Test case:
* - Source image: 800x100
* - Target: 50x50 cropped image.
*/
export function testCroppedImage() {
const source = new Image();
source.width = 800;
source.height = 100;
const options = {
width: 50,
height: 50,
crop: true,
orientation: ImageOrientation.fromClockwiseRotation(0)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(350, result.source.x);
assertEquals(0, result.source.y);
assertEquals(100, result.source.width);
assertEquals(100, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(50, result.target.width);
assertEquals(50, result.target.height);
assertEquals(50, result.canvas.width);
assertEquals(50, result.canvas.height);
}
/**
* Test case:
* - Source image: 200x25
* - Target: 50x50 cropped image.
*/
export function testCroppedImageWithResize() {
const source = new Image();
source.width = 200;
source.height = 25;
const options = {
width: 50,
height: 50,
crop: true,
orientation: ImageOrientation.fromClockwiseRotation(0)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(87, result.source.x);
assertEquals(0, result.source.y);
assertEquals(25, result.source.width);
assertEquals(25, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(50, result.target.width);
assertEquals(50, result.target.height);
assertEquals(50, result.canvas.width);
assertEquals(50, result.canvas.height);
}
/**
* Test case:
* - Source image: 20x10
* - Target: 50x50 cropped image.
*/
export function testCroppedTinyImage() {
const source = new Image();
source.width = 20;
source.height = 10;
const options = {
width: 50,
height: 50,
crop: true,
orientation: ImageOrientation.fromClockwiseRotation(0)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(5, result.source.x);
assertEquals(0, result.source.y);
assertEquals(10, result.source.width);
assertEquals(10, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(50, result.target.width);
assertEquals(50, result.target.height);
assertEquals(50, result.canvas.width);
assertEquals(50, result.canvas.height);
}
/**
* Test case:
* - Source image: 100x400 90 degree clock-wise rotated.
* - Target: 50x50 cropped image
*/
export function testCroppedRotatedImage() {
const source = new Image();
source.width = 100;
source.height = 400;
const options = {
width: 50,
height: 50,
crop: true,
orientation: ImageOrientation.fromClockwiseRotation(1)
};
const result = calculateCopyParametersFromOptions(source, options);
assertEquals(0, result.source.x);
assertEquals(150, result.source.y);
assertEquals(100, result.source.width);
assertEquals(100, result.source.height);
assertEquals(0, result.target.x);
assertEquals(0, result.target.y);
assertEquals(50, result.target.width);
assertEquals(50, result.target.height);
assertEquals(50, result.canvas.width);
assertEquals(50, result.canvas.height);
}