|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
3 | 3 | using System.IO; |
| 4 | +using System.Linq; |
4 | 5 |
|
5 | 6 | using Microsoft.Build.Utilities; |
6 | 7 |
|
|
9 | 10 |
|
10 | 11 | namespace Xamarin.iOS.Tasks |
11 | 12 | { |
12 | | - class CustomMTouchTask : MTouchTaskBase |
| 13 | + class CustomMTouchTask : MTouch |
13 | 14 | { |
14 | 15 | public CustomMTouchTask () |
15 | 16 | { |
@@ -298,6 +299,54 @@ public void ReferenceFrameworkFileResolution_WhenResolutionFails(string targetFr |
298 | 299 | } |
299 | 300 | } |
300 | 301 |
|
| 302 | + [Test] |
| 303 | + public void NativeReference_None () |
| 304 | + { |
| 305 | + // non-framework native references do not have to copy anything else (back to Windows) |
| 306 | + |
| 307 | + Task.NativeReferences = null; |
| 308 | + var items = Task.GetAdditionalItemsToBeCopied ().ToArray (); |
| 309 | + Assert.That (items.Count (), Is.EqualTo (0), "null"); |
| 310 | + |
| 311 | + Task.NativeReferences = new TaskItem [] { }; |
| 312 | + items = Task.GetAdditionalItemsToBeCopied ().ToArray (); |
| 313 | + Assert.That (items.Count (), Is.EqualTo (0), "none"); |
| 314 | + |
| 315 | + var temp = Cache.CreateTemporaryDirectory (); |
| 316 | + var native_lib = Path.Combine (temp, "libFoo"); |
| 317 | + File.WriteAllText (native_lib, "fake lib"); |
| 318 | + Task.NativeReferences = new [] { new TaskItem (native_lib) }; |
| 319 | + items = Task.GetAdditionalItemsToBeCopied ().ToArray (); |
| 320 | + Assert.That (items.Count (), Is.EqualTo (0), "non-framework path"); |
| 321 | + } |
| 322 | + |
| 323 | + [Test] |
| 324 | + public void NativeReference_Framework () |
| 325 | + { |
| 326 | + var temp = Cache.CreateTemporaryDirectory (); |
| 327 | + var fx = Path.Combine (temp, "project", "Universal.xcframework", "macos-arm64_x86_64", "Universal.framework"); |
| 328 | + Directory.CreateDirectory (fx); |
| 329 | + |
| 330 | + var native_lib = Path.Combine (fx, "Universal"); |
| 331 | + File.WriteAllText (native_lib, "fake lib"); |
| 332 | + |
| 333 | + // other files |
| 334 | + File.WriteAllText (Path.Combine (fx, "Info.plist"), "fake info.plist"); |
| 335 | + var headers = Path.Combine (fx, "Headers"); |
| 336 | + Directory.CreateDirectory (headers); |
| 337 | + File.WriteAllText (Path.Combine (headers, "Universal.h"), "fake headers"); |
| 338 | + var signature = Path.Combine (fx, "_CodeSignature"); |
| 339 | + Directory.CreateDirectory (signature); |
| 340 | + File.WriteAllText (Path.Combine (signature, "CodeResources"), "fake resources"); |
| 341 | + |
| 342 | + // a native reference to a framework needs to bring (all of) the framework files (back to Windows) |
| 343 | + |
| 344 | + Task.NativeReferences = new [] { new TaskItem (native_lib) }; |
| 345 | + var items = Task.GetAdditionalItemsToBeCopied ().ToArray (); |
| 346 | + // 3 additional files (as we do not duplicate the TaskItem for the native library itself) |
| 347 | + Assert.That (items.Count (), Is.EqualTo (3), "framework files"); |
| 348 | + } |
| 349 | + |
301 | 350 | class TempSdk : IDisposable |
302 | 351 | { |
303 | 352 | MonoTouchSdk sdk; |
|
0 commit comments