コード例 #1
0
ファイル: FabriqueArbre.cs プロジェクト: TheManu/ArbreLexical
        private async Task ConstruireChoixAsync(
            IEnumerable <Etat> etatsDebut,
            IEnumerable <Etat> etatsFin,
            ChoixElementsConstructionDto donnees,
            Dictionary <string, IConstructionElementArbre> dicoReferences = null)
        {
            try
            {
                if ((donnees?.Elements?.Any()).GetValueOrDefault())
                {
                    var tasks         = new List <Task>();
                    var elementParent = await CreerElementAsync(
                        etatsDebut,
                        etatsFin);

                    foreach (var donneesElement in donnees.Elements)
                    {
                        if (donneesElement.TypeElement != EnumTypeElement.Etiquette)
                        {
                            var element = await CreerElementAsync(
                                new Etat[] { elementParent.EtatEntree },
                                new Etat[] { elementParent.EtatSortie });

                            var task = ConstruireAsync(
                                new Etat[] { element.EtatEntree },
                                new Etat[] { element.EtatSortie },
                                donneesElement,
                                dicoReferences);
                            tasks
                            .Add(task);
                        }
                        else
                        {
                            await ConstruireEtiquetteAsync(
                                null,
                                null,
                                donneesElement as ElementEtiquetteConstructionDto);
                        }
                    }

                    Task
                    .WaitAll(
                        tasks.ToArray());
                }
            }
            catch (Exception ex)
            {
                throw EncapsulerEtGererException <ExceptionTechniqueArbreConstruction>(
                          ex);
            }
        }
コード例 #2
0
        public async Task ConstruireChoixEchec()
        {
            // Préparations
            IArbreConstruction arbre       = new ArbreConstruction();
            const string       chemin1     = "123456";
            const string       chemin2     = "abcdef";
            const string       cheminSuivi = "_";
            var elementRacine = new ChoixElementsConstructionDto(
                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 respecter un choix => échec
            var navigateur = (arbre as ArbreConstruction)
                             .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);

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

            // Choix 2
            navigateur = (arbre as ArbreConstruction)
                         .RecupererNavigateurMultiSymbolesSur(
                arbre.EtatEntree);
            navigateur
            .TransitionPar(
                cheminSuivi);
            Assert
            .AreEqual(
                0,
                navigateur.EtatsCourants.Count());
        }
コード例 #3
0
        public async Task ConstruireReferenceEchec()
        {
            // Préparations
            IArbreConstruction arbre       = new ArbreConstruction();
            const string       chemin      = "123456";
            const string       cheminSuivi = "ab";
            const string       idEtiquette = "Etiq";
            var typeBlock        = EnumTypeBlock.Reference;
            var elementEtiquette = new ElementEtiquetteConstructionDto(
                typeBlock,
                idEtiquette,
                new ElementCheminConstructionDto(chemin));
            var elementReference = new ElementReferenceConstructionDto(
                idEtiquette);
            var elementRacine = new ChoixElementsConstructionDto(
                new ElementConstructionDto[] {
                elementEtiquette,
                elementReference
            });
            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(
                cheminSuivi);
            Assert
            .IsFalse(
                navigateur.EtatsCourants.Contains(arbre.EtatSortie));
        }
コード例 #4
0
        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));
        }