1
1
import json
2
2
import os
3
3
import pytest
4
- from approvaltests .pytest .namer import Namer
4
+ import textwrap
5
+ from approvaltests .pytest .py_test_namer import PyTestNamer
5
6
from approvaltests .approvals import verify
6
7
7
8
@@ -12,18 +13,36 @@ def doc(request, doc_module):
12
13
13
14
doc_module .verify_function (request )
14
15
16
+ @pytest .fixture (scope = "class" )
17
+ def doc_class (request , doc_module ):
18
+
19
+ doc_module .verify_class (request )
20
+ doc_module .increment_leveloffset ()
21
+ yield doc_module
22
+ doc_module .decrement_leveloffset ()
23
+
24
+
15
25
@pytest .fixture (scope = "module" )
16
26
def doc_module (request ):
17
27
doc = DocAsTest ()
18
28
29
+ doc .increment_leveloffset ()
19
30
yield doc
20
31
21
32
doc .verify_module (request )
33
+ doc .decrement_leveloffset ()
22
34
23
35
class DocAsTest ():
24
36
def __init__ (self ):
25
37
self .content = ""
26
- self .tests = []
38
+ self .test_includes = []
39
+ self .leveloffset = 0
40
+
41
+ def increment_leveloffset (self ):
42
+ self .leveloffset += 1
43
+
44
+ def decrement_leveloffset (self ):
45
+ self .leveloffset -= 1
27
46
28
47
def format_to_title (self , name ):
29
48
title = name [len ("test_" ):]
@@ -35,24 +54,33 @@ def module_content(self, request, description):
35
54
file_base_name = os .path .splitext (os .path .basename (request .node .name ))[0 ]
36
55
title = self .format_to_title (file_base_name )
37
56
38
- includes = "\n " .join ("include::{}[leveloffset=+1]" . format ( test ) for test in self .tests )
57
+ includes = "\n " .join (test for test in self .test_includes )
39
58
40
59
description_to_add = description .strip () + "\n \n " if description is not None else ""
41
60
42
61
return "= " + title + "\n " + description_to_add + includes
43
62
63
+ def class_content (self , request , description ):
64
+ title = request .cls .__name__ [len ("Test" ):]
65
+ title = "= " + title + "\n \n "
66
+
67
+ description_to_add = textwrap .dedent (description ) + "\n \n " if description != None else ""
68
+
69
+ return title + description_to_add
70
+
44
71
def test_content (self , request , description ):
45
72
46
73
title = self .format_to_title (request .node .name )
47
74
title = "= " + title + "\n \n "
48
75
49
- description = description .strip () + "\n \n " if description != None else ""
76
+ description_to_add = description .strip () + "\n \n " if description != None else ""
50
77
51
- return title + description + self .content
78
+ return title + description_to_add + self .content
52
79
53
80
54
81
def register_test (self , namer ):
55
- self .tests .append (namer .get_approved_filename (namer .get_file_name ()))
82
+ test = namer .get_approved_filename (namer .get_file_name ())
83
+ self .test_includes .append ("include::{}[leveloffset=+{}]" .format (test , self .leveloffset ))
56
84
57
85
def write (self , text ):
58
86
self .content = self .content + text
@@ -61,12 +89,8 @@ def write(self, text):
61
89
def verify_function (self , request ):
62
90
63
91
namer = DocAsTestFunctionNamer (request )
64
-
65
- class_name = namer .get_class_name ()
66
- test_name = namer .get_method_name ()
67
92
68
- test_module = __import__ (class_name )
69
- description = getattr (test_module , test_name ).__doc__
93
+ description = request .function .__doc__
70
94
71
95
self .register_test (namer )
72
96
content_to_verify = self .test_content (request , description )
@@ -76,36 +100,43 @@ def verify_function(self, request):
76
100
namer = namer
77
101
)
78
102
103
+
104
+ def verify_class (self , request ):
105
+ namer = DocAsTestClassNamer (request )
106
+
107
+ description = textwrap .dedent (request .cls .__doc__ )
108
+
109
+ self .register_test (namer )
110
+
111
+ content_to_verify = self .class_content (request , description )
112
+
113
+ self .content = ""
114
+ verify (
115
+ content_to_verify ,
116
+ namer = namer
117
+ )
118
+
119
+
79
120
def verify_module (self , request ):
80
121
namer = DocAsTestModuleNamer (request )
81
122
82
- class_name = namer .get_class_name ()
83
- test_module = __import__ (class_name )
84
- description = test_module .__doc__
123
+ description = request .module .__doc__
85
124
86
125
verify (
87
126
self .module_content (request , description ),
88
127
namer = namer
89
128
)
90
129
91
- class DocAsTestNamer (Namer ):
130
+ class DocAsTestNamer (PyTestNamer ):
92
131
Directory = ''
93
- MethodName = ''
94
- ClassName = ''
132
+ ModuleName = ''
95
133
96
134
def __init__ (self , request ):
97
- Namer .__init__ (self , ".adoc" )
135
+ PyTestNamer .__init__ (self , request , ".adoc" )
98
136
self .config = None
99
- self .MethodName = request .node .name
100
- self .ClassName = os .path .splitext (request .fspath .basename )[0 ]
137
+ self .ModuleName = request .module .__name__
101
138
self .Directory = request .fspath .dirname
102
-
103
- def get_class_name (self ):
104
- return self .ClassName
105
-
106
- def get_method_name (self ):
107
- return self .MethodName
108
-
139
+
109
140
def get_directory (self ):
110
141
return os .path .join (self .Directory , "../docs" )
111
142
@@ -126,12 +157,37 @@ def get_config(self):
126
157
127
158
class DocAsTestFunctionNamer (DocAsTestNamer ):
128
159
160
+ MethodName = ''
161
+ ClassName = ''
162
+ def __init__ (self , request ):
163
+ super ().__init__ (request )
164
+
165
+ self .MethodName = request .function .__name__
166
+ self .ClassName = None if request .cls is None else request .cls .__name__
167
+
129
168
def get_file_name (self ):
130
- class_name = "" if (self .ClassName is None ) else (self .ClassName + "." )
131
- return class_name + self .MethodName
169
+ class_name = "" if (self .ClassName is None ) else ("." + self .ClassName )
170
+ return self .ModuleName + class_name + "." + self .MethodName
171
+
172
+ def get_method_name (self ):
173
+ return self .MethodName
174
+
175
+ def get_class_name (self ):
176
+ return self .ClassName
132
177
178
+ class DocAsTestClassNamer (DocAsTestNamer ):
179
+ ClassName = ''
180
+ def __init__ (self , request ):
181
+ super ().__init__ (request )
133
182
183
+ self .ClassName = request .cls .__name__
184
+
185
+ def get_file_name (self ):
186
+ return self .ModuleName + "." + self .ClassName
187
+
188
+ def get_class_name (self ):
189
+ return self .ClassName
134
190
class DocAsTestModuleNamer (DocAsTestNamer ):
135
191
136
192
def get_file_name (self ):
137
- return self .ClassName
193
+ return self .ModuleName
0 commit comments