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); } }
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()); }
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)); }
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)); }