UNPKG

bruitt-classnames

Version:

A simple utility to manage CSS modules with SUIT CSS -like naming conventions on React

60 lines (47 loc) 2.26 kB
var assert = require('assert'); var sx = require('./'); describe('sx', function() { var classes = { 'Button': 'ns-Button-Button', 'span': 'ns-Button-span', '-flat': 'ns-Button--flat', '-size-xl': 'ns-Button--size-xl', '_size__m': 'ns-Button--size-m' }; it('should return empty string', function() { assert.equal(sx(), ''); assert.equal(sx.call(classes), ''); assert.equal(sx.call(classes, { flat: false }), ''); }); it('should return block name', function() { assert.equal(sx.call(classes, 'Button'), classes['Button']); }); it('should return modifiers', function() { assert.equal(sx.call(classes, { flat: true }), classes['-flat']); assert.equal(sx.call(classes, { flat: true, size: 'xl', unknown: 'is' }), classes['-flat'] + ' ' + classes['-size-xl']); assert.equal(sx.call(classes, { flat: true }, { size: 'xl' }, { unknown: 'is' }), classes['-flat'] + ' ' + classes['-size-xl']); }); it('supports a string of class names', function() { assert.equal(sx.call(classes, 'Button', 'span', 'unknwn'), classes['Button'] + ' ' + classes['span']); assert.equal(sx.call(classes, 'span'), classes['span']); assert.equal(sx.call(classes, 'Button', 'span unknw'), classes['Button'] + ' ' + classes['span']); }); it('supports an array of class names', function() { assert.equal(sx.call(classes, ['Button']), classes['Button']); assert.equal(sx.call(classes, ['Button'], ['span', 'unknwn']), classes['Button'] + ' ' + classes['span']); }); it('should ignore, except for valid objects', function() { assert.equal(sx.call(classes, null, undefined, 1, 0, true, false, '', { size: 'xl' }, 'a', ['span', 'c']), classes['-size-xl'] + ' ' + classes['span']); }); it('should be trimmed', function() { assert.equal(sx.call(classes, '', ' Button ', ' span', [' ']), classes['Button'] + ' ' + classes['span']); }); it('should dedupe', function() { assert.equal(sx.call(classes, 'Button', 'span', 'Button', 'span'), classes['Button'] + ' ' + classes['span']); }); it('should be custom prefixes', function() { sx.settings.prefix = '_'; sx.settings.separator = '__'; assert.equal(sx.call(classes, { size: 'm' }), classes['_size__m']); }); });