public async Task ConstruireSequenceEchec()
        {
            // Préparations
            IArbreConstruction arbre       = new ArbreConstruction();
            const string       chemin1     = "123456";
            const string       chemin2     = "abcdef";
            const string       cheminSuivi = "6";
            var elementRacine = new SequenceElementsConstructionDto(
                new[]
            {
                new ElementCheminConstructionDto(chemin1),
                new ElementCheminConstructionDto(chemin2)
            });
            IFabriqueArbre fabrique = new FabriqueArbre(
                arbre,
                elementRacine);

            // Action à vérifier
            await fabrique
            .ConstruireAsync();

            // Tests
            Assert
            .IsNotNull(
                (fabrique as FabriqueArbre).ElementsConstruction);

            // Sans cheminer => échec
            var navigateur = (arbre as ArbreConstruction)
                             .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);

            navigateur
            .TransitionsSansSymbole();
            Assert
            .IsFalse(
                navigateur.EtatsCourants.Contains(arbre.EtatSortie));

            // Autre chemin => pas de cible
            navigateur = (arbre as ArbreConstruction)
                         .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);
            navigateur
            .TransitionPar(
                cheminSuivi);
            Assert
            .AreEqual(
                0,
                navigateur.EtatsCourants.Count());
        }
        public async Task ConstruireSequenceReussite()
        {
            // Préparations
            IArbreConstruction arbre   = new ArbreConstruction();
            const string       chemin1 = "123456";
            const string       chemin2 = "abcdef";
            var elementRacine          = new SequenceElementsConstructionDto(
                new[]
            {
                new ElementCheminConstructionDto(chemin1),
                new ElementCheminConstructionDto(chemin2)
            });
            IFabriqueArbre fabrique = new FabriqueArbre(
                arbre,
                elementRacine);

            // Action à vérifier
            await fabrique
            .ConstruireAsync();

            // Tests
            Assert
            .IsNotNull(
                (fabrique as FabriqueArbre).ElementsConstruction);

            var navigateur = (arbre as ArbreConstruction)
                             .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);

            navigateur
            .TransitionPar(
                chemin1);
            navigateur
            .TransitionPar(
                chemin2);
            Assert
            .IsTrue(
                navigateur.EtatsCourants.Contains(arbre.EtatSortie));
        }
Exemplo n.º 3
0
        private async Task ConstruireSequenceAsync(
            IEnumerable <Etat> etatsDebut,
            IEnumerable <Etat> etatsFin,
            SequenceElementsConstructionDto donnees,
            Dictionary <string, IConstructionElementArbre> dicoReferences = null)
        {
            try
            {
                if ((donnees?.Elements?.Any()).GetValueOrDefault())
                {
                    var etatsDebutOuFin = etatsDebut;

                    for (int i = 0, nbre = donnees.Elements.Count(); i < nbre; i++)
                    {
                        var donneesElement = donnees.Elements[i];
                        var element        = await CreerElementAsync(
                            etatsDebutOuFin,
                            i + 1 == nbre?
                            etatsFin :
                            null);

                        etatsDebutOuFin = new Etat[] { element.EtatSortie };

                        await ConstruireAsync(
                            new Etat[] { element.EtatEntree },
                            etatsDebutOuFin,
                            donneesElement,
                            dicoReferences);
                    }
                }
            }
            catch (Exception ex)
            {
                throw EncapsulerEtGererException <ExceptionTechniqueArbreConstruction>(
                          ex);
            }
        }
        public async Task ConstruireReferenceDoubleNiveau()
        {
            // Préparations
            // Construction de 2 étiquette, l'une appelant l'autre
            IArbreConstruction arbre            = new ArbreConstruction();
            const string       chemin           = "123456";
            var          typeBlock              = EnumTypeBlock.Reference;
            const string idEtiquetteEnfant      = "EtiqEnfant";
            var          elementEtiquetteEnfant = new ElementEtiquetteConstructionDto(
                typeBlock,
                idEtiquetteEnfant,
                new ElementCheminConstructionDto(chemin));
            const string idEtiquetteParent      = "EtiqParent";
            var          elementEtiquetteParent = new ElementEtiquetteConstructionDto(
                typeBlock,
                idEtiquetteParent,
                new ElementReferenceConstructionDto(idEtiquetteEnfant));
            var elementReference = new ElementReferenceConstructionDto(
                idEtiquetteParent);
            var elementSequence = new SequenceElementsConstructionDto(
                new[]
            {
                elementReference,
                elementReference
            });
            var elementRacine = new ChoixElementsConstructionDto(
                new ElementConstructionDto[] {
                elementEtiquetteEnfant,
                elementEtiquetteParent,
                elementSequence     // = séquence contenant 2 références à l'étiquette de plus haut niveau
            });
            IFabriqueArbre fabrique = new FabriqueArbre(
                arbre,
                elementRacine);

            // Action à vérifier
            await fabrique
            .ConstruireAsync();

            // Tests
            Assert
            .IsNotNull(
                (fabrique as FabriqueArbre).ElementsConstruction);

            var navigateur = (arbre as ArbreConstruction)
                             .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);

            // 1 fois => pas suffisant
            navigateur
            .TransitionPar(
                chemin);
            Assert
            .IsFalse(
                navigateur.EtatsCourants.Contains(arbre.EtatSortie));

            // 2 fois => ok
            navigateur
            .TransitionPar(
                chemin);
            Assert
            .IsTrue(
                navigateur.EtatsCourants.Contains(arbre.EtatSortie));
        }