SEC-2349: Fix documentation tests

This commit is contained in:
Rob Winch 2013-10-03 17:03:17 -05:00
parent 4b43cf3f50
commit dd1c2483b5
1 changed files with 62 additions and 58 deletions

View File

@ -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 reference = new File('../docs/manual/src/asciidoctor/index.adoc')
@Shared def appendixRoot = new XmlSlurper().parse(appendix)
@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 reference = null
appendixRoot = 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 def expectedIds = [] as Set
elementNameToElement*.value*.ids*.each { expectedIds.addAll it } elementNameToElement*.value*.ids*.each { expectedIds.addAll it }
documentedIds.removeAll ignoredIds documentedIds.removeAll ignoredIds
expectedIds.removeAll ignoredIds expectedIds.removeAll ignoredIds
def undocumentedIds = (expectedIds - documentedIds) def undocumentedIds = (expectedIds - documentedIds)
def shouldNotBeDocumented = (documentedIds - expectedIds) def shouldNotBeDocumented = (documentedIds - expectedIds)
then: 'all the elements and attributes are documented' then: 'all the elements and attributes are documented'
shouldNotBeDocumented.empty shouldNotBeDocumented.empty
undocumentedIds.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 docAttrNameToChildren = [:]
def docAttrNameToParents = [:] def docAttrNameToParents = [:]
appendixRoot.sections().each { c->
def id = c.@id.text() def currentDocAttrNameToElmt
if(id.endsWith('-parents')) { def docAttrName
c.hrefs(docAttrNameToParents)
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)
}
}
} }
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 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() schemaAttrNameToChildren.sort() == docAttrNameToChildren.sort()
schemaAttrNameToParents.sort() == docAttrNameToParents.sort() schemaAttrNameToParents.sort() == docAttrNameToParents.sort()
} }
/** /**