Click here to Skip to main content
15,892,643 members
Articles / Web Development / HTML

Windows and Web Generic Components

Rate me:
Please Sign up or sign in to vote.
4.08/5 (7 votes)
23 Jul 2008CPOL4 min read 27.4K   742   15  
A method to create Windows and Web components with the same interface
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using NUnit.Framework;
using Framework.baInterfaces;
using App.WinForm.BaseFrm;

namespace Test
{
    #region GeoTest
    public class A_GeoTest
    {
        protected LookupForm gf;
        private int rootID = -1;
        private Random rnd = new Random(9999);

        #region RootID
        protected int RootID
        {
            get
            {
                if (rootID <= 0)
                {
                    gf.BindingManager.MoveFirst();
                    rootID = Convert.ToInt32(gf.BindingManager["ID"]);
                    return rootID;
                }
                else
                    return rootID;
            }
            set
            {
                rootID = value;
            }
        }
        #endregion

        #region LastNodeID
        protected int LastNodeID
        {
            get
            {
                gf.BindingManager.MoveLast();
                return Convert.ToInt32(gf.BindingManager["ID"]);
            }
        }
        #endregion

        #region PreviousNodeID
        protected int PreviousNodeID
        {
            get
            {
                gf.BindingManager.MovePrevious();
                return Convert.ToInt32(gf.BindingManager["ID"]);
            }
        }
        #endregion

        #region AddChildren(int ParentID, int HowMany)
        protected void AddChildren(int ParentID, int HowMany)
        {
            // Add 50 Items to the root
            for (int i = 1; i <= HowMany; i++)
            {
                gf.BindingManager.Find(ParentID);
                gf.BindingManager.TransactionState = TransactionStateKind.Add;
                gf.BindingManager["Name"] = i.ToString();
                object AddedID = gf.BindingManager["ID"];
                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                gf.Refresh();
                gf.BindingManager.Find(AddedID);
            }
        }
        #endregion

        #region EditChildren(int ParentID)
        protected void EditChildren(int ParentID)
        {
            DataTable tbl = (DataTable)gf.BindingManager.DataSource;
            DataRow[] rwArray = tbl.Select("ParentID=" + ParentID);
            foreach (DataRow rw in rwArray)
            {
                gf.BindingManager.Find(rw["ID"]);
                gf.BindingManager.TransactionState = TransactionStateKind.Edit;
                gf.BindingManager["Name"] = gf.BindingManager["Name"] + " :Edited";
                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                gf.Refresh();
            }
        }
        #endregion

        #region HasChildren(DataTable tbl)
        protected bool HasChildren(int ID, DataTable tbl)
        {
            DataRow[] hasChildren = tbl.Select("ParentID=" + ID);
            if (hasChildren.Length > 0)
                return true;
            else
                return false;
        }
        #endregion

        #region GetParent(int ID)
        protected object GetParent(int ID)
        {
            gf.BindingManager.Find(ID);
            return gf.BindingManager["ParentID"];
        }
        #endregion

        #region DeleteChildren(int ParentID)
        protected void DeleteChildren(int ParentID)
        {
            DataTable tbl = (DataTable)gf.BindingManager.DataSource;
            DataRow[] rwArray = tbl.Select("ParentID=" + ParentID);
            foreach (DataRow rw in rwArray)
            {
                if (!HasChildren(Convert.ToInt32(rw["ID"]), tbl))
                {
                    gf.BindingManager.Find(rw["ID"]);
                    gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                    gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                    gf.Refresh();
                }
            }
        }
        #endregion

        #region AddANode(int ParentID, string NodeText)
        protected int AddANode(int ParentID, string NodeText)
        {
            gf.BindingManager.TransactionState = TransactionStateKind.Add;
            gf.BindingManager["Name"] = NodeText;
            gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
            return int.Parse(gf.BindingManager["ID"].ToString());
        }
        #endregion

        #region DeleteANode(int NodeID)
        protected void DeleteANode(int NodeID)
        {
            DataTable tbl = (DataTable)gf.BindingManager.DataSource;
            if (!HasChildren(NodeID, tbl))
            {
                gf.BindingManager.Find(NodeID);
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                gf.Refresh();
            }
        }
        #endregion

        protected string RandomNo
        {
            get
            {
            return (rnd).Next().ToString();
            }
        }
    }
    #endregion

    #region Suit1_TestCRUMD : AGeoTest
    [TestFixture]
    public class Suit1_TestCRUMD_Master : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            gf = new LookupForm();
            gf.MdiParent = null;
            gf.Show(null);
        }
        #endregion

        #region void Dispose()
        [TestFixtureTearDown]
        public void Dispose()
        {
        }
        #endregion

        #region void A_Add_Root_Children()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A_Add_Root_Children()
        {
            if (RootID <= 0)
            {
                // Add Root
                AddANode(-1, "Root");
                gf.Refresh();

                // Add 15 Items to the root
                AddChildren(RootID, 5);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void B_Edit_Root_Children()
        [Test]
        public void B_Edit_Root_Children()
        {
            if (RootID > 0)
            {
                // Edit Items added in the root
                EditChildren(RootID);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void C_Add_Last_Node_Children()
        [Test]
        public void C_Add_Last_Node_Children()
        {
            if (LastNodeID> 0)
            {
                // Add 10 Items to the root
                AddChildren(LastNodeID, 10);
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void D_Add_Last_Node_Children()
        [Test]
        public void D_Add_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Add 5 Items to the root
                AddChildren(LastNodeID, 15);
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void E_Add_Last_Node_Children()
        [Test]
        public void E_Add_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Add 2 Items to the root
                AddChildren(LastNodeID, 20);
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void F_Add_Previous_Last_Node_Children()
        [Test]
        public void F_Add_Previous_Last_Node_Children()
        {
            int ln = LastNodeID; // Move to the last node
            int pn = PreviousNodeID; // Move to a Node before last
            if (ln>0 &&  pn> 0)
            {
                // Add 2 Items to the root
                AddChildren(pn, 6);

                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(pn));
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void G_Edit_Last_Node_Children()
        [Test]
        public void G_Edit_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Edit Items added in the root
                EditChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("Tree is empty");
        }
        #endregion

        #region void H_Delete_Last_Node_Children()
        [Test]
        public void H_Delete_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void I_Edit_Last_Node_Children()
        [Test]
        public void I_Edit_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Edit Items added in the root
                EditChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("Tree is empty");
        }
        #endregion

        #region void J_Delete_Last_Node_Children()
        [Test]
        public void J_Delete_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void K_Edit_Last_Node_Children()
        [Test]
        public void K_Edit_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Edit Items added in the root
                EditChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("Tree is empty");
        }
        #endregion

        #region void L_Delete_Last_Node_Children()
        [Test]
        public void L_Delete_Last_Node_Children()
        {
            if (LastNodeID > 0)
            {
                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));
            }
            else
                Assert.Ignore("There is no item in the tree");
        }
        #endregion

        #region void M_Delete_Root_Children()
        [Test]
        public void M_Delete_Root_Children()
        {
            if (RootID > 0)
            {
                // Delete Children in the root
                DeleteChildren(RootID);

                // Delete the root
                DeleteANode(RootID);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion
    }
    #endregion

    #region Suit2_TestMovement : AGeoTest
    [TestFixture]
    public class Suit2_TestMovement_Master : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            gf = new LookupForm();
            gf.MdiParent = null;
            gf.Show(null);
        }
        #endregion

        #region void A_Add_Root_Children()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A_Add_Root_Children()
        {
            if (RootID <= 0)
            {
                // Add Root
                AddANode(-1, "Root");
                gf.Refresh();

                // Add 15 Items to the root
                AddChildren(RootID, 25);

                // Add 10 Items to the LastNodeID
                AddChildren(LastNodeID, 10);

                // Add 10 Items to the LastNodeID
                AddChildren(LastNodeID, 11);
                
                // Add 10 Items to the LastNodeID
                AddChildren(LastNodeID, 4);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void B_Move_On_Children()
        [Test]
        public void B_Move_On_Children()
        {
            int ln = LastNodeID;
            if (ln > 0)
            {
                do
                {
                    gf.BindingManager.Find(ln);
                    gf.BindingManager.TransactionState = TransactionStateKind.Add;
                    gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                    gf.Refresh();
                    gf.BindingManager.TransactionState = TransactionStateKind.Edit;
                    gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                    gf.Refresh();
                    gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                    gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                    gf.Refresh();
                    ln = PreviousNodeID;
                } while (ln > RootID);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void M_Delete_Root_Children()
        [Test]
        public void M_Delete_Root_Children()
        {
            if (RootID > 0)
            {
                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));

                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));
                
                // Delete Children in the root
                DeleteChildren(Convert.ToInt32(GetParent(LastNodeID)));

                // Delete Children in the root
                DeleteChildren(RootID);

                // Delete the root
                DeleteANode(RootID);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion
    }
    #endregion

    #region Suit3_TestMasterRelation: A_GeoTest
    [TestFixture]
    public class Suit3_TestMasterRelation : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            try
            {
                gf = new LookupForm();
                gf.BindingRelation.Relation = RelationKind.MasterDetail;
                gf.BindingRelation.Bind();
                
                gf.MdiParent = null;
                gf.Show(null);
            }
            catch(Exception ex)
            {
                Console.Write(ex);
            }
        }
        #endregion

        #region void A1_Add_Root_Children()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A1_Add_Root_Children()
        {
            if (RootID <= 0)
            {
                Assert.AreEqual( gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.BindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();
                Assert.AreEqual( gf.DetailBindingManager.TransactionState, TransactionStateKind.Null );

                gf.BindingManager["Name"] = "Root";

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void A2_Edit_Root_Children()
        /// <summary>
        /// Edit a record to database using Windows Form
        /// </summary>
        [Test]
        public void A2_Edit_Root_Children()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Edit;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["Name"] = gf.BindingManager["Name"]+" Edit";

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A3_Delete_Root_Children()
        /// <summary>
        /// Delete a record to database using Windows Form
        /// </summary>
        [Test]
        public void A3_Delete_Root_Children()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.BindingManager.Count, 0);
                RootID = -1;

                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A4_Cancel_An_Add()
        /// <summary>
        /// Cancel an Add 
        /// </summary>
        [Test]
        public void A4_Cancel_An_Add()
        {
            if (RootID <= 0)
            {
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.BindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["Name"] = "Root";

                gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();

                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void A5_Repeat_A1()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A5_Repeat_A1()
        {
            A1_Add_Root_Children();
        }
        #endregion

        #region void A6_Cancel_An_Edit()
        /// <summary>
        /// Cancel an Edit 
        /// </summary>
        [Test]
        public void A6_Cancel_An_Edit()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Edit;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["Name"] = "Root";

                gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();

                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Initial);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A7_Cancel_A_Delete()
        /// <summary>
        /// Cancel a Delete
        /// </summary>
        [Test]
        public void A7_Cancel_A_Delete()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["Name"] = "Root";

                gf.BindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();

                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Initial);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A8_Repeat_A2()
        [Test]
        public void A8_Repeat_A2()
        {
            A2_Edit_Root_Children();
        }
        #endregion

        #region void A9_Repeat_A3()
        [Test]
        public void A9_Repeat_A3()
        {
            A3_Delete_Root_Children();
        }
        #endregion
    }
    #endregion

    #region Suit4_TestDetailRelation: A_GeoTest
    [TestFixture]
    public class Suit4_TestDetailRelation : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            try
            {
                gf = new LookupForm();
                gf.BindingRelation.Relation = RelationKind.MasterDetail;
                gf.BindingRelation.Bind();
                
                gf.MdiParent = null;
                gf.Show(null);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
        #endregion

        #region void A1_Add_Root()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A1_Add_Root()
        {
            if (RootID <= 0)
            {
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.BindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["ParentID"] = -1;
                gf.BindingManager["Name"] = "Root";

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void A2_Edit_Root()
        /// <summary>
        /// Edit a record to database using Windows Form
        /// </summary>
        [Test]
        public void A2_Edit_Root()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Edit;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager["Name"] = gf.BindingManager["Name"] + " Edit";

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A3_Add_Detail()
        [Test]
        public void A3_Add_Detail()
        {
            if (RootID > 0)
            {
                Assert.IsTrue(gf.BindingManager.TransactionState == TransactionStateKind.Confirm ||
                    gf.BindingManager.TransactionState == TransactionStateKind.Initial ||
                    gf.BindingManager.TransactionState == TransactionStateKind.AddEditOnly);
                //Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

                gf.DetailBindingManager["GeoTableFK"] = this.RootID;
                gf.DetailBindingManager["Name"] = "F"+RandomNo;

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.IsTrue(gf.GeoTblTreeView.Count == 1 || gf.GeoTblTreeView.Count==3);
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.AddEditOnly);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Confirm);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A4_Edit_Detail()
        [Test]
        public void A4_Edit_Detail()
        {
            if (RootID > 0)
            {
                gf.DetailBindingManager.TransactionState = TransactionStateKind.Edit;
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

                gf.DetailBindingManager["Name"] = gf.DetailBindingManager["Name"] + " E-" + this.RandomNo; 

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Confirm;
                gf.Refresh();
                Assert.IsTrue(gf.GeoTblTreeView.Count == 1 || gf.GeoTblTreeView.Count == 3);
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.AddEditOnly);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Confirm);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A5_Delete_Detail()
        [Test]
        public void A5_Delete_Detail()
        {
            if (RootID > 0)
            {
                gf.DetailBindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();
                int totalBeforeDelete = gf.DetailBindingManager.Count;

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.DetailBindingManager.Count, totalBeforeDelete-1);
                gf.Refresh();
                Assert.IsTrue(gf.GeoTblTreeView.Count == 1 || gf.GeoTblTreeView.Count == 3);

                Assert.IsTrue(gf.BindingManager.TransactionState == TransactionStateKind.AddEditOnly || gf.BindingManager.TransactionState==TransactionStateKind.Initial);
                if (gf.DetailBindingManager.Count>0)
                    Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Confirm);
                else
                    Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A6_Detail_Cancel_An_Add()
        /// <summary>
        /// Cancel an Add 
        /// </summary>
        [Test]
        public void A6_Detail_Cancel_An_Add()
        {
            if (RootID > 0)
            {
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

                gf.DetailBindingManager["Name"] = "Added to be canceled";

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();
                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Initial);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A7_Add_Detail_To_Root()
        [Test]
        public void A7_Add_Detail_To_Root()
        {
            for(byte i=0 ;i<=10;i++)
                A3_Add_Detail();
            Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
        }
        #endregion

        #region void A8_Detail_Cancel_An_Edit()
        [Test]
        public void A8_Detail_Cancel_An_Edit()
        {
            if (RootID > 0)
            {
                //A3_Add_Detail();


                gf.DetailBindingManager.TransactionState = TransactionStateKind.Edit;
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

                gf.DetailBindingManager["Name"] = gf.DetailBindingManager["Name"] + "Edited Cancled";

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();
                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.AddEditOnly);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Initial);

                //A5_Delete_Detail();
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void A9_Detail_Cancel_A_Delete()
        /// <summary>
        /// Cancel a Delete
        /// </summary>
        [Test]
        public void A9_Detail_Cancel_A_Delete()
        {
            if (RootID > 0)
            {
                gf.DetailBindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

                gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
                gf.Refresh();
                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.AddEditOnly);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Initial);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        /// <summary>
        /// Add more  Master elements
        /// </summary>
        #region void AB1_Add_Root_Children()
        [Test]
        public void AB1_Add_Root_Children()
        {
            if (RootID >0)
            {
                Assert.AreNotEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

                gf.BindingManager.TransactionState = TransactionStateKind.Add;
                gf.Refresh();

                gf.BindingManager["ParentID"] = -1;
                gf.BindingManager["Name"] = "Added = " + this.RandomNo;

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.Greater(gf.GeoTblTreeView.Count, 1);
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.AddEditOnly);
            }
            else
                Assert.Ignore("Root already have items");
        }
        #endregion

        #region void AB2_Add_Root_Children_Again()
        [Test]
        public void AB2_Add_Root_Children_Again()
        {
            AB1_Add_Root_Children();
            Assert.AreEqual(gf.GeoTblTreeView.Count, 3);
        }
        #endregion

        #region void AB3_Add_Detail_To_First_Child()
        [Test]
        public void AB3_Add_Detail_To_First_Child()
        {
            gf.BindingManager.MoveNext();
            for (byte i = 0; i <= 10; i++)
                A3_Add_Detail();
            Assert.AreEqual(gf.GeoTblTreeView.Count, 3);
        }
        #endregion

        #region void AB4_Delete_Detail_In_Root()
        [Test]
        public void AB4_Delete_Detail_In_Root()
        {
            gf.BindingManager.MoveFirst();
            for (byte i = 0; i <= 10; i++)
                A5_Delete_Detail();
            Assert.AreEqual(gf.GeoTblTreeView.Count, 3);
        }
        #endregion

        #region void AB5_Delete_Detail_In_First_Child()
        [Test]
        public void AB5_Delete_Detail_In_First_Child()
        {
            gf.BindingManager.MoveLast();
            gf.BindingManager.MovePrevious();
            for (byte i = 0; i <= 10; i++)
                A5_Delete_Detail();
            Assert.AreEqual(gf.GeoTblTreeView.Count, 3);
        }
        #endregion

        #region AB6_Delete_Root__First_Children()
        [Test]
        public void AB6_Delete_Root__First_Children()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.GeoTblTreeView.Count, 2);
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region AB7_Delete_Root__Last_Children()
        [Test]
        public void AB7_Delete_Root__Last_Children()
        {
            if (RootID > 0)
            {
                gf.BindingManager.MoveLast();
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.GeoTblTreeView.Count, 1);
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion

        #region void AB8_Delete_Root_Children()
        [Test]
        public void AB8_Delete_Root_Children()
        {
            if (RootID > 0)
            {
                gf.BindingManager.TransactionState = TransactionStateKind.Delete;
                gf.Refresh();
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);

                gf.BindingManager.TransactionState = TransactionStateKind.Confirm;
                Assert.AreEqual(gf.BindingManager.Count, 0);
                RootID = -1;
                Assert.AreEqual(gf.GeoTblTreeView.Count, 0);
                gf.Refresh();
                Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
                Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Null);
            }
            else
                Assert.Ignore("Root is empty");
        }
        #endregion
    }
    #endregion

    #region Suit5_TestLookupRelation_One_Side: A_GeoTest
    [TestFixture]
    public class Suit5_TestLookupRelation_One_Side : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            try
            {
                gf = new LookupForm();
                gf.BindingRelation.Relation = RelationKind.Lookup;
                gf.BindingRelation.Bind();
                
                gf.MdiParent = null;
                gf.Show(null);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
        #endregion

        #region void A1_Add_To_Many()
        /// <summary>
        /// Add a record to database using Windows Form
        /// </summary>
        [Test]
        public void A1_Add_To_Many()
        {
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager["Name"] = "1";

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Confirm;

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Confirm);
        }
        #endregion

        #region void A2_Edit_In_Many()
        /// <summary>
        /// Edit a record to database using Windows Form
        /// </summary>
        [Test]
        public void A2_Edit_In_Many()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Edit;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager["Name"] = gf.DetailBindingManager["Name"] + " Edited";

            gf.DetailBindingManager.TransactionState = 
                TransactionStateKind.Confirm;

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Confirm);
        }
        #endregion

        #region void A3_Delete_In_Many()
        /// <summary>
        /// Delete a record to database using Windows Form
        /// </summary>
        [Test]
        public void A3_Delete_In_Many()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Delete;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Confirm;
            Assert.AreEqual(gf.DetailBindingManager.Count, 0);

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
        }
        #endregion

        #region void A4_Cancel_An_Add_In_Many()
        /// <summary>
        /// Cancel an Add 
        /// </summary>
        [Test]
        public void A4_Cancel_An_Add_In_Many()
        {
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager.TransactionState 
                = TransactionStateKind.Add;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager["Name"] = "Add to be canceled";

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
            gf.Refresh();

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
        }
        #endregion

        #region void A5_Repeat_A1()
        [Test]
        public void A5_Repeat_A1()
        {
            A1_Add_To_Many();
        }
        #endregion

        #region void A6_Cancel_An_Edit_In_Many()
        /// <summary>
        /// Cancel an Edit 
        /// </summary>
        [Test]
        public void A6_Cancel_An_Edit_In_Many()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Edit;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager["Name"] = "Edit to be canceled";

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
            gf.Refresh();

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Initial);
        }
        #endregion

        #region void A7_Cancel_A_Delete_In_Many()
        /// <summary>
        /// Cancel a Delete
        /// </summary>
        [Test]
        public void A7_Cancel_A_Delete_In_Many()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Delete;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
            gf.Refresh();

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Initial);
        }
        #endregion

        #region void A8_Repeat_A2()
        [Test]
        public void A8_Repeat_A2()
        {
            A2_Edit_In_Many();
        }
        #endregion

        #region void A9_Repeat_A3()
        [Test]
        public void A9_Repeat_A3()
        {
            A3_Delete_In_Many();
        }
        #endregion
    }
    #endregion

    #region Suit6_TestLookupRelation_Many_Side: A_GeoTest
    [TestFixture]
    public class Suit6_TestLookupRelation_Many_Side : A_GeoTest
    {
        #region void Init()
        [TestFixtureSetUp]
        public void Init()
        {
            try
            {
                gf = new LookupForm();
                gf.BindingRelation.Relation = RelationKind.Lookup;
                gf.BindingRelation.Bind();
                
                gf.MdiParent = null;
                gf.Show(null);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
        #endregion

        #region void A1_Add_To_One()
        [Test]
        public void A1_Add_To_One()
        {
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);

            gf.BindingManager.TransactionState = TransactionStateKind.Add;
            gf.Refresh();
            Assert.IsFalse(gf.DetailBindingManager.Enabled);

            gf.BindingManager["Name"] = "Root";

            gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Add);
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EditOnly);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
        }
        #endregion

        #region void A2_Edit_In_One()
        [Test]
        public void A2_Edit_In_One()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Initial);

            gf.BindingManager.TransactionState = TransactionStateKind.Edit;
            gf.Refresh();
            Assert.IsFalse(gf.DetailBindingManager.Enabled);

            gf.BindingManager["Name"] = gf.BindingManager["Name"] + " Edited";

            gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Confirm);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Add);
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EditOnly);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
        }
        #endregion

        #region void A3_Delete_In_One()
        [Test]
        public void A3_Delete_In_One()
        {
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Add;
            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Initial);

            gf.BindingManager.TransactionState = TransactionStateKind.Delete;
            gf.Refresh();
            Assert.IsFalse(gf.DetailBindingManager.Enabled);

            gf.BindingManager.TransactionState = TransactionStateKind.Confirm;

            gf.Refresh();
            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.Add);
            gf.DetailBindingManager.TransactionState = TransactionStateKind.Initial;
            Assert.AreEqual(gf.BindingManager.Count, 0);

            Assert.AreEqual(gf.BindingManager.TransactionState, TransactionStateKind.Null);
            Assert.AreEqual(gf.DetailBindingManager.TransactionState, TransactionStateKind.EmptyDataSource);
        }
        #endregion
    }
    #endregion
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Canada Canada
Software development experience since 1993

Skills
- Programming Languages: C# .NET, Delphi, C++, Java and VB
- Development Methodologies (SDLC): RUP, Scrum and XP
- Database: SQL server, Oracle, Apollo database and MS Access.

Educations & Certificates
- Microsoft® Certified Professional (MCP)
- Sun® Certified Java2 Programmer
- B.S. in computer science

Comments and Discussions