chr
2026-04-08 53e656200368a983e563550e2cc1acbc6d86b729
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System.Xml.Serialization;
using NUnit.Framework;
using OpenTap.Engine.UnitTests;
using OpenTap.Plugins.BasicSteps;
 
namespace OpenTap.UnitTests
{
    [TestFixture]
    public class LazyResourceManagerTest
    {
        public class ExclusiveInstrument : Instrument
        {
            [ResourceOpen(ResourceOpenBehavior.Ignore)]
            [XmlIgnore]
            public ExclusiveInstrument OtherInstrument { get; set; }
 
            public override void Open()
            {
                Assert.IsTrue(OtherInstrument.IsConnected != true);
                base.Open();
                Assert.IsTrue(OtherInstrument.IsConnected != true);
            }
 
            public override void Close()
            {
                Assert.IsTrue(OtherInstrument.IsConnected != true);
                base.Close();
                Assert.IsTrue(OtherInstrument.IsConnected != true);
            }
        }
 
        public class CheckExclusiveInstrumentStep : TestStep
        {
            
            public ExclusiveInstrument Instrument { get; set; }
            public override void Run()
            {
                Assert.IsFalse(Instrument.OtherInstrument.IsConnected);
            }
        }
        
        // In this test one instrument is not permitted to be open while the other is.
        [Test]
        public void TestExclusiveInstruments()
        {
            using (Session.Create(SessionOptions.OverlayComponentSettings))
            {
                EngineSettings.Current.ResourceManagerType = new LazyResourceManager();
                var instr1 = new ExclusiveInstrument();
                var instr2 = new ExclusiveInstrument() { OtherInstrument = instr1 };
                instr1.OtherInstrument = instr2;
                var step1 = new CheckExclusiveInstrumentStep() { Instrument = instr1 };
                var step2 = new CheckExclusiveInstrumentStep() {Instrument = instr2};
                var step3 = new CheckExclusiveInstrumentStep() { Instrument = instr1 };
                var step4 = new CheckExclusiveInstrumentStep(){Instrument = instr2};
                var plan = new TestPlan();
                var repeat = new RepeatStep()
                {
                    Count = 5
                };
                plan.ChildTestSteps.Add(repeat);
                repeat.ChildTestSteps.Add(step1);
                repeat.ChildTestSteps.Add(step2);
                repeat.ChildTestSteps.Add(step3);
                repeat.ChildTestSteps.Add(step4);
                var collect = new PlanRunCollectorListener();
                var run = plan.Execute(new IResultListener[]{collect});
                Assert.IsTrue(run.Verdict != Verdict.Error);
                Assert.AreEqual(4 * repeat.Count + 1, collect.StepRuns.Count);
                
            }
        }
    }
}