mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-06 16:09:13 +08:00
421 lines
7.1 KiB
Text
421 lines
7.1 KiB
Text
'use strict';
|
|
const { test } = require('uvu');
|
|
const assert = require('uvu/assert');
|
|
|
|
const convertUnit = require('../lib/convertUnit.js');
|
|
|
|
test('valid conversions', () => {
|
|
const conversions = [
|
|
// source value, source unit, expected value, target unit
|
|
[10, 'px', 10, 'px'],
|
|
[10, 'px', 0.26458, 'cm'],
|
|
[10, 'px', 2.64583, 'mm'],
|
|
[10, 'px', 10.58333, 'q'],
|
|
[10, 'px', 0.10417, 'in'],
|
|
[10, 'px', 7.5, 'pt'],
|
|
[10, 'px', 0.625, 'pc'],
|
|
[10, 'cm', 377.95276, 'px'],
|
|
[10, 'cm', 10, 'cm'],
|
|
[10, 'cm', 100, 'mm'],
|
|
[10, 'cm', 400, 'q'],
|
|
[10, 'cm', 3.93701, 'in'],
|
|
[10, 'cm', 283.46457, 'pt'],
|
|
[10, 'cm', 23.62205, 'pc'],
|
|
[10, 'mm', 37.79528, 'px'],
|
|
[10, 'mm', 1, 'cm'],
|
|
[10, 'mm', 10, 'mm'],
|
|
[10, 'mm', 40, 'q'],
|
|
[10, 'mm', 0.3937, 'in'],
|
|
[10, 'mm', 28.34646, 'pt'],
|
|
[10, 'mm', 2.3622, 'pc'],
|
|
[10, 'q', 9.44882, 'px'],
|
|
[10, 'q', 0.25, 'cm'],
|
|
[10, 'q', 2.5, 'mm'],
|
|
[10, 'q', 0.09843, 'in'],
|
|
[10, 'q', 7.08661, 'pt'],
|
|
[10, 'q', 0.59055, 'pc'],
|
|
[10, 'in', 960, 'px'],
|
|
[10, 'in', 25.4, 'cm'],
|
|
[10, 'in', 254, 'mm'],
|
|
[10, 'in', 1016, 'q'],
|
|
[10, 'in', 10, 'in'],
|
|
[10, 'in', 720, 'pt'],
|
|
[10, 'in', 60, 'pc'],
|
|
[10, 'pt', 13.33333, 'px'],
|
|
[10, 'pt', 0.35278, 'cm'],
|
|
[10, 'pt', 3.52778, 'mm'],
|
|
[10, 'pt', 14.11111, 'q'],
|
|
[10, 'pt', 0.13889, 'in'],
|
|
[10, 'pt', 10, 'pt'],
|
|
[10, 'pt', 0.83333, 'pc'],
|
|
[10, 'pc', 160, 'px'],
|
|
[10, 'pc', 4.23333, 'cm'],
|
|
[10, 'pc', 42.33333, 'mm'],
|
|
[10, 'pc', 169.33333, 'q'],
|
|
[10, 'pc', 1.66667, 'in'],
|
|
[10, 'pc', 120, 'pt'],
|
|
[10, 'pc', 10, 'pc'],
|
|
[10, 'deg', 10, 'deg'],
|
|
[10, 'deg', 11.11111, 'grad'],
|
|
[10, 'deg', 0.17453, 'rad'],
|
|
[10, 'deg', 0.02778, 'turn'],
|
|
[10, 'grad', 9, 'deg'],
|
|
[10, 'grad', 10, 'grad'],
|
|
[10, 'grad', 0.15708, 'rad'],
|
|
[10, 'grad', 0.025, 'turn'],
|
|
[10, 'rad', 572.9578, 'deg'],
|
|
[10, 'rad', 636.61977, 'grad'],
|
|
[10, 'rad', 10, 'rad'],
|
|
[10, 'rad', 1.59155, 'turn'],
|
|
[10, 'turn', 3600, 'deg'],
|
|
[10, 'turn', 4000, 'grad'],
|
|
[10, 'turn', 62.83185, 'rad'],
|
|
[10, 'turn', 10, 'turn'],
|
|
[10, 's', 10, 's'],
|
|
[10, 's', 10000, 'ms'],
|
|
[10, 'ms', 0.01, 's'],
|
|
[10, 'ms', 10, 'ms'],
|
|
[10, 'Hz', 10, 'Hz'],
|
|
[10, 'Hz', 0.01, 'kHz'],
|
|
[10, 'kHz', 10000, 'Hz'],
|
|
[10, 'kHz', 10, 'kHz'],
|
|
[10, 'dpi', 10, 'dpi'],
|
|
[10, 'dpi', 25.4, 'dpcm'],
|
|
[10, 'dpi', 960, 'dppx'],
|
|
[10, 'dpcm', 3.93701, 'dpi'],
|
|
[10, 'dpcm', 10, 'dpcm'],
|
|
[10, 'dpcm', 377.95276, 'dppx'],
|
|
[10, 'dppx', 0.10417, 'dpi'],
|
|
[10, 'dppx', 0.26458, 'dpcm'],
|
|
[10, 'dppx', 10, 'dppx'],
|
|
];
|
|
|
|
conversions.forEach(function (e) {
|
|
const value = e[0];
|
|
const unit = e[1];
|
|
const expected = e[2];
|
|
const targetUnit = e[3];
|
|
|
|
assert.is(
|
|
convertUnit(value, unit, targetUnit),
|
|
expected,
|
|
unit + ' -> ' + targetUnit
|
|
);
|
|
});
|
|
});
|
|
|
|
test('invalid conversions', () => {
|
|
const invalid_units = {
|
|
px: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
cm: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
mm: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
q: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
in: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
pt: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
pc: [
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
deg: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
grad: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
rad: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
turn: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
s: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
ms: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
'Hz',
|
|
'kHz',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
Hz: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
kHz: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'dpi',
|
|
'dpcm',
|
|
'dppx',
|
|
],
|
|
dpi: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
],
|
|
dpcm: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
],
|
|
dppx: [
|
|
'px',
|
|
'cm',
|
|
'mm',
|
|
'in',
|
|
'pt',
|
|
'pc',
|
|
'deg',
|
|
'grad',
|
|
'rad',
|
|
'turn',
|
|
's',
|
|
'ms',
|
|
'Hz',
|
|
'kHz',
|
|
],
|
|
};
|
|
|
|
for (const unit in invalid_units) {
|
|
invalid_units[unit].forEach((targetUnit) => {
|
|
let failed = false;
|
|
|
|
try {
|
|
convertUnit(10, unit, targetUnit);
|
|
} catch (e) {
|
|
failed = true;
|
|
}
|
|
|
|
assert.ok(failed, unit + ' -> ' + targetUnit);
|
|
});
|
|
}
|
|
});
|
|
|
|
test('precision', () => {
|
|
const precision = 10;
|
|
const conversions = [
|
|
// source value, source unit, expected value, target unit
|
|
[10, 'px', 0.2645833333, 'cm'],
|
|
[10, 'px', 2.6458333333, 'mm'],
|
|
[10, 'px', 0.1041666667, 'in'],
|
|
[10, 'cm', 377.9527559055, 'px'],
|
|
];
|
|
|
|
conversions.forEach((e) => {
|
|
const value = e[0];
|
|
const unit = e[1];
|
|
const expected = e[2];
|
|
const targetUnit = e[3];
|
|
|
|
assert.is(
|
|
convertUnit(value, unit, targetUnit, precision),
|
|
expected,
|
|
unit + ' -> ' + targetUnit
|
|
);
|
|
});
|
|
});
|
|
|
|
test('falsey precision', () => {
|
|
assert.is(convertUnit(10, 'px', 'cm', false), 0.26458333333333334);
|
|
});
|
|
|
|
test.run();
|