|
@@ -30,8 +30,7 @@ import spock.lang.*
|
|
class XsdDocumentedTests extends Specification {
|
|
class XsdDocumentedTests extends Specification {
|
|
|
|
|
|
def ignoredIds = ['nsa-any-user-service','nsa-any-user-service-parents','nsa-authentication','nsa-ldap','nsa-method-security','nsa-web']
|
|
def ignoredIds = ['nsa-any-user-service','nsa-any-user-service-parents','nsa-authentication','nsa-ldap','nsa-method-security','nsa-web']
|
|
- @Shared def appendix = new File('../docs/manual/src/docbook/appendix-namespace.xml')
|
|
|
|
- @Shared def appendixRoot = new XmlSlurper().parse(appendix)
|
|
|
|
|
|
+ @Shared def reference = new File('../docs/manual/src/asciidoctor/index.adoc')
|
|
|
|
|
|
@Shared File schema31xDocument = new File('src/main/resources/org/springframework/security/config/spring-security-3.1.xsd')
|
|
@Shared File schema31xDocument = new File('src/main/resources/org/springframework/security/config/spring-security-3.1.xsd')
|
|
@Shared File schemaDocument = new File('src/main/resources/org/springframework/security/config/spring-security-3.2.xsd')
|
|
@Shared File schemaDocument = new File('src/main/resources/org/springframework/security/config/spring-security-3.2.xsd')
|
|
@@ -41,29 +40,10 @@ class XsdDocumentedTests extends Specification {
|
|
def setupSpec() {
|
|
def setupSpec() {
|
|
schemaRootElement = new XmlSlurper().parse(schemaDocument)
|
|
schemaRootElement = new XmlSlurper().parse(schemaDocument)
|
|
elementNameToElement = new SpringSecurityXsdParser(rootElement: schemaRootElement).parse()
|
|
elementNameToElement = new SpringSecurityXsdParser(rootElement: schemaRootElement).parse()
|
|
- appendixRoot.getMetaClass().sections = {
|
|
|
|
- delegate.breadthFirst().inject([]) {result, c->
|
|
|
|
- if(c.name() == 'section' && c.@id) {
|
|
|
|
- result.add(c)
|
|
|
|
- }
|
|
|
|
- result
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- NodeChild.metaClass.hrefs = { result ->
|
|
|
|
- def id = delegate.@id.text().replace('-parents', '').replace('-children', '')
|
|
|
|
- result.put(id,[])
|
|
|
|
- delegate.children().breadthFirst().each { sectionChild ->
|
|
|
|
- def href = sectionChild.@linkend.text()
|
|
|
|
- if(href) {
|
|
|
|
- result.get(id).add(href)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
def cleanupSpec() {
|
|
def cleanupSpec() {
|
|
- appendix = null
|
|
|
|
- appendixRoot = null
|
|
|
|
|
|
+ reference = null
|
|
schema31xDocument = null
|
|
schema31xDocument = null
|
|
schemaDocument = null
|
|
schemaDocument = null
|
|
elementNameToElement = null
|
|
elementNameToElement = null
|
|
@@ -120,17 +100,22 @@ class XsdDocumentedTests extends Specification {
|
|
*/
|
|
*/
|
|
def 'the entire schema is included in the appendix documentation'() {
|
|
def 'the entire schema is included in the appendix documentation'() {
|
|
setup: 'get all the documented ids and the expected ids'
|
|
setup: 'get all the documented ids and the expected ids'
|
|
- def documentedIds = appendixRoot.sections().collect { it.@id.text() }
|
|
|
|
|
|
+ def documentedIds = []
|
|
|
|
+ reference.eachLine { line ->
|
|
|
|
+ if(line.matches("\\[\\[(nsa-.*)\\]\\]")) {
|
|
|
|
+ documentedIds.add(line.substring(2,line.length() - 2))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
when: 'the schema is compared to the appendix documentation'
|
|
when: 'the schema is compared to the appendix documentation'
|
|
- def expectedIds = [] as Set
|
|
|
|
- elementNameToElement*.value*.ids*.each { expectedIds.addAll it }
|
|
|
|
- documentedIds.removeAll ignoredIds
|
|
|
|
- expectedIds.removeAll ignoredIds
|
|
|
|
- def undocumentedIds = (expectedIds - documentedIds)
|
|
|
|
- def shouldNotBeDocumented = (documentedIds - expectedIds)
|
|
|
|
|
|
+ def expectedIds = [] as Set
|
|
|
|
+ elementNameToElement*.value*.ids*.each { expectedIds.addAll it }
|
|
|
|
+ documentedIds.removeAll ignoredIds
|
|
|
|
+ expectedIds.removeAll ignoredIds
|
|
|
|
+ def undocumentedIds = (expectedIds - documentedIds)
|
|
|
|
+ def shouldNotBeDocumented = (documentedIds - expectedIds)
|
|
then: 'all the elements and attributes are documented'
|
|
then: 'all the elements and attributes are documented'
|
|
- shouldNotBeDocumented.empty
|
|
|
|
- undocumentedIds.empty
|
|
|
|
|
|
+ shouldNotBeDocumented.empty
|
|
|
|
+ undocumentedIds.empty
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -140,36 +125,55 @@ class XsdDocumentedTests extends Specification {
|
|
*/
|
|
*/
|
|
def 'validate parents and children are linked in the appendix documentation'() {
|
|
def 'validate parents and children are linked in the appendix documentation'() {
|
|
when: "get all the links for each element's children and parents"
|
|
when: "get all the links for each element's children and parents"
|
|
- def docAttrNameToChildren = [:]
|
|
|
|
- def docAttrNameToParents = [:]
|
|
|
|
- appendixRoot.sections().each { c->
|
|
|
|
- def id = c.@id.text()
|
|
|
|
- if(id.endsWith('-parents')) {
|
|
|
|
- c.hrefs(docAttrNameToParents)
|
|
|
|
- }
|
|
|
|
- if(id.endsWith('-children')) {
|
|
|
|
- c.hrefs(docAttrNameToChildren)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- def schemaAttrNameToParents = [:]
|
|
|
|
- def schemaAttrNameToChildren = [:]
|
|
|
|
- elementNameToElement.each { entry ->
|
|
|
|
- def key = 'nsa-'+entry.key
|
|
|
|
- if(ignoredIds.contains(key)) {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- def parentIds = entry.value.allParentElmts.values()*.id.findAll { !ignoredIds.contains(it) }.sort()
|
|
|
|
- if(parentIds) {
|
|
|
|
- schemaAttrNameToParents.put(key,parentIds)
|
|
|
|
|
|
+ def docAttrNameToChildren = [:]
|
|
|
|
+ def docAttrNameToParents = [:]
|
|
|
|
+
|
|
|
|
+ def currentDocAttrNameToElmt
|
|
|
|
+ def docAttrName
|
|
|
|
+
|
|
|
|
+ reference.eachLine { line ->
|
|
|
|
+ if(line.matches('^\\[\\[.*\\]\\]$')) {
|
|
|
|
+ def id = line.substring(2,line.length() - 2)
|
|
|
|
+ if(id.endsWith("-children")) {
|
|
|
|
+ docAttrName = id.substring(0,id.length() - 9)
|
|
|
|
+ currentDocAttrNameToElmt = docAttrNameToChildren
|
|
|
|
+ } else if(id.endsWith("-parents")) {
|
|
|
|
+ docAttrName = id.substring(0,id.length() - 8)
|
|
|
|
+ currentDocAttrNameToElmt = docAttrNameToParents
|
|
|
|
+ } else if(docAttrName && !id.startsWith(docAttrName)) {
|
|
|
|
+ currentDocAttrNameToElmt = null
|
|
|
|
+ docAttrName = null
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(docAttrName) {
|
|
|
|
+ def expression = '^\\* <<(nsa-.*),.*>>$'
|
|
|
|
+ if(line.matches(expression)) {
|
|
|
|
+ String elmtId = line.replaceAll(expression, '$1')
|
|
|
|
+ currentDocAttrNameToElmt.get(docAttrName, []).add(elmtId)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- def childIds = entry.value.allChildElmts.values()*.id.findAll { !ignoredIds.contains(it) }.sort()
|
|
|
|
- if(childIds) {
|
|
|
|
- schemaAttrNameToChildren.put(key,childIds)
|
|
|
|
|
|
+
|
|
|
|
+ def schemaAttrNameToParents = [:]
|
|
|
|
+ def schemaAttrNameToChildren = [:]
|
|
|
|
+ elementNameToElement.each { entry ->
|
|
|
|
+ def key = 'nsa-'+entry.key
|
|
|
|
+ if(ignoredIds.contains(key)) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ def parentIds = entry.value.allParentElmts.values()*.id.findAll { !ignoredIds.contains(it) }.sort()
|
|
|
|
+ if(parentIds) {
|
|
|
|
+ schemaAttrNameToParents.put(key,parentIds)
|
|
|
|
+ }
|
|
|
|
+ def childIds = entry.value.allChildElmts.values()*.id.findAll { !ignoredIds.contains(it) }.sort()
|
|
|
|
+ if(childIds) {
|
|
|
|
+ schemaAttrNameToChildren.put(key,childIds)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
then: "the expected parents and children are all documented"
|
|
then: "the expected parents and children are all documented"
|
|
- schemaAttrNameToChildren.sort() == docAttrNameToChildren.sort()
|
|
|
|
- schemaAttrNameToParents.sort() == docAttrNameToParents.sort()
|
|
|
|
|
|
+ schemaAttrNameToChildren.sort() == docAttrNameToChildren.sort()
|
|
|
|
+ schemaAttrNameToParents.sort() == docAttrNameToParents.sort()
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|