private bool DoReferenceTypeTest()
{
// follow tree from each starting node.
bool success = true;
double increment = MaxProgress/AvailableNodes.Count;
double position = 0;
Log("Starting ReferenceType for {0} Nodes ({1}% Coverage)", AvailableNodes.Values.Count, Configuration.Coverage);
List<Node> nodes = new List<Node>();
BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection();
List<ReferenceDescriptionCollection> references = new List<ReferenceDescriptionCollection>();
int counter = 0;
foreach (Node node in AvailableNodes.Values)
{
if (!CheckCoverage(ref counter))
{
continue;
}
// inverse filter test.
AddReferenceTypeTest(node, ReferenceTypeIds.NonHierarchicalReferences, true, true, nodes, nodesToBrowse, references, true);
if (!Browse(nodes, nodesToBrowse, references))
{
success = false;
break;
}
// forward filter test.
AddReferenceTypeTest(node, ReferenceTypeIds.NonHierarchicalReferences, false, true, nodes, nodesToBrowse, references, true);
if (!Browse(nodes, nodesToBrowse, references))
{
success = false;
break;
}
// subtype test with concrete leaf reference.
AddReferenceTypeTest(node, ReferenceTypeIds.HasOrderedComponent, false, true, nodes, nodesToBrowse, references, true);
if (!Browse(nodes, nodesToBrowse, references))
{
success = false;
break;
}
// no-subtype test with abstract reference.
AddReferenceTypeTest(node, ReferenceTypeIds.HasChild, false, false, nodes, nodesToBrowse, references, true);
if (!Browse(nodes, nodesToBrowse, references))
{
success = false;
break;
}
// inverse hierarchial test.
AddReferenceTypeTest(node, ReferenceTypeIds.HierarchicalReferences, true, true, nodes, nodesToBrowse, references, true);
if (!Browse(nodes, nodesToBrowse, references))
{
success = false;
break;
}
position += increment;
ReportProgress(position);
}
return success;
}