This repository has been archived on 2023-01-27. You can view files and clone it, but cannot push or open issues or pull requests.
cad/ref/xcad/tests/SolidWorks.Tests/CommandManagerTest.cs
2022-10-15 19:16:08 +02:00

195 lines
8.1 KiB
C#

//*********************************************************************
//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<CommandGroup, List<object[]>> grps)
{
var type = "";
var addInExMock = new Mock<SwAddInEx>();
var createCommandGroupMockObjectFunc = new Func<CommandGroup>(() =>
{
var cmdGroupMock = new Mock<CommandGroup>().SetupAllProperties();
var cmds = new List<object[]>();
grps.Add(cmdGroupMock.Object, cmds);
cmdGroupMock.Setup(m => m.AddCommandItem2(
It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>()))
.Callback<string, int, string, string, int, string, string, int, int>(
(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<CommandManager>();
var cmdGrpRes = (int)swCreateCommandGroupErrors.swCreateCommandGroup_Success;
cmdMgrMock.Setup(m => m.CreateCommandGroup2(
It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<int>(), It.IsAny<bool>(), ref cmdGrpRes))
.Returns(() =>
{
type += "CmdGrp";
return createCommandGroupMockObjectFunc.Invoke();
});
cmdMgrMock.Setup(m => m.AddContextMenu(It.IsAny<int>(), It.IsAny<string>())).Returns(
() =>
{
type += "CtxMenu";
return createCommandGroupMockObjectFunc.Invoke();
});
var cmdMgr = cmdMgrMock.Object;
var swMock = new Mock<SldWorks>();
swMock.Setup(m => m.GetCommandManager(It.IsAny<int>()))
.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<CommandGroup, List<object[]>>();
//var addInMock1 = CreateMockCommandGroup("23.0.0", cmds1);
//var grp1 = addInMock1.CommandManager.AddCommandGroup<CommandsMock_1>();
//var cmds2 = new Dictionary<CommandGroup, List<object[]>>();
//var addInMock2 = CreateMockCommandGroup("24.0.0", cmds2);
//var grp2 = addInMock2.CommandManager.AddCommandGroup<CommandsMock_1>();
//var cmds3 = new Dictionary<CommandGroup, List<object[]>>();
//var addInMock3 = CreateMockCommandGroup("25.0.0", cmds3);
//var grp3 = addInMock3.CommandManager.AddCommandGroup<CommandsMock_2>();
//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<CommandGroup, List<object[]>>();
//var addInMock1 = CreateMockCommandGroup("23.0.0", cmds1);
//var grp1 = addInMock1.AddContextMenu<CommandsMock_1>(c => { });
//var cmds2 = new Dictionary<CommandGroup, List<object[]>>();
//var addInMock2 = CreateMockCommandGroup("24.0.0", cmds2);
//var grp2 = addInMock2.AddContextMenu<CommandsMock_1>(c => { });
//var cmds3 = new Dictionary<CommandGroup, List<object[]>>();
//var addInMock3 = CreateMockCommandGroup("25.0.0", cmds3);
//var grp3 = addInMock3.AddContextMenu<CommandsMock_2>(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]);
}
}
}