diff --git a/src/doc.c b/src/doc.c index 2301fcf7c756..7280b1c653ee 100644 --- a/src/doc.c +++ b/src/doc.c @@ -620,6 +620,9 @@ static size_t getCodeIndent(const char *src) void emitUnittestComment(OutBuffer *buf, Scope *sc, Dsymbol *s, size_t ofs) { + if (Dsymbol *td = getEponymousParent(s)) + s = td; + for (UnitTestDeclaration *utd = s->ddocUnittest; utd; utd = utd->ddocUnittest) { if (utd->protection.kind == PROTprivate || !utd->comment || !utd->fbody) @@ -680,11 +683,7 @@ void emitDitto(Dsymbol *s, OutBuffer *buf, Scope *sc) sc->lastoffset += b.offset; sc->lastoffset2 += b.offset; - Dsymbol *p = s; - if (!s->ddocUnittest && s->parent) - p = s->parent->isTemplateDeclaration(); - if (p) - emitUnittestComment(buf, sc, p, sc->lastoffset2); + emitUnittestComment(buf, sc, s, sc->lastoffset2); } /** Recursively expand template mixin member docs into the scope. */ @@ -1541,8 +1540,7 @@ void DocComment::writeSections(Scope *sc, Dsymbol *s, OutBuffer *buf) else sec->write(loc, this, sc, s, buf); } - if (s->ddocUnittest) - emitUnittestComment(buf, sc, s, buf->offset); + emitUnittestComment(buf, sc, s, buf->offset); if (buf->offset == offset2) { diff --git a/test/compilable/ddocunittest.d b/test/compilable/ddocunittest.d index 986187edaf57..940ef1caf346 100644 --- a/test/compilable/ddocunittest.d +++ b/test/compilable/ddocunittest.d @@ -418,6 +418,79 @@ unittest int[] arr; } +// ------------------------------------ +// 14594 + +/******************* + * testA + */ +void fun14594a()() {} +/// +unittest { fun14594a(); } + +/******************* + * testB + */ +void fun14594b()() {} +/// ditto +void fun14594b(T)(T) {} +/// +unittest { fun14594b(); fun14594b(1); } + +/******************* + * testC + */ +void fun14594c()() {} +/// +unittest { fun14594c(); fun14594c(1); } +/// ditto +void fun14594c(T)(T) {} + +/******************* + * testD + */ +void fun14594d()() {} +/// +unittest { fun14594d(); } +/// ditto +void fun14594d(T)(T) {} +/// +unittest { fun14594d(1); } + +/******************* + * testE + */ +template fun14594e() +{ + /// concatenated doc-comment fun14594e + void fun14594e() {} + /// ignored-unittest fun14594e + unittest { fun14594e(); } +} +/// doc-unittest fun14594e +unittest { fun14594e(); } + +/******************* + * testF + */ +template fun14594f() +{ + /// concatenated doc-comment fun14594f + void fun14594f() {} + /// ignored-unittest fun14594f + unittest { fun14594f(); } +} +/// ditto +template fun14594f(T) +{ + /// ignored doc-comment fun14594f + void fun14594f(T) {} + /// ignored-unittest fun14594f + unittest { fun14594f(1); } +} +/// doc-unittest fun14594f +unittest { fun14594f(); } + // ------------------------------------ void main() { } diff --git a/test/compilable/extra-files/ddocunittest.html b/test/compilable/extra-files/ddocunittest.html index 96da2ac4c7cc..efa190435223 100644 --- a/test/compilable/extra-files/ddocunittest.html +++ b/test/compilable/extra-files/ddocunittest.html @@ -332,6 +332,67 @@

ddocunittest

+
void fun14594a()(); +
+
testA

+Examples:
+
fun14594a();
+
+

+
+
void fun14594b()(); +
void fun14594b(T)(T); +
+
testB

+Examples:
+
fun14594b(); fun14594b(1);
+
+

+
+
void fun14594c()(); +
void fun14594c(T)(T); +
+
testC

+Examples:
+
fun14594c(); fun14594c(1);
+
+

+
+
void fun14594d()(); +
void fun14594d(T)(T); +
+
testD

+Examples:
+
fun14594d();
+
+

Examples:
+
fun14594d(1);
+
+

+
+
void fun14594e()(); +
+
testE +

+concatenated doc-comment fun14594e

+Examples:
+doc-unittest fun14594e +
fun14594e();
+
+

+
+
void fun14594f()(); +
void fun14594f(T)(T); +
+
testF +

+concatenated doc-comment fun14594f

+Examples:
+doc-unittest fun14594f +
fun14594f();
+
+

+

Page generated by Ddoc.