| '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(); |