I. Knoten
----------
----------

1. Hinzufuegen eines Knotens (addnode)
---------------------------------------
a) Hinzufuegen eines komplett neuen Knotens
. funktioniert
b) Hinzufuegen eines gleichnamigen Knotens mit anderem Typ
. funktioniert
c) Hinzufuegen eines bereits existierenden Knotens (Name und Typ gleich)
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
d) Hinzufgen eines Knotens mit unbekanntem Typ
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


2. Loeschen eines Knotens (delnode)
------------------------------------
a) Loeschen eines existenten "losen" Knotens
. funktioniert
b) Loeschen eines existenten Knotens mit mindestens einer Kante
. funktioniert
c) Loeschen eines nicht-existenten Knotens
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


3. Verstecken von Knoten (hidenodes)
-------------------------------------
a) Verstecken einer leeren Liste von Knoten
. funktioniert (Graph bleibt unveraendert)
b) Verstecken existenter Knoten ohne Kanten von/zu Knoten ausserhalb der Menge
. funktioniert
c) Verstecken existenter Knoten mit Kanten von/zu Knoten ausserhalb der Menge
. funktioniert
   - nur rein in die Menge
   .funktioniert
   - nur raus
   .funktioniert
   - rein und raus
   .funktioniert
   Dadurch entstehend:
   - Ringverweise
   .funktioniert
   - doppelte Pfade (nur einfach darstellen)
   .funktioniert
   - Pfade, die mit bereits existenten Kanten uebereinstimmen (nur einfach darstellen)
   .funktioniert
   - Pfade, die aus Kanten mit verschiedenen Typen entstehen
   .funktioniert
d) Verstecken von teilweise nicht-existenten Knoten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
e) Verstecken von teilweise bereits versteckten Knoten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


4. Verstecken von Knoten eines Types (hidenodetype)
-----------------------------------------------------
a) Verstecken eines existenten Knotentyps
. funktioniert
   - in einem Graphen ohne Knoten dieses Typs
   .Fehlermeldung wird geworfen, Graph bleibt unveraendert
   - in einem Graphen mit Knoten dieses Typs
   .funktioniert
b) Verstecken eines nicht-existenten Knotentyps
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


5. Abstrahieren von Knoten (abstractnodes)
-------------------------------------------
Anmerkung: es werden keine Ringverweise von einem abstrakten Knoten auf sich selbst erzeugt
a) Abstrahieren einer leeren Liste von Knoten
. funktioniert
b) Abstrahieren eines einzelnen Knotens
. funktioniert
c) Abstrahieren existenter Knoten ohne Kanten von/zu Knoten ausserhalb der Menge
. funktioniert
d) Abstrahieren existenter Knoten mit Kanten von/zu Knoten ausserhalb der Menge
. funktioniert
   Dadurch entstehend:
   - doppelte Pfade (nur einfach darstellen)
   .funktioniert
e) Abstrahieren von teilweise nicht-existenten Knoten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
f) Abstrahieren von teilweise bereits abstrahierten Knoten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert



II. Kanten
-----------
-----------

1. Hinzufuegen einer Kante (addlink)
-------------------------------------
a) Hinzufuegen einer neuen Kante zwischen zwei existenten Knoten
. funktioniert
b) Hinzufuegen einer Kante als Ringverweis auf einen existenten Knoten
.funktioniert
c) Hinzufuegen einer Kante zwischen zwei Knoten, von denen mindestens einer nicht existiert
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
d) Hinzufuegen einer Kante anderen Typs zwischen den selben beiden Knoten wie eine bereits existente Kante mit gleicher Richtung
. funktioniert
e) Hinzufuegen einer Kante gleichen Typs zwischen den selben beiden Knoten wie eine bereits existende Kante mit anderer Richtung
. funktioniert
f) Hinzufuegen einer bereits existenten Kante (gleicher Typ, zwischen den gleichen Knoten, gleiche Richtung)
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
g) Hinzufgen einer Kante mit unbekanntem Typ
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


2. Loeschen einer Kante (dellink)
----------------------------------
a) Loeschen einer existenten Kante
. funktioniert
b) Loeschen einer nicht-existenten Kante
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


3. Verstecken von Kanten (hideedges)
-------------------------------------
a) Verstecken einer leeren Liste von Kanten
. funktioniert (Graph bleibt unveraendert)
b) Verstecken von existenten Kanten
. funktioniert
c) Verstecken von teilweise nicht-existenten Kanten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert
d) Verstecken von teilweise bereits versteckten Kanten
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


4. Verstecken von Kanten eines Typs (hideedgetype)
----------------------------------------------------
a) Verstecken eines existenten Kantentyps
. funktioniert
   - in einem Graphen ohne Kanten dieses Typs
   . Fehlermeldung wird geworfen, Graph bleibt unveraendert
   - in einem Graphen mit Kanten dieses Typs
   . funktioniert
b) Verstecken eines nicht-existenten Kantentyps
. Fehlermeldung wird geworfen, Graph bleibt unveraendert



III. Rueckgaengigmachen eines Hideevents (showIt)
--------------------------------------------------
--------------------------------------------------

1. Rueckgaengigmachen eines bekannten Hideevents
-------------------------------------------------
a) Rueckgaengigmachen von Knotenverstecken (-> hidenodes)
. funktioniert
b) Rueckgaengigmachen von Knotentypenverstecken (-> hidenodetypes)
. funktioniert
c) Rueckgaengigmachen von Knotenabstrahieren (-> abstractnodes)
. funktioniert
d) Rueckgaengigmachen von Kantenverstecken (-> hideedges)
. funktioniert
e) Rueckgaengigmachen von Kantentypenverstecken (-> hideedgetypes)
. funktioniert


2. Rueckgaengigmachen eines bereits rueckgaengiggemachten Hideevents
---------------------------------------------------------------------
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


3. Rueckgaengigmachen eines unbekannten Hideevents
---------------------------------------------------
. Fehlermeldung wird geworfen, Graph bleibt unveraendert


4. Rueckgaengigmachen in anderer Reihenfolge als umgekehrt zum Verstecken
--------------------------------------------------------------------------
a) Rueckgaengigmachen von unabhaengigen Ereignissen
. funktioniert
b) Rueckgaengigmachen von Ereignissen, die sich ueberschneiden
. Fehlermeldung wird geworfen, Graph bleibt unveraendert