Newer
Older
dub_jkp / source / dub / internal / configy / DubTest.d
  1. /*******************************************************************************
  2.  
  3. Contains tests for dub-specific extensions
  4.  
  5. Whenever integrating changes from upstream configy, most conflicts tend
  6. to be on `configy.Test`, and as the structure is very similar,
  7. the default diff algorithms are useless. Having a separate module simplify
  8. this greatly.
  9.  
  10. License:
  11. MIT License. See LICENSE for details.
  12.  
  13. *******************************************************************************/
  14.  
  15. module dub.internal.configy.DubTest;
  16.  
  17. import dub.internal.configy.Attributes;
  18. import dub.internal.configy.Read;
  19.  
  20. import dub.internal.dyaml.node;
  21.  
  22. /// Test name pattern matching
  23. unittest
  24. {
  25. static struct Config
  26. {
  27. @StartsWith("names")
  28. string[][string] names_;
  29. }
  30.  
  31. auto c = parseConfigString!Config("names-x86:\n - John\n - Luca\nnames:\n - Marie", "/dev/null");
  32. assert(c.names_[null] == [ "Marie" ]);
  33. assert(c.names_["x86"] == [ "John", "Luca" ]);
  34. }
  35.  
  36. /// Test our `fromYAML` extension
  37. unittest
  38. {
  39. static struct PackageDef
  40. {
  41. string name;
  42. @Optional string target;
  43. int build = 42;
  44. }
  45.  
  46. static struct Package
  47. {
  48. string path;
  49. PackageDef def;
  50.  
  51. public static Package fromYAML (scope ConfigParser!Package parser)
  52. {
  53. if (parser.node.nodeID == NodeID.mapping)
  54. return Package(null, parser.parseAs!PackageDef);
  55. else
  56. return Package(parser.parseAs!string);
  57. }
  58. }
  59.  
  60. static struct Config
  61. {
  62. string name;
  63. Package[] deps;
  64. }
  65.  
  66. auto c = parseConfigString!Config(
  67. `
  68. name: myPkg
  69. deps:
  70. - /foo/bar
  71. - name: foo
  72. target: bar
  73. build: 24
  74. - name: fur
  75. - /one/last/path
  76. `, "/dev/null");
  77. assert(c.name == "myPkg");
  78. assert(c.deps.length == 4);
  79. assert(c.deps[0] == Package("/foo/bar"));
  80. assert(c.deps[1] == Package(null, PackageDef("foo", "bar", 24)));
  81. assert(c.deps[2] == Package(null, PackageDef("fur", null, 42)));
  82. assert(c.deps[3] == Package("/one/last/path"));
  83. }