namespace Ariadne.Vellum.UnitTests { /// /// Has a virtual passage that other arcs call. /// public partial class Door : Arc { public string Note = "closed"; public virtual void Swing(Gates gates) { int hinges = 2; swing: while (!gates.Open.Contains("swing")) { Yield(); } Note = "swung " + hinges; } protected override void Run(Gates gates) { first: Swing(gates); } } /// /// Overrides the passage with locals of its own. /// public partial class CreakyDoor : Door { public override void Swing(Gates gates) { string sound = "creak"; creak: while (!gates.Open.Contains("swing")) { Yield(); } Note = sound; } } /// /// Calls a virtual passage on a door, which is a door or a derived one. /// public partial class Visitor : Arc { public Door Entrance; public string Result = ""; protected override void Run(Gates gates) { enter: Entrance.Swing(gates); Result = Entrance.Note; } } }