//********************************************************************* //xCAD //Copyright(C) 2020 Xarial Pty Limited //Product URL: https://www.xcad.net //License: https://xcad.xarial.com/license/ //********************************************************************* using Moq; using NUnit.Framework; using SolidWorks.Interop.sldworks; using SolidWorks.Interop.swconst; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xarial.XCad.Base.Attributes; using Xarial.XCad.SolidWorks; using Xarial.XCad.UI.Commands; using Xarial.XCad.UI.Commands.Attributes; namespace SolidWorks.Tests { public class CommandManagerTest { #region Mocks public enum CommandsMock_1 { Cmd1, Cmd2 } public enum CommandsMock_2 { [Title("Command1")] [System.ComponentModel.Description("Command1 Desc")] [CommandItemInfo(false, true, Xarial.XCad.UI.Commands.Enums.WorkspaceTypes_e.Assembly)] Cmd1, } #endregion private SwAddInEx CreateMockCommandGroup(string rev, Dictionary> grps) { var type = ""; var addInExMock = new Mock(); var createCommandGroupMockObjectFunc = new Func(() => { var cmdGroupMock = new Mock().SetupAllProperties(); var cmds = new List(); grps.Add(cmdGroupMock.Object, cmds); cmdGroupMock.Setup(m => m.AddCommandItem2( It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Callback( (name, pos, hint, tooltip, imgList, callback, enable, userId, menuTbOpts) => { cmds.Add(new object[] { name, pos, hint, tooltip, imgList, callback, enable, userId, menuTbOpts }); }).Returns(cmds.Count); cmdGroupMock.Setup(m => m.ToString()).Returns(type); return cmdGroupMock.Object; }); var cmdMgrMock = new Mock(); var cmdGrpRes = (int)swCreateCommandGroupErrors.swCreateCommandGroup_Success; cmdMgrMock.Setup(m => m.CreateCommandGroup2( It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), ref cmdGrpRes)) .Returns(() => { type += "CmdGrp"; return createCommandGroupMockObjectFunc.Invoke(); }); cmdMgrMock.Setup(m => m.AddContextMenu(It.IsAny(), It.IsAny())).Returns( () => { type += "CtxMenu"; return createCommandGroupMockObjectFunc.Invoke(); }); var cmdMgr = cmdMgrMock.Object; var swMock = new Mock(); swMock.Setup(m => m.GetCommandManager(It.IsAny())) .Returns(cmdMgr); swMock.Setup(m => m.RevisionNumber()).Returns(rev); var addIn = addInExMock.Object; addIn.ConnectToSW(swMock.Object, 0); return addIn; } [Test] public void AddCommandGroupBaseTest() { //TODO: fix unit test //var cmds1 = new Dictionary>(); //var addInMock1 = CreateMockCommandGroup("23.0.0", cmds1); //var grp1 = addInMock1.CommandManager.AddCommandGroup(); //var cmds2 = new Dictionary>(); //var addInMock2 = CreateMockCommandGroup("24.0.0", cmds2); //var grp2 = addInMock2.CommandManager.AddCommandGroup(); //var cmds3 = new Dictionary>(); //var addInMock3 = CreateMockCommandGroup("25.0.0", cmds3); //var grp3 = addInMock3.CommandManager.AddCommandGroup(); //Assert.AreEqual("CmdGrp", grp1.ToString()); //Assert.IsFalse(string.IsNullOrEmpty(grp1.LargeMainIcon)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.SmallMainIcon)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.LargeIconList)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.SmallIconList)); //Assert.IsNull(grp1.MainIconList); //Assert.IsNull(grp1.IconList); //Assert.AreEqual("CmdGrp", grp2.ToString()); //Assert.IsTrue(string.IsNullOrEmpty(grp2.LargeMainIcon)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.SmallMainIcon)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.LargeIconList)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.SmallIconList)); //Assert.AreEqual(6, (grp2.MainIconList as string[]).Length); //Assert.AreEqual(6, (grp2.IconList as string[]).Length); //Assert.AreEqual(2, cmds2[grp2].Count); //Assert.AreEqual(2, cmds1[grp1].Count); //Assert.AreEqual("Cmd1", cmds1[grp1][0][0]); //Assert.AreEqual("Cmd1", cmds1[grp1][0][2]); //Assert.AreEqual("Cmd2", cmds1[grp1][1][0]); //Assert.AreEqual("Cmd2", cmds1[grp1][1][2]); //Assert.AreEqual("CmdGrp", grp3.ToString()); //Assert.AreEqual(1, cmds3[grp3].Count); //Assert.AreEqual("Command1", cmds3[grp3][0][0]); //Assert.AreEqual("Command1 Desc", cmds3[grp3][0][2]); //Assert.AreEqual(2, cmds3[grp3][0][8]); } [Test] public void AddContextMenuBaseTest() { //var cmds1 = new Dictionary>(); //var addInMock1 = CreateMockCommandGroup("23.0.0", cmds1); //var grp1 = addInMock1.AddContextMenu(c => { }); //var cmds2 = new Dictionary>(); //var addInMock2 = CreateMockCommandGroup("24.0.0", cmds2); //var grp2 = addInMock2.AddContextMenu(c => { }); //var cmds3 = new Dictionary>(); //var addInMock3 = CreateMockCommandGroup("25.0.0", cmds3); //var grp3 = addInMock3.AddContextMenu(c => { }); //Assert.AreEqual("CtxMenu", grp1.ToString()); //Assert.IsFalse(string.IsNullOrEmpty(grp1.LargeMainIcon)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.SmallMainIcon)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.LargeIconList)); //Assert.IsFalse(string.IsNullOrEmpty(grp1.SmallIconList)); //Assert.IsNull(grp1.MainIconList); //Assert.IsNull(grp1.IconList); //Assert.AreEqual("CtxMenu", grp2.ToString()); //Assert.IsTrue(string.IsNullOrEmpty(grp2.LargeMainIcon)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.SmallMainIcon)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.LargeIconList)); //Assert.IsTrue(string.IsNullOrEmpty(grp2.SmallIconList)); //Assert.AreEqual(6, (grp2.MainIconList as string[]).Length); //Assert.AreEqual(6, (grp2.IconList as string[]).Length); //Assert.AreEqual(2, cmds2[grp2].Count); //Assert.AreEqual(2, cmds1[grp1].Count); //Assert.AreEqual("Cmd1", cmds1[grp1][0][0]); //Assert.AreEqual("Cmd1", cmds1[grp1][0][2]); //Assert.AreEqual("Cmd2", cmds1[grp1][1][0]); //Assert.AreEqual("Cmd2", cmds1[grp1][1][2]); //Assert.AreEqual("CtxMenu", grp3.ToString()); //Assert.AreEqual(1, cmds3[grp3].Count); //Assert.AreEqual("Command1", cmds3[grp3][0][0]); //Assert.AreEqual("Command1 Desc", cmds3[grp3][0][2]); //Assert.AreEqual(2, cmds3[grp3][0][8]); } } }