private static DigitalSignal Connect(DigitalSignalProvider provider, DigitalSignalConsumer consumer) { if (consumer.IsConnected && provider.IsConnected) { if (consumer.DigitalSignal != provider.DigitalSignal) { throw new InvalidOperationException("Both Consumer and Provider are already connected to different signals."); } return(consumer.DigitalSignal); } DigitalSignal signal = null; if (consumer.IsConnected) { signal = consumer.DigitalSignal; provider.ConnectTo(signal); } else if (provider.IsConnected) { signal = provider.DigitalSignal; consumer.ConnectTo(signal); } return(signal); }
public void Connected_Level_Floating() { var uut = new DigitalSignalConsumer(); uut.ConnectTo(new DigitalSignal()); uut.Level.Should().Be(DigitalLevel.Floating); }
public void Connected_WithName_BuildName() { var name = "Test"; var uut = new DigitalSignalConsumer(); uut.ConnectTo(new DigitalSignal(name)); uut.Name.Should().StartWith(name); }
public void Connect_WriteProvider_ConsumerSeesChanges() { var provider = new DigitalSignalProvider(); var consumer = new DigitalSignalConsumer(); var signal = new DigitalSignal(); provider.ConnectTo(signal); consumer.ConnectTo(signal); provider.Write(DigitalLevel.High); consumer.Level.Should().Be(DigitalLevel.High); }
public void Connect_WriteProvider_EventTriggered() { var provider = new DigitalSignalProvider(); var consumer = new DigitalSignalConsumer(); var signal = new DigitalSignal(); provider.ConnectTo(signal); consumer.ConnectTo(signal); consumer.MonitorEvents(); provider.Write(DigitalLevel.High); consumer.ShouldRaise("OnChanged"); }
public void Write_MultipleConsumers_AllSeeChangedLevel() { var provider = new DigitalSignalProvider(); var consumer1 = new DigitalSignalConsumer(); var consumer2 = new DigitalSignalConsumer(); var signal = new DigitalSignal(); provider.ConnectTo(signal); consumer1.ConnectTo(signal); consumer2.ConnectTo(signal); provider.Write(DigitalLevel.High); consumer1.Level.Should().Be(DigitalLevel.High); consumer2.Level.Should().Be(DigitalLevel.High); }
public static DigitalSignal GetOrAddSignal(this DigitalSignalConsumer consumer, string signalName = null) { DigitalSignal signal = null; if (!consumer.IsConnected) { signal = new DigitalSignal(signalName); consumer.ConnectTo(signal); } else { signal = consumer.DigitalSignal; } return(signal); }
public static DigitalSignal ConnectTo(this DigitalSignalProvider provider, DigitalSignalConsumer consumer, string signalName = null) { DigitalSignal signal = Connect(provider, consumer); if (signal == null) { if (signalName == null) { signalName = provider.Name; } signal = provider.GetOrAddSignal(signalName); consumer.ConnectTo(signal); } return(signal); }
public static DigitalSignalProvider CreateConnection(this DigitalSignalConsumer consumer, DigitalSignalProvider provider = null, string signalName = null) { if (signalName == null && consumer.Name != null) { signalName = consumer.Name; } var signal = new DigitalSignal(signalName); if (provider == null) { provider = new DigitalSignalProvider(); } consumer.ConnectTo(signal); provider.ConnectTo(signal); return(provider); }