InvalidFilesTests.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Linq;
  5. using NUnit.Framework;
  6. namespace SharpGLTF.Validation
  7. {
  8. [Category("glTF-Validator Files")]
  9. public class InvalidFilesTests
  10. {
  11. [Test]
  12. public void CheckInvalidJsonFiles()
  13. {
  14. var files = TestFiles
  15. .GetKhronosValidationPaths()
  16. .Where(item => item.EndsWith(".gltf"))
  17. .Where(item => item.Contains("\\data\\json\\"));
  18. foreach (var f in files)
  19. {
  20. var json = System.IO.File.ReadAllText(f + ".report.json");
  21. var report = GltfValidator.ValidationReport.Parse(json);
  22. TestContext.Progress.WriteLine($"{f}...");
  23. TestContext.Write($"{f}...");
  24. var result = Schema2.ModelRoot.Validate(f);
  25. Assert.That(result.HasErrors, Is.EqualTo(report.Issues.NumErrors > 0));
  26. }
  27. }
  28. [Test]
  29. public void CheckInvalidBinaryFiles()
  30. {
  31. var files = TestFiles
  32. .GetKhronosValidationPaths()
  33. .Where(item => item.EndsWith(".glb"));
  34. foreach (var f in files)
  35. {
  36. var json = System.IO.File.ReadAllText(f + ".report.json");
  37. var report = GltfValidator.ValidationReport.Parse(json);
  38. if (report.Issues.Messages.Any(item => item.Code.Contains("GLB_CHUNK_TOO_BIG")) && report.Issues.NumErrors > 0)
  39. {
  40. // System.Diagnostics.Debugger.Break();
  41. }
  42. TestContext.Progress.WriteLine($"{f}...");
  43. TestContext.WriteLine($"{f}...");
  44. var result = Schema2.ModelRoot.Validate(f);
  45. Assert.That(result.HasErrors, Is.EqualTo(report.Issues.NumErrors > 0));
  46. }
  47. }
  48. [Test]
  49. public void CheckInvalidFiles()
  50. {
  51. var files = TestFiles
  52. .GetKhronosValidationPaths()
  53. .Where(item => item.EndsWith(".gltf"))
  54. .Where(item => !item.Contains("KHR_materials_variants"));
  55. foreach (var f in files)
  56. {
  57. if (f.EndsWith("invalid_image_data.gltf")) continue; // we're not checking images data (yet)
  58. if (f.EndsWith("png_eos.gltf")) continue; // we're not checking images data (yet)
  59. // https://github.com/KhronosGroup/glTF-Validator/issues/189
  60. if (f.EndsWith("node_weights_override.gltf")) continue;
  61. if (f.EndsWith("valid_with_tangent.gltf")) continue;
  62. // if (f.EndsWith("custom_property.gltf")) continue;
  63. if (!f.EndsWith("custom_property.gltf")) continue;
  64. var gltfJson = f.EndsWith(".gltf") ? System.IO.File.ReadAllText(f) : string.Empty;
  65. var json = System.IO.File.ReadAllText($"{f}.report.json");
  66. var report = GltfValidator.ValidationReport.Parse(json);
  67. var result = Schema2.ModelRoot.Validate(f);
  68. if (result.HasErrors != report.Issues.NumErrors > 0)
  69. {
  70. TestContext.WriteLine($"Failed: {f}");
  71. foreach (var e in report.Issues.Messages.Where(item => item.Severity == 0)) TestContext.WriteLine($" {e.Text}");
  72. }
  73. Assert.That(result.HasErrors, Is.EqualTo(report.Issues.NumErrors > 0), result.Errors.FirstOrDefault()?.Message);
  74. }
  75. }
  76. }
  77. }