public void CircuitStateEndDefinitionTest()
        {
            ProjectTester.InitResources();
            CircuitProject project      = CircuitProject.Create(null);
            CircuitButton  button       = null;
            CircuitSymbol  buttonSymbol = null;
            Gate           led          = null;
            CircuitSymbol  ledSymbol    = null;

            project.InTransaction(() => {
                button       = project.CircuitButtonSet.Create("b", false, PinSide.Right);
                buttonSymbol = project.CircuitSymbolSet.Create(button, project.ProjectSet.Project.LogicalCircuit, 1, 1);
                led          = project.GateSet.Gate(GateType.Led, 1, false);
                ledSymbol    = project.CircuitSymbolSet.Create(led, project.ProjectSet.Project.LogicalCircuit, 5, 1);
            });

            CircuitState   target         = new CircuitState(3);
            int            buttonResult   = target.ReserveState();
            FunctionButton functionButton = new FunctionButton(target, new CircuitSymbol[] { buttonSymbol }, buttonResult);
            FunctionLed    functionLed    = new FunctionLed(target, new CircuitSymbol[] { ledSymbol }, buttonResult);

            target.EndDefinition();

            Assert.IsTrue(functionButton.Dependent != null && functionButton.Dependent.Length == 1 && functionButton.Dependent[0] == functionLed);
            Assert.IsTrue(functionLed.Dependent == null);
        }
        public void CircuitProjectSaveLoadTest()
        {
            string dir  = Path.Combine(this.TestContext.TestRunDirectory, this.TestContext.TestName + DateTime.UtcNow.Ticks, "Some Test Sub Directory");
            string file = Path.Combine(dir, "My Test File.CircuitProject");

            // save in inexistent folder
            CircuitProject project1 = CircuitProject.Create(null);

            project1.InTransaction(() => {
                LogicalCircuit main        = project1.ProjectSet.Project.LogicalCircuit;
                CircuitButton button       = project1.CircuitButtonSet.Create("b", false, PinSide.Right);
                CircuitSymbol buttonSymbol = project1.CircuitSymbolSet.Create(button, main, 1, 2);
                Gate led = project1.GateSet.Gate(GateType.Led, 1, false);
                project1.CircuitSymbolSet.Create(led, main, 6, 2);
                Wire wire = project1.WireSet.Create(main, new GridPoint(3, 3), new GridPoint(6, 3));
            });
            Assert.IsTrue(!Directory.Exists(dir));
            project1.Save(file);
            Assert.IsTrue(File.Exists(file));
            CircuitProject project2 = CircuitProject.Create(file);

            Assert.IsTrue(ProjectTester.Equal(project1, project2));

            // save in existing folder and existing file.
            CircuitProject project3 = ProjectTester.Load(this.TestContext, Properties.Resources.Digital_Clock, null);

            Assert.IsTrue(File.Exists(file));
            project3.Save(file);
            CircuitProject project4 = CircuitProject.Create(file);

            File.Delete(file);
            Assert.IsTrue(ProjectTester.Equal(project3, project4));
        }
        public void XmlLoadReadElementTextTest()
        {
            string      text = Properties.Resources.XmlLoadReadElementTextTest;
            XmlDocument xml  = new XmlDocument();

            xml.LoadXml(text);
            Assert.AreEqual(@"http://LogicCircuit.net/1.0.0.2/CircuitProject.xsd", xml.DocumentElement.NamespaceURI);

            CircuitProject circuitProject = ProjectTester.Load(this.TestContext, text, null);

            Assert.IsNotNull(circuitProject);

            Assert.AreEqual(1, circuitProject.CircuitButtonSet.Count());
            CircuitButton button = circuitProject.CircuitButtonSet.First();

            Assert.AreEqual(@"<a>", button.Notation);
            Assert.AreEqual(@"<a>b</a>", button.Note);
            Assert.AreEqual(1, circuitProject.CircuitSymbolSet.SelectByCircuit(button).Count());
            CircuitSymbol buttonSymbol = circuitProject.CircuitSymbolSet.SelectByCircuit(button).First();

            Assert.AreEqual(3, buttonSymbol.X);
            Assert.AreEqual(8, buttonSymbol.Y);

            Assert.AreEqual(2, circuitProject.CircuitSymbolSet.Count());
            CircuitSymbol ledSymbol = circuitProject.CircuitSymbolSet.First(s => s != buttonSymbol);

            Assert.IsNotNull(ledSymbol);
            Assert.AreEqual(9, ledSymbol.X);
            Assert.AreEqual(8, ledSymbol.Y);

            Assert.AreEqual(1, circuitProject.WireSet.Count());
            Wire wire = circuitProject.WireSet.First();

            Assert.IsNotNull(wire);
            Assert.AreEqual(5, wire.X1);
            Assert.AreEqual(9, wire.Y1);
            Assert.AreEqual(9, wire.X2);
            Assert.AreEqual(9, wire.Y1);
        }