parseAttributes function

when called with an empty string

should return an empty object
var returnVal = parseAttributes('');
assert.deepEqual(returnVal, {});

when called with a string containing a boolean attribute

should return an object containing the attribute key with value `true`
var returnVal = parseAttributes('foo');
assert.propertyVal(returnVal, 'foo', true);

when called with a string containing one attribute

without quotes

should return a corresponding object
var returnVal = parseAttributes('foo=bar');
assert.propertyVal(returnVal, 'foo', 'bar');

with single quotes

should return a corresponding object
var returnVal = parseAttributes('foo=\'bar\'');
assert.propertyVal(returnVal, 'foo', 'bar');

with double quotes

should return a corresponding object
var returnVal = parseAttributes('foo="bar"');
assert.propertyVal(returnVal, 'foo', 'bar');

with spaces between delimeters

should return a corresponding object
var returnVal = parseAttributes(' foo = "bar" ');
assert.propertyVal(returnVal, 'foo', 'bar');

with leading and trailing spaces

should return a corresponding object
var returnVal = parseAttributes(' foo="bar" ');
assert.propertyVal(returnVal, 'foo', 'bar');

with a spinal-case attribute

should return an object with corresponding camelCase key
var returnVal = parseAttributes('foo-bar="foobar"');
assert.propertyVal(returnVal, 'fooBar', 'foobar');

when called with a string containing multiple boolean attributes

should return an object with all boolean attributes set to `true`
var returnVal = parseAttributes('foo bar baz');
assert.deepEqual(Object.keys(returnVal), ['foo', 'bar', 'baz']);

when called with a string containing multiple attributes

should return a corresponding object
var returnVal = parseAttributes('foo="1" bar=2 baz="3"');
assert.deepEqual(returnVal, { foo: '1', bar: '2', baz: '3' });

invalid examples

JSON in attribute value

breaks and does not respect escaped quotes
var returnVal = parseAttributes('foo="{\"name\":\"bar\"}"');
assert.notDeepEqual(returnVal, { foo: '{"name":"bar"}' }, 'output is not as expected');
assert.equal(returnVal.foo, '{', 'foo contains only opening brace');