Itération sur les éléments d'un contrôle Arborescence (Tree) à l'aide de la méthode GetTestData

Cet exemple montre comment utiliser la méthode GetTestData de l'API Functional Tester pour accéder par programmation aux valeurs des branches d'un contrôle de type arborescence (Tree). L'application testée est l'exemple d'application Java fourni avec le produit, ClassicsCD (ClassicsJavaA) :

Imports Rational.Test.Ft
Imports Rational.Test.Ft.Object.Interfaces
Imports Rational.Test.Ft.Script
Imports Rational.Test.Ft.Value
Imports Rational.Test.Ft.Vp
 
Public Class GetTreeDataExample Inherits GetTreeDataExampleHelper
    ' Script Name   : GetTreeDataExample
    ' Generated     : Dec 14, 2005 6:24:48 AM
    ' Modified      : Dec 14, 2005 6:24:48 AM
    ' Description   : Functional Test Script
 
    ' since 2005/12/14
    ' author Administrator
 
    Public Function TestMain (ByVal args() As Object)
        ' Désactiver l'ouverture du visionneur de journal pour cet exemple
        SetOption(IOptionName.BRING_UP_LOGVIEWER, False)
 
        'Démarrer l'application Java ClassicsCD
        StartApp("ClassicsJavaA")
 
        ' Attendre que l'arborescence apparaisse
        Tree2Tree().WaitForExistence()
 
        ' Afficher les types de données pouvant être testés dans l'arborescence
        System.Console.WriteLine("Types de données disponibles dans l'arborescence : " + _
         Tree2Tree().GetTestDataTypes())
 
        ' Déclarer des variables pour l'arborescence
        Dim CdTree As ITestDataTree
        Dim CdTreeNodes As ITestDataTreeNodes
        Dim CdTreeNode As ITestDataTreeNode
 
        ' Variables pour le stockage des données de l'arborescence
        CdTree = Tree2Tree().GetTestData("tree")
        CdTreeNodes = CdTree.GetTreeNodes()
        CdTreeNode = CdTreeNodes.GetRootNodes()


        ' Afficher le nombre total de noeuds         System.Console.WriteLine("Nombre total de noeuds dans l'arborescence : " + _           CdTreeNodes.GetNodeCount())         System.Console.WriteLine("Nombre de noeuds racines : " + _           CdTreeNodes.GetRootNodeCount())          ' Itérer sur les branches de l'arborescence ; il s'agit d'une méthode récursive.
        Dim I As Integer     
        For I = 0 To CdTreeNode.Length - 1          ShowTree(CdTreeNode(I), 0)         Next I           ' Fermer l'application Java ClassicsCD         ClassicsJavaFrame(ANY,MAY_EXIT).Close()         End Function           Public Sub ShowTree(ByVal Node As ITestDataTreeNodeNode, ByVal _             Indent As Integer)             ' Méthode récursive pour afficher les noeuds de l'arborescence avec les             ' retraits (indentations) appropriés.           ' Déterminer le nombre de tabulations à utiliser pour indenter correctement l'arborescence         Dim TabCount As Integer         IIf (Indent < Tabs.Length(), TabCount = Indent, _           TabCount = Tabs.Length())           ' Afficher le nom du noeud et le nombre de ses enfants         System.Console.WriteLine(Tabs.Substring(0, TabCount) + _           Node.GetNode() + " (" + Node.GetChildCount() + " _             enfants)" )           ' Déterminer si le noeud a des enfants ; appeler récursivement cette même         ' méthode pour afficher les noeuds enfants.         Dim Children As ITestDataTreeNode[] = Node.GetChildren()         Dim ChildCount As Integer
        IIf (ChildCount <> 0, ChildCount = Children.Length, _          ChildCount = 0)     
        Dim I As Integer
        For I = 0 To ChildCount - 1           ShowTree(Children(I), Indent+1)         Next I     End Sub    ' Chaîne de tabulations utilisée pour indenter la vue de l'arborescence  Const Tabs As String = _     "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"  End Class

Sur le premier écran de l'application testée figure un composant Java Swing JTree qui, au premier niveau, répertorie cinq compositeurs classiques. Au niveau suivant de l'arborescence figure la liste des oeuvres sur CD du compositeur sélectionné (et qui peuvent être commandés par l'utilisateur). Le code de cet exemple de script lit les valeurs de toutes les branches de l'arbre et les affiche dans la console.

La première étape consiste à utiliser la méthode GetTestData pour extraire les données du contrôle. La syntaxe suivante est utilisée à cet effet :

     Dim CdTree As ITestDataTree
     CdTree = Tree2Tree().GetTestData("tree")

L'étape suivante consiste à créer un tableau (array) contenant tous les noeuds de l'arborescence. Elle est réalisée comme suit :

     Dim CdTreeNodes As ITestDataTreeNodes
     Dim CdTreeNode As ITestDataTreeNode()
 
     CdTreeNodes = CdTree.GetTreeNodes()
     CdTreeNode = CdTreeNodes.GetRootNodes()

Notez que ce processus comprend deux étapes. On utilise d'abord la méthode GetTreeNodes pour renvoyer un objet TreeNodes. On appelle ensuite la méthode GetRootNodes sur cet objet pour obtenir un tableau constitué des noeuds racines de l'arborescence.

Une fois les noeuds disponibles, on peut les parcourir un à un pour déterminer leur valeur et le nombre d'enfants directs qu'ils contiennent. On utilise pour cela la méthode récursive ShowTree. Une méthode récursive est une méthode qui s'appelle elle-même. Il s'agit d'un moyen efficace de parcourir une structure arborescente. Pour lire la valeur de chaque noeud, on a recours à la méthode GetNode. Pour obtenir le nombre d'enfants du noeud, on utilise la méthode GetChildCount. La syntaxe suivante est utilisée à cet effet :

     System.Console.WriteLine(Tabs.Substring(0, TabCount) + _
        Node.GetNode()+" (" + Node.GetChildCount() + " enfants)")

Notez que le codage additionnel fourni dans la méthode ShowTree personnalisée a pour but de mettre en forme la présentation de l'arborescence. On utilise à cet effet des tabulations pour refléter l'indentation (ou retrait) des éléments.

Conditions d'utilisation | Appréciations en retour
(C) Copyright IBM Corporation 2002, 2004. All Rights Reserved.