about summary refs log tree commit diff
diff options
context:
space:
mode:
authorpierzchalski <e.a.pierzchalski@gmail.com>2016-04-15 13:13:55 +1000
committerpierzchalski <e.a.pierzchalski@gmail.com>2016-04-15 13:13:55 +1000
commitd95ca2822cdc67ddec96d16533e23a10d6bfd136 (patch)
tree05012aec8cc1f37423ce57940b07bd8079a5aea3
parentd8d8669439bd9e636b9209733c24c32063cc611d (diff)
downloadrust-d95ca2822cdc67ddec96d16533e23a10d6bfd136.tar.gz
rust-d95ca2822cdc67ddec96d16533e23a10d6bfd136.zip
Add tests against weird provided/required method behaviour
In `test/rustdoc/manual_impl.rs` there are now three structs:

* S1 implements and documents required method `a_method`.
* S2 implements and documents `a_method` as well as provided
  method `b_method`.
* S3 implements `a_method` and `b_method`, but only documents
  `b_method`.

For a struct, we want the rendered trait impls to include documentation
if and only if it appears on the trait implementation itself
(since users can just go to the trait definition for anything not
covered in the impl docs). This means we expect:

* S1, S2, and S3 to all include top-level trait impl docs.
* S1, S2, and S3 to exclude all trait definition docs.
* S1 to show impl docs for `a_method`.
* S2 to show impl docs for `a_method` and `b_method`.
* S3 to show impl docs for `b_method`.

These tests cover those cases.
-rw-r--r--src/test/rustdoc/manual_impl.rs62
1 files changed, 55 insertions, 7 deletions
diff --git a/src/test/rustdoc/manual_impl.rs b/src/test/rustdoc/manual_impl.rs
index 540cf58d38e..6675a0fd43b 100644
--- a/src/test/rustdoc/manual_impl.rs
+++ b/src/test/rustdoc/manual_impl.rs
@@ -8,19 +8,67 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+/// Docs associated with the trait definition.
 pub trait T {
+    /// Docs associated with the trait a_method definition.
     fn a_method(&self) -> usize;
+
+    /// Docs associated with the trait b_method definition.
+    fn b_method(&self) -> usize {
+        self.a_method()
+    }
+}
+
+// @has manual_impl/struct.S1.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait a_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S1(usize);
+
+/// Docs associated with the S1 trait implementation.
+impl T for S1 {
+    /// Docs associated with the S1 trait a_method implementation.
+    fn a_method(&self) -> usize {
+        self.0
+    }
+}
+
+// @has manual_impl/struct.S2.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait a_method implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S2(usize);
+
+/// Docs associated with the S2 trait implementation.
+impl T for S2 {
+    /// Docs associated with the S2 trait a_method implementation.
+    fn a_method(&self) -> usize {
+        self.0
+    }
+
+    /// Docs associated with the S2 trait b_method implementation.
+    fn b_method(&self) -> usize {
+        5
+    }
 }
 
-// @has manual_impl/struct.S.html '//*[@class="trait"]' 'T'
-// @has - '//*[@class="docblock"]' 'Docs associated with the trait implementation.'
-// @has - '//*[@class="docblock"]' 'Docs associated with the trait method implementation.'
-pub struct S(usize);
+// @has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+pub struct S3(usize);
 
-/// Docs associated with the trait implementation.
-impl T for S {
-    /// Docs associated with the trait method implementation.
+/// Docs associated with the S3 trait implementation.
+impl T for S3 {
     fn a_method(&self) -> usize {
         self.0
     }
+
+    /// Docs associated with the S3 trait b_method implementation.
+    fn b_method(&self) -> usize {
+        5
+    }
 }