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