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/SwFilePathResolverBaseTest.cs
2022-10-15 19:16:08 +02:00

133 lines
4.3 KiB
C#

using Moq;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xarial.XCad.Documents.Exceptions;
using Xarial.XCad.SolidWorks.Exceptions;
using Xarial.XCad.SolidWorks.Services;
namespace SolidWorks.Tests
{
public class MockSwFilePathResolverBase : SwFilePathResolverBase
{
private readonly string[] m_searchFolders;
private readonly Predicate<string> m_RefExistsPred;
private readonly Func<string> m_MatchingLoadedDocPath;
public MockSwFilePathResolverBase(string[] searchFolders, Predicate<string> refExistsPred, Func<string> matchingLoadedDocPath)
{
m_searchFolders = searchFolders;
m_RefExistsPred = refExistsPred;
m_MatchingLoadedDocPath = matchingLoadedDocPath;
}
protected override string[] GetSearchFolders() => m_searchFolders;
protected override bool IsReferenceExists(string path) => m_RefExistsPred.Invoke(path);
protected override bool TryGetLoadedDocumentPath(string path, out string loadedPath)
{
loadedPath = m_MatchingLoadedDocPath.Invoke();
return !string.IsNullOrEmpty(loadedPath);
}
}
public class SwFilePathResolverBaseTest
{
[Test]
public void ResolvePath_AllRoutes()
{
var paths = new List<string>();
var res = new MockSwFilePathResolverBase(new string[]
{
@"D:\aa\bb\",
@"E:\cc\dd\"
}, p =>
{
paths.Add(p);
return false;
}, () => "");
var expPaths = new string[]
{
@"D:\aa\bb\p2.sldprt",
@"D:\aa\bb\xx\p2.sldprt",
@"D:\aa\bb\yy\xx\p2.sldprt",
@"D:\aa\bb\zz\yy\xx\p2.sldprt",
@"D:\aa\xx\p2.sldprt",
@"D:\aa\yy\xx\p2.sldprt",
@"D:\aa\zz\yy\xx\p2.sldprt",
@"D:\xx\p2.sldprt",
@"D:\yy\xx\p2.sldprt",
@"D:\zz\yy\xx\p2.sldprt",
@"E:\cc\dd\p2.sldprt",
@"E:\cc\dd\xx\p2.sldprt",
@"E:\cc\dd\yy\xx\p2.sldprt",
@"E:\cc\dd\zz\yy\xx\p2.sldprt",
@"E:\cc\xx\p2.sldprt",
@"E:\cc\yy\xx\p2.sldprt",
@"E:\cc\zz\yy\xx\p2.sldprt",
@"E:\xx\p2.sldprt",
@"E:\yy\xx\p2.sldprt",
@"E:\zz\yy\xx\p2.sldprt",
@"D:\ss\tt\p2.sldprt",
@"D:\ss\tt\xx\p2.sldprt",
@"D:\ss\tt\yy\xx\p2.sldprt",
@"D:\ss\tt\zz\yy\xx\p2.sldprt",
@"D:\ss\xx\p2.sldprt",
@"D:\ss\yy\xx\p2.sldprt",
@"D:\ss\zz\yy\xx\p2.sldprt",
@"D:\xx\p2.sldprt",
@"D:\yy\xx\p2.sldprt",
@"D:\zz\yy\xx\p2.sldprt",
@"C:\zz\yy\xx\p2.sldprt"
};
Assert.Throws<FilePathResolveFailedException>(() => res.ResolvePath(@"D:\ss\tt\a1.sldasm", @"C:\zz\yy\xx\p2.sldprt"));
CollectionAssert.AreEqual(expPaths, paths);
}
[Test]
public void ResolvePath_Test()
{
var res = new MockSwFilePathResolverBase(new string[]
{
@"D:\aa\bb\",
@"E:\cc\dd\"
}, p => p == @"E:\yy\xx\p2.sldprt", () => "");
var p1 = res.ResolvePath(@"D:\ss\tt\a1.sldasm", @"C:\zz\yy\xx\p2.sldprt");
Assert.AreEqual(@"E:\yy\xx\p2.sldprt", p1);
}
[Test]
public void ResolvePath_Active()
{
var res = new MockSwFilePathResolverBase(new string[]
{
@"D:\aa\bb\",
@"E:\cc\dd\"
}, p => false, () => "X:\\p2.sldprt");
var p1 = res.ResolvePath(@"D:\ss\tt\a1.sldasm", @"C:\zz\yy\xx\p2.sldprt");
Assert.AreEqual("X:\\p2.sldprt", p1);
}
[Test]
public void ResolvePath_Initial()
{
var res = new MockSwFilePathResolverBase(new string[0], p => p == @"C:\zz\yy\xx\p2.sldprt", () => "");
var p1 = res.ResolvePath(@"D:\ss\tt\a1.sldasm", @"C:\zz\yy\xx\p2.sldprt");
Assert.AreEqual(@"C:\zz\yy\xx\p2.sldprt", p1);
}
}
}