1 // PERMUTE_ARGS: -unittest 2 // REQUIRED_ARGS: -D -w -o- -c -Dd${RESULTS_DIR}/compilable -o- 3 // POST_SCRIPT: compilable/extra-files/ddocAny-postscript.sh unittest 4 5 module ddocunittest; 6 7 /* Insert test-cases for documented unittests feature here. */ 8 9 /// foo function - 1 example 10 int foo(int a, int b) { return a + b; } 11 12 /// 13 unittest 14 { 15 assert(foo(1, 1) == 2); 16 } 17 18 /// bar function - 1 example 19 bool bar() { return true; } 20 21 /// 22 unittest 23 { 24 // documented 25 assert(bar()); 26 } 27 28 /// placeholder 29 unittest 30 { 31 } 32 33 /// doo function - no examples 34 void doo() { } 35 36 /// 37 private unittest 38 { 39 // undocumented 40 doo(); 41 } 42 43 unittest 44 { 45 // undocumented 46 doo(); 47 } 48 49 /** 50 add function - 3 examples 51 52 Examples: 53 54 ---- 55 assert(add(1, 1) == 2); 56 ---- 57 */ 58 int add(int a, int b) { return a + b; } 59 60 /// 61 unittest 62 { 63 // documented 64 assert(add(3, 3) == 6); 65 assert(add(4, 4) == 8); 66 } 67 68 unittest 69 { 70 // undocumented 71 assert(add(2, 2) + add(2, 2) == 8); 72 } 73 74 /// 75 unittest 76 { 77 // documented 78 assert(add(5, 5) == 10); 79 assert(add(6, 6) == 12); 80 } 81 82 /// class Foo 83 immutable pure nothrow class Foo 84 { 85 int x; 86 87 /// 88 unittest 89 { 90 // another foo example 91 Foo foo = new Foo; 92 } 93 } 94 95 /// 96 unittest 97 { 98 Foo foo = new Foo; 99 } 100 101 pure 102 { 103 const 104 { 105 immutable 106 { 107 /// some class - 1 example 108 class SomeClass {} 109 } 110 } 111 } 112 113 /// 114 unittest 115 { 116 SomeClass sc = new SomeClass; 117 } 118 119 /// Outer - 1 example 120 class Outer 121 { 122 /// Inner 123 static class Inner 124 { 125 } 126 127 /// 128 unittest 129 { 130 Inner inner = new Inner; 131 } 132 } 133 134 /// 135 unittest 136 { 137 Outer outer = new Outer; 138 } 139 140 /** foobar - no examples */ 141 void foobar() 142 { 143 } 144 145 unittest 146 { 147 foobar(); 148 } 149 150 /** 151 func - 4 examples 152 Examples: 153 --- 154 foo(1); 155 --- 156 157 Examples: 158 --- 159 foo(2); 160 --- 161 */ 162 void foo(int x) { } 163 164 /// 165 unittest 166 { 167 foo(2); 168 } 169 170 /// 171 unittest 172 { 173 foo(4); 174 } 175 176 // ------------------------------------ 177 // insert import declaration between documented function and unittests 178 179 /// 180 void fooImport() {} 181 import core.stdc.stdio; 182 /// test 183 unittest { fooImport(); } 184 185 /// 186 void fooStaticImport() {} 187 static import core.stdc.stdlib; 188 /// test 189 unittest { fooStaticImport(); } 190 191 /// 192 void fooPublicImport() {} 193 public import core.stdc..string; 194 /// test 195 unittest { fooPublicImport(); } 196 197 /// 198 void fooSelectiveImport() {} 199 import core.stdc.ctype : isalpha; 200 /// test 201 unittest { fooSelectiveImport(); } 202 203 /// 204 void fooRenamedImport() {} 205 import io = core.stdc.stdio; 206 /// test 207 unittest { fooRenamedImport(); } 208 209 // ------------------------------------ 210 // documented unittest after conditional declarations 211 212 static if (true) 213 void fooConditionalDecl1a() {} /** */ 214 unittest { int x1a; } /// 215 216 static if (true) 217 { void fooConditionalDecl1b() {} /** */ } 218 unittest { int x1b; } /// 219 220 static if (false) 221 void fooConditionalDecl2a() {} /** */ 222 unittest { int x2a; } /// 223 224 static if (false) 225 { void fooConditionalDecl2b() {} /** */ } 226 unittest { int x2b; } /// 227 228 static if (true) 229 { void fooConditionalDecl3a() {} /** */ } 230 else 231 { void barConditionalDecl3a() {} /** */ } 232 unittest { int x3a; } /// 233 234 static if (true) 235 { void fooConditionalDecl3b() {} /** */ } 236 else 237 { void barConditionalDecl3b() {} /** */ } 238 unittest { int x3b; } /// 239 240 static if (false) 241 void fooConditionalDecl4a() {} /** */ 242 else 243 void barConditionalDecl4a() {} /** */ 244 unittest { int x4a; } /// 245 246 static if (false) 247 { void fooConditionalDecl4b() {} /** */ } 248 else 249 { void barConditionalDecl4b() {} /** */ } 250 unittest { int x4b; } /// 251 252 static if (true) 253 {} 254 else 255 void barConditionalDecl5a() {} /** */ 256 unittest { int x5a; } /// 257 258 static if (true) 259 {} 260 else 261 { void barConditionalDecl5b() {} /** */ } 262 unittest { int x5b; } /// 263 264 static if (false) 265 {} 266 else 267 void barConditionalDecl6a() {} /** */ 268 /// 269 unittest { int x6a; } 270 271 static if (false) 272 {} 273 else 274 { void barConditionalDecl6b() {} /** */ } 275 /// 276 unittest { int x6b; } 277 278 // ------------------------------------ 279 // 9474 280 281 /// 282 void foo9474() { } 283 284 version(none) 285 unittest { } 286 287 /// Example 288 unittest { foo9474(); } 289 290 /// doc 291 void bar9474() { } 292 293 version(none) 294 unittest { } 295 296 /// Example 297 unittest { bar9474(); } 298 299 /// 300 struct S9474 301 { 302 } 303 /// 304 unittest { S9474 s; } 305 306 /// 307 auto autovar9474 = 1; 308 /// 309 unittest { int v = autovar9474; } 310 311 /// 312 auto autofun9474() { return 1; } 313 /// 314 unittest { int n = autofun9474(); } 315 316 /// 317 template Template9474() 318 { 319 /// Shouldn't link following unittest to here 320 void foo() {} 321 } 322 /// 323 unittest { alias Template9474!() T; } 324 325 // ------------------------------------ 326 // 9713 327 328 /// 329 void fooNoDescription() {} 330 /// 331 unittest { fooNoDescription(); } 332 /// 333 unittest { if (true) {fooNoDescription(); } /* comment */ } 334 335 // ------------------------------------ 336 337 /// test for bugzilla 9757 338 void foo9757() {} 339 /// ditto 340 void bar9757() {} 341 /// ditto 342 void baz9757() {} 343 /// 344 unittest { foo9757(); bar9757(); } 345 /// 346 unittest { bar9757(); foo9757(); } 347 348 /// with template functions 349 auto redBlackTree(E)(E[] elems...) 350 { 351 return 1; 352 } 353 /// ditto 354 auto redBlackTree(bool allowDuplicates, E)(E[] elems...) 355 { 356 return 2; 357 } 358 /// ditto 359 auto redBlackTree(alias less, E)(E[] elems...) 360 { 361 return 3; 362 } 363 /// 364 unittest 365 { 366 auto rbt1 = redBlackTree(0, 1, 5, 7); 367 auto rbt2 = redBlackTree!string("hello", "world"); 368 auto rbt3 = redBlackTree!true(0, 1, 5, 7, 5); 369 auto rbt4 = redBlackTree!"a > b"(0, 1, 5, 7); 370 } 371 372 // ------------------------------------ 373 // Issue 9758 374 375 /// test 376 void foo(){} 377 378 /// 379 unittest { } 380 381 // ------------------------------------ 382 // Issue 10519 383 384 /// 385 bool balancedParens10519(string, char, char) { return true; } 386 /// 387 unittest 388 { 389 auto s = "1 + (2 * (3 + 1 / 2)"; 390 assert(!balancedParens10519(s, '(', ')')); 391 } 392 393 // ------------------------------------ 394 // Issue 12097 395 396 /// declaration 397 struct S12097 398 { 399 /// method 400 void foo() {} 401 } 402 403 /// ditto 404 void f12097() {} 405 406 /// ddoc code 1 407 unittest 408 { 409 int a = 1; 410 } 411 412 /// ditto 413 struct T12097(T) {} 414 415 /// ddoc code 2 416 unittest 417 { 418 int[] arr; 419 } 420 421 // ------------------------------------ 422 // 14594 423 424 /******************* 425 * testA 426 */ 427 void fun14594a()() {} 428 /// 429 unittest { fun14594a(); } 430 431 /******************* 432 * testB 433 */ 434 void fun14594b()() {} 435 /// ditto 436 void fun14594b(T)(T) {} 437 /// 438 unittest { fun14594b(); fun14594b(1); } 439 440 /******************* 441 * testC 442 */ 443 void fun14594c()() {} 444 /// 445 unittest { fun14594c(); fun14594c(1); } 446 /// ditto 447 void fun14594c(T)(T) {} 448 449 /******************* 450 * testD 451 */ 452 void fun14594d()() {} 453 /// 454 unittest { fun14594d(); } 455 /// ditto 456 void fun14594d(T)(T) {} 457 /// 458 unittest { fun14594d(1); } 459 460 /******************* 461 * testE 462 */ 463 template fun14594e() 464 { 465 /// concatenated doc-comment fun14594e 466 void fun14594e() {} 467 /// ignored-unittest fun14594e 468 unittest { fun14594e(); } 469 } 470 /// doc-unittest fun14594e 471 unittest { fun14594e(); } 472 473 /******************* 474 * testF 475 */ 476 template fun14594f() 477 { 478 /// concatenated doc-comment fun14594f 479 void fun14594f() {} 480 /// ignored-unittest fun14594f 481 unittest { fun14594f(); } 482 } 483 /// ditto 484 template fun14594f(T) 485 { 486 /// ignored doc-comment fun14594f 487 void fun14594f(T) {} 488 /// ignored-unittest fun14594f 489 unittest { fun14594f(1); } 490 } 491 /// doc-unittest fun14594f 492 unittest { fun14594f(); } 493 494 // ------------------------------------ 495 496 void main() { }