moddle-xml
Advanced tools
Comparing version 0.11.1 to 0.12.0
@@ -158,2 +158,4 @@ 'use strict'; | ||
var elementsById = this.elementsById; | ||
var descriptor = getModdleDescriptor(element); | ||
@@ -168,3 +170,8 @@ | ||
if (id) { | ||
this.elementsById[id] = element; | ||
if (elementsById[id]) { | ||
throw error('duplicate ID <' + id + '>'); | ||
} | ||
elementsById[id] = element; | ||
} | ||
@@ -171,0 +178,0 @@ } |
@@ -80,2 +80,7 @@ 'use strict'; | ||
// do not serialize null properties | ||
if (value === null) { | ||
return false; | ||
} | ||
return p.isMany ? value.length : true; | ||
@@ -82,0 +87,0 @@ }); |
{ | ||
"name": "moddle-xml", | ||
"version": "0.11.1", | ||
"version": "0.12.0", | ||
"description": "XML import/export for documents described with moddle", | ||
@@ -9,2 +9,4 @@ "directories": { | ||
"scripts": { | ||
"all": "grunt", | ||
"dev": "grunt auto-test", | ||
"test": "grunt test" | ||
@@ -11,0 +13,0 @@ }, |
@@ -929,2 +929,30 @@ 'use strict'; | ||
it('should handle duplicate id', function(done) { | ||
var xml = '<props:root xmlns:props="http://properties" id="root">' + | ||
'<props:baseWithId id="root" />' + | ||
'</props:root>'; | ||
var reader = new Reader(model); | ||
var rootHandler = reader.handler('props:Root'); | ||
var expectedError = | ||
'unparsable content <props:baseWithId> detected\n\t' + | ||
'line: 0\n\t' + | ||
'column: 84\n\t' + | ||
'nested error: duplicate ID <root>'; | ||
// when | ||
reader.fromXML(xml, rootHandler, function(err, result) { | ||
expect(err).to.exist; | ||
expect(err.message).to.eql(expectedError); | ||
expect(result).not.to.exist; | ||
done(); | ||
}); | ||
}); | ||
describe('references', function() { | ||
@@ -931,0 +959,0 @@ |
@@ -269,2 +269,40 @@ 'use strict'; | ||
it('ignore undefined attribute values', function() { | ||
// given | ||
var model = createModel([ 'properties' ]); | ||
var writer = createWriter(model); | ||
var root = model.create('props:Base', { | ||
id: undefined | ||
}); | ||
// when | ||
var xml = writer.toXML(root); | ||
// then | ||
expect(xml).to.eql('<props:base xmlns:props="http://properties" />'); | ||
}); | ||
it('ignore null attribute values', function() { | ||
// given | ||
var model = createModel([ 'properties' ]); | ||
var writer = createWriter(model); | ||
var root = model.create('props:Base', { | ||
id: null | ||
}); | ||
// when | ||
var xml = writer.toXML(root); | ||
// then | ||
expect(xml).to.eql('<props:base xmlns:props="http://properties" />'); | ||
}); | ||
}); | ||
@@ -830,2 +868,57 @@ | ||
}); | ||
it('redefined properties', function() { | ||
// given | ||
var model = createModel([ 'redefine' ]); | ||
var writer = createWriter(model); | ||
var element = model.create('r:Extension', { | ||
id: 1, | ||
name: 'FOO', | ||
value: 'BAR' | ||
}); | ||
var expectedXml = '<r:Extension xmlns:r="http://redefine">' + | ||
'<r:id>1</r:id>' + | ||
'<r:name>FOO</r:name>' + | ||
'<r:value>BAR</r:value>' + | ||
'</r:Extension>'; | ||
// when | ||
var xml = writer.toXML(element); | ||
// then | ||
expect(xml).to.eql(expectedXml); | ||
}); | ||
it('replaced properties', function() { | ||
// given | ||
var model = createModel([ 'replace' ]); | ||
var writer = createWriter(model); | ||
var element = model.create('r:Extension', { | ||
id: 1, | ||
name: 'FOO', | ||
value: 'BAR' | ||
}); | ||
var expectedXml = '<r:Extension xmlns:r="http://replace">' + | ||
'<r:name>FOO</r:name>' + | ||
'<r:value>BAR</r:value>' + | ||
'<r:id>1</r:id>' + | ||
'</r:Extension>'; | ||
// when | ||
var xml = writer.toXML(element); | ||
// then | ||
expect(xml).to.eql(expectedXml); | ||
}); | ||
}); | ||
@@ -832,0 +925,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
130696
32
3795