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