• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14# ==============================================================================
15"""Tests for documentation control decorators."""
16
17from __future__ import absolute_import
18from __future__ import division
19from __future__ import print_function
20
21from tensorflow.python.platform import googletest
22from tensorflow.tools.docs import doc_controls
23
24
25class DocControlsTest(googletest.TestCase):
26
27  def test_do_not_generate_docs(self):
28
29    @doc_controls.do_not_generate_docs
30    def dummy_function():
31      pass
32
33    self.assertTrue(doc_controls.should_skip(dummy_function))
34
35  def test_do_not_doc_on_method(self):
36    """The simple decorator is not aware of inheritance."""
37
38    class Parent(object):
39
40      @doc_controls.do_not_generate_docs
41      def my_method(self):
42        pass
43
44    class Child(Parent):
45
46      def my_method(self):
47        pass
48
49    class GrandChild(Child):
50      pass
51
52    self.assertTrue(doc_controls.should_skip(Parent.my_method))
53    self.assertFalse(doc_controls.should_skip(Child.my_method))
54    self.assertFalse(doc_controls.should_skip(GrandChild.my_method))
55
56    self.assertTrue(doc_controls.should_skip_class_attr(Parent, 'my_method'))
57    self.assertFalse(doc_controls.should_skip_class_attr(Child, 'my_method'))
58    self.assertFalse(
59        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
60
61  def test_do_not_doc_inheritable(self):
62
63    class Parent(object):
64
65      @doc_controls.do_not_doc_inheritable
66      def my_method(self):
67        pass
68
69    class Child(Parent):
70
71      def my_method(self):
72        pass
73
74    class GrandChild(Child):
75      pass
76
77    self.assertTrue(doc_controls.should_skip(Parent.my_method))
78    self.assertFalse(doc_controls.should_skip(Child.my_method))
79    self.assertFalse(doc_controls.should_skip(GrandChild.my_method))
80
81    self.assertTrue(doc_controls.should_skip_class_attr(Parent, 'my_method'))
82    self.assertTrue(doc_controls.should_skip_class_attr(Child, 'my_method'))
83    self.assertTrue(
84        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
85
86  def test_do_not_doc_inheritable_property(self):
87
88    class Parent(object):
89
90      @property
91      @doc_controls.do_not_doc_inheritable
92      def my_method(self):
93        pass
94
95    class Child(Parent):
96
97      @property
98      def my_method(self):
99        pass
100
101    class GrandChild(Child):
102      pass
103
104    self.assertTrue(doc_controls.should_skip(Parent.my_method))
105    self.assertFalse(doc_controls.should_skip(Child.my_method))
106    self.assertFalse(doc_controls.should_skip(GrandChild.my_method))
107
108    self.assertTrue(doc_controls.should_skip_class_attr(Parent, 'my_method'))
109    self.assertTrue(doc_controls.should_skip_class_attr(Child, 'my_method'))
110    self.assertTrue(
111        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
112
113  def test_do_not_doc_inheritable_staticmethod(self):
114
115    class GrandParent(object):
116
117      def my_method(self):
118        pass
119
120    class Parent(GrandParent):
121
122      @staticmethod
123      @doc_controls.do_not_doc_inheritable
124      def my_method():
125        pass
126
127    class Child(Parent):
128
129      @staticmethod
130      def my_method():
131        pass
132
133    class GrandChild(Child):
134      pass
135
136    self.assertFalse(doc_controls.should_skip(GrandParent.my_method))
137    self.assertTrue(doc_controls.should_skip(Parent.my_method))
138    self.assertFalse(doc_controls.should_skip(Child.my_method))
139    self.assertFalse(doc_controls.should_skip(GrandChild.my_method))
140
141    self.assertFalse(
142        doc_controls.should_skip_class_attr(GrandParent, 'my_method'))
143    self.assertTrue(doc_controls.should_skip_class_attr(Parent, 'my_method'))
144    self.assertTrue(doc_controls.should_skip_class_attr(Child, 'my_method'))
145    self.assertTrue(
146        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
147
148  def test_for_subclass_implementers(self):
149
150    class GrandParent(object):
151
152      def my_method(self):
153        pass
154
155    class Parent(GrandParent):
156
157      @doc_controls.for_subclass_implementers
158      def my_method(self):
159        pass
160
161    class Child(Parent):
162      pass
163
164    class GrandChild(Child):
165
166      def my_method(self):
167        pass
168
169    class Grand2Child(Child):
170      pass
171
172    self.assertFalse(
173        doc_controls.should_skip_class_attr(GrandParent, 'my_method'))
174    self.assertFalse(doc_controls.should_skip_class_attr(Parent, 'my_method'))
175    self.assertTrue(doc_controls.should_skip_class_attr(Child, 'my_method'))
176    self.assertTrue(
177        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
178    self.assertTrue(
179        doc_controls.should_skip_class_attr(Grand2Child, 'my_method'))
180
181  def test_for_subclass_implementers_short_circuit(self):
182
183    class GrandParent(object):
184
185      @doc_controls.for_subclass_implementers
186      def my_method(self):
187        pass
188
189    class Parent(GrandParent):
190
191      def my_method(self):
192        pass
193
194    class Child(Parent):
195
196      @doc_controls.do_not_doc_inheritable
197      def my_method(self):
198        pass
199
200    class GrandChild(Child):
201
202      @doc_controls.for_subclass_implementers
203      def my_method(self):
204        pass
205
206    class Grand2Child(Child):
207      pass
208
209    self.assertFalse(
210        doc_controls.should_skip_class_attr(GrandParent, 'my_method'))
211    self.assertTrue(doc_controls.should_skip_class_attr(Parent, 'my_method'))
212    self.assertTrue(doc_controls.should_skip_class_attr(Child, 'my_method'))
213    self.assertFalse(
214        doc_controls.should_skip_class_attr(GrandChild, 'my_method'))
215    self.assertTrue(
216        doc_controls.should_skip_class_attr(Grand2Child, 'my_method'))
217
218
219if __name__ == '__main__':
220  googletest.main()
221