cucu 1.1.2__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cucu might be problematic. Click here for more details.
- cucu/behave_tweaks.py +6 -2
- cucu/lint/rules/format.yaml +9 -0
- cucu/reporter/html.py +6 -1
- cucu/reporter/templates/layout.html +35 -0
- cucu/steps/__init__.py +1 -1
- cucu/steps/section_steps.py +25 -0
- {cucu-1.1.2.dist-info → cucu-1.2.0.dist-info}/METADATA +3 -11
- {cucu-1.1.2.dist-info → cucu-1.2.0.dist-info}/RECORD +11 -11
- cucu/steps/comment_steps.py +0 -17
- {cucu-1.1.2.dist-info → cucu-1.2.0.dist-info}/WHEEL +0 -0
- {cucu-1.1.2.dist-info → cucu-1.2.0.dist-info}/entry_points.txt +0 -0
- {cucu-1.1.2.dist-info → cucu-1.2.0.dist-info}/licenses/LICENSE +0 -0
cucu/behave_tweaks.py
CHANGED
|
@@ -66,7 +66,9 @@ def init_step_hooks(stdout, stderr):
|
|
|
66
66
|
# resolve variables in the table values
|
|
67
67
|
if ctx.table is not None:
|
|
68
68
|
ctx.table.original = Table(
|
|
69
|
-
ctx.table.headings,
|
|
69
|
+
ctx.table.headings,
|
|
70
|
+
rows=ctx.table.rows,
|
|
71
|
+
line=ctx.table.line,
|
|
70
72
|
)
|
|
71
73
|
new_rows = []
|
|
72
74
|
for row in ctx.table.rows:
|
|
@@ -123,7 +125,9 @@ def init_step_hooks(stdout, stderr):
|
|
|
123
125
|
|
|
124
126
|
return wrapper
|
|
125
127
|
|
|
126
|
-
behave.__dict__[decorator_name.title()] = behave.__dict__[
|
|
128
|
+
behave.__dict__[decorator_name.title()] = behave.__dict__[
|
|
129
|
+
decorator_name
|
|
130
|
+
] = new_decorator
|
|
127
131
|
|
|
128
132
|
|
|
129
133
|
_stdout = sys.stdout
|
cucu/lint/rules/format.yaml
CHANGED
|
@@ -105,6 +105,15 @@ and_keyword_indented_correctly:
|
|
|
105
105
|
match: '^\s*'
|
|
106
106
|
replace: ' '
|
|
107
107
|
|
|
108
|
+
section_step_indented_correctly:
|
|
109
|
+
message: "section step (* #...) should be indented with 8 spaces"
|
|
110
|
+
type: warning
|
|
111
|
+
current_line:
|
|
112
|
+
match: '^(\s{0,7}|\s{9,})\* .*'
|
|
113
|
+
fix:
|
|
114
|
+
match: '^\s*'
|
|
115
|
+
replace: ' '
|
|
116
|
+
|
|
108
117
|
line_with_extraneous_whitespace:
|
|
109
118
|
message: line has extraneous whitespace at the end
|
|
110
119
|
type: warning
|
cucu/reporter/html.py
CHANGED
|
@@ -199,8 +199,13 @@ def generate(results, basepath, only_failures=False):
|
|
|
199
199
|
image_dir = get_step_image_dir(step_index, step["name"])
|
|
200
200
|
image_dirpath = os.path.join(scenario_filepath, image_dir)
|
|
201
201
|
|
|
202
|
+
# Handle section headings with different levels (# to ####)
|
|
202
203
|
if step["name"].startswith("#"):
|
|
203
|
-
|
|
204
|
+
# Map the count to the appropriate HTML heading (h2-h5)
|
|
205
|
+
# We use h2-h5 instead of h1-h4 so h1 can be reserved for scenario/feature titles
|
|
206
|
+
step["heading_level"] = (
|
|
207
|
+
f"h{step["name"][:4].count("#") + 1}"
|
|
208
|
+
)
|
|
204
209
|
|
|
205
210
|
if os.path.exists(image_dirpath):
|
|
206
211
|
_, _, image_names = next(os.walk(image_dirpath))
|
|
@@ -51,6 +51,41 @@
|
|
|
51
51
|
display: inline;
|
|
52
52
|
color: gray;
|
|
53
53
|
}
|
|
54
|
+
|
|
55
|
+
/* Section heading styles */
|
|
56
|
+
h2[style*="display: contents;"] {
|
|
57
|
+
font-size: 1.5em;
|
|
58
|
+
font-weight: bold;
|
|
59
|
+
color: #333;
|
|
60
|
+
border-bottom: 1px solid #ccc;
|
|
61
|
+
margin-top: 10px;
|
|
62
|
+
margin-bottom: 10px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
h3[style*="display: contents;"] {
|
|
66
|
+
font-size: 1.3em;
|
|
67
|
+
font-weight: bold;
|
|
68
|
+
color: #444;
|
|
69
|
+
margin-top: 8px;
|
|
70
|
+
margin-bottom: 8px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
h4[style*="display: contents;"] {
|
|
74
|
+
font-size: 1.1em;
|
|
75
|
+
font-weight: bold;
|
|
76
|
+
color: #555;
|
|
77
|
+
margin-top: 6px;
|
|
78
|
+
margin-bottom: 6px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
h5[style*="display: contents;"] {
|
|
82
|
+
font-size: 1em;
|
|
83
|
+
font-style: italic;
|
|
84
|
+
font-weight: bold;
|
|
85
|
+
color: #666;
|
|
86
|
+
margin-top: 4px;
|
|
87
|
+
margin-bottom: 4px;
|
|
88
|
+
}
|
|
54
89
|
</style>
|
|
55
90
|
<script>
|
|
56
91
|
function setupReportTables(defaultOrder, columns) {
|
cucu/steps/__init__.py
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from behave import use_step_matcher
|
|
2
|
+
|
|
3
|
+
from cucu import step
|
|
4
|
+
|
|
5
|
+
use_step_matcher("re") # use regex to match section heading patterns
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@step("(#{1,4})\\s*(.*)")
|
|
9
|
+
def section_step(ctx, heading_level, section_text):
|
|
10
|
+
"""
|
|
11
|
+
A section heading step that organizes scenarios into logical sections.
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
* # Main section
|
|
15
|
+
* ## Subsection
|
|
16
|
+
* ### Sub-subsection
|
|
17
|
+
* #### Deep subsection
|
|
18
|
+
|
|
19
|
+
The number of # characters determines the heading level (1-4).
|
|
20
|
+
This step is a no-op but provides structure in the HTML report.
|
|
21
|
+
"""
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
use_step_matcher("parse") # set this back to cucu's default matcher parser
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cucu
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Easy BDD web testing
|
|
5
5
|
Project-URL: Homepage, https://github.com/dominodatalab/cucu/wiki
|
|
6
6
|
Project-URL: Download, https://pypi.org/project/cucu/
|
|
@@ -16,20 +16,12 @@ Classifier: Intended Audience :: Developers
|
|
|
16
16
|
Classifier: License :: OSI Approved :: BSD License
|
|
17
17
|
Classifier: Natural Language :: English
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
|
-
Classifier: Programming Language :: Python
|
|
20
|
-
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
27
19
|
Classifier: Topic :: Software Development :: Testing :: BDD
|
|
28
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10
|
|
29
21
|
Requires-Dist: beautifulsoup4~=4.13.3
|
|
30
22
|
Requires-Dist: behave==1.2.6
|
|
31
23
|
Requires-Dist: chromedriver-autoinstaller~=0.6.2
|
|
32
|
-
Requires-Dist: click~=8.
|
|
24
|
+
Requires-Dist: click~=8.2.0
|
|
33
25
|
Requires-Dist: coverage[toml]~=7.8
|
|
34
26
|
Requires-Dist: geckodriver-autoinstaller~=0.1.0
|
|
35
27
|
Requires-Dist: humanize~=4.12.1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
cucu/__init__.py,sha256=YtuajsJBj3_DgNoygHen9gKojeQF523Oc27kyCUzoG0,1013
|
|
2
2
|
cucu/ansi_parser.py,sha256=_yTlqr6KruLsqgWR6BkpJUC3bmlQy_9JbkuxFx6Jrbo,2213
|
|
3
|
-
cucu/behave_tweaks.py,sha256=
|
|
3
|
+
cucu/behave_tweaks.py,sha256=MqIL9BDHMvmyXyzkVGbD3wd8IP38_8pgp3NPGDWudm8,6873
|
|
4
4
|
cucu/config.py,sha256=12SXNtBSnD3N6K9DnCDYHZDA4_Wrh4g7whdgHDKSuPw,14022
|
|
5
5
|
cucu/environment.py,sha256=n5FyAq2T8t_dl1YdM38Wdp6yx9h0bL0pHyP5mAlhl00,9429
|
|
6
6
|
cucu/helpers.py,sha256=l_YMmbuXjtBRo-MER-qe6soUIyjt0ey2BoSgWs4zYwA,36285
|
|
@@ -43,12 +43,12 @@ cucu/language_server/__init__.py,sha256=IUO7FXpRDgvEmljSuB_WpT_BoBRdgG7lhTBFWUwm
|
|
|
43
43
|
cucu/language_server/core.py,sha256=mUCdkk484ldlXRC7hQmLKXGnQ37NumwuERqNZEyCUN4,3532
|
|
44
44
|
cucu/lint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
cucu/lint/linter.py,sha256=EeeU9DHL4s2MJDglJb1m8wXv4uolY7XAgfgnLY1Hqh8,13246
|
|
46
|
-
cucu/lint/rules/format.yaml,sha256=
|
|
46
|
+
cucu/lint/rules/format.yaml,sha256=Gm7Mx_KnL6s8EOyKGtZZBgREJPrviv-FuYzya3tyV_E,3168
|
|
47
47
|
cucu/matcher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
48
|
cucu/matcher/core.py,sha256=o2j4NNGORZ0BtHEbBTeE2T_vi6EJlWVkrjOoS2L7UNk,1032
|
|
49
49
|
cucu/reporter/__init__.py,sha256=nS2lIp43gifspIDgieSS3dzBMvnKfd--O8Pb3RTr4yE,71
|
|
50
50
|
cucu/reporter/favicon.png,sha256=9ikXLAmzfQzy2NQps_8CGaZog2FvQrOX8nnSZ0e1UmM,2161
|
|
51
|
-
cucu/reporter/html.py,sha256=
|
|
51
|
+
cucu/reporter/html.py,sha256=JOSLkUCARJ7kbhe7LAhbWeZh_ujiHU_a6ke7MHgpjIk,16679
|
|
52
52
|
cucu/reporter/external/bootstrap.min.css,sha256=eHMy9CG2IWZObUwZAkNVWc6DTIds3OavzUguDY0VsIo,163874
|
|
53
53
|
cucu/reporter/external/bootstrap.min.js,sha256=eZoFcnJ9Ooanw0yPsrZ3CHiXIYUBW-7_hNNqch50sLI,48945
|
|
54
54
|
cucu/reporter/external/dataTables.bootstrap.min.css,sha256=AVjWb9eSGQ0-3f4WNiVU1pfkyoNvthJdaw_IxK9Y2c0,10611
|
|
@@ -59,15 +59,14 @@ cucu/reporter/external/popper.min.js,sha256=pS96pU17yq-gVu4KBQJi38VpSuKN7otMrDQp
|
|
|
59
59
|
cucu/reporter/templates/feature.html,sha256=IBkwGiul-sRO5lT8q8VFXMUJx1owsAd1YbdDzziSjKw,3645
|
|
60
60
|
cucu/reporter/templates/flat.html,sha256=JGsMq-IWz6YUpJX9hcN65-15HxcX3NJclOmMDtW3HZE,2358
|
|
61
61
|
cucu/reporter/templates/index.html,sha256=LFth3SS__9881NKvPIIFdnrQEIcDTXWvToSWKNtjyKI,2726
|
|
62
|
-
cucu/reporter/templates/layout.html,sha256=
|
|
62
|
+
cucu/reporter/templates/layout.html,sha256=2iDRbm8atO8mgHWgijIvDCrBMKvcP6YHrmr95WtJiE4,4561
|
|
63
63
|
cucu/reporter/templates/scenario.html,sha256=Eomxn7_gxrOeWPXKQrnUt3pgKlWeC3PTiM04LMtDI44,10113
|
|
64
|
-
cucu/steps/__init__.py,sha256=
|
|
64
|
+
cucu/steps/__init__.py,sha256=seSmASBlWu6-6wbFbvEbPwigBcRXiYP18C4X_2cW8Ng,753
|
|
65
65
|
cucu/steps/base_steps.py,sha256=0fPvdaKoan8lMAKrDnK0-zrALpxm11P1zVAY5CN7iXA,1893
|
|
66
66
|
cucu/steps/browser_steps.py,sha256=RJmQcvA7S5toiJSBCOzhwZwFP4YCA4cxO36HSk4wiHY,10381
|
|
67
67
|
cucu/steps/button_steps.py,sha256=1C1UWVD4qs_3FuMlW13yg488C8u3rZYZVv384d_KgJE,2535
|
|
68
68
|
cucu/steps/checkbox_steps.py,sha256=FQNm8M3y7rbXiHKBRUhHDGPBAvgQZ9QGOt3oDttA2qs,3094
|
|
69
69
|
cucu/steps/command_steps.py,sha256=nVCc8-TEitetk-zhk4z1wa0owqLQyHeQVH5THioUw-k,5094
|
|
70
|
-
cucu/steps/comment_steps.py,sha256=KcU0Ya8XSjYEh8gdUGh0qsAxgB_Ru977E84yJaXrvz0,379
|
|
71
70
|
cucu/steps/draggable_steps.py,sha256=lnQLicp0GZJaxD_Qm2P13ruUZAsl3mptwaI5-SQ6XJ0,4655
|
|
72
71
|
cucu/steps/dropdown_steps.py,sha256=abykG--m79kDQ4LU1tm73fNLFPmrKDavyFzJb2MYCu0,15601
|
|
73
72
|
cucu/steps/file_input_steps.py,sha256=LLMAozVpceLMD-kJOE-auKHAdWLbNprH8eCfVQuNoGg,5523
|
|
@@ -79,6 +78,7 @@ cucu/steps/link_steps.py,sha256=MQLxyjCbiF2dOsmj6IrKKlRYhaqJjxDUNTf5Cau4J0w,1625
|
|
|
79
78
|
cucu/steps/menuitem_steps.py,sha256=9JlaPO6BSmW2GPmk43gxGy5S03rEtEx4KE0uCFBkjk0,1133
|
|
80
79
|
cucu/steps/platform_steps.py,sha256=G7HtBMhdRu58-2_LdXC5rkJM9F1ivGdlRa9BzTiHaaY,754
|
|
81
80
|
cucu/steps/radio_steps.py,sha256=3NeEXK_Sd2J-qWM0_2togWKh52vxsJCbbH5G7fPo-Ng,5645
|
|
81
|
+
cucu/steps/section_steps.py,sha256=XeSvLkf7o_VIoVgwyxA36-9H_9XIUiAAJ6EbIqeshIE,645
|
|
82
82
|
cucu/steps/step_utils.py,sha256=Chd0NQbMnfAEJmQkoVQRMbVRbCnJIBvVeH7CmXrCMm0,1417
|
|
83
83
|
cucu/steps/tab_steps.py,sha256=TVVytkihvJ2GYQ9bwAs1CVzb-twzUq11QONlEbd6uO0,1818
|
|
84
84
|
cucu/steps/table_steps.py,sha256=L497X4SnUlHG26Tp4FaLMke6HdqF2yIPj5lL6rBxIaw,13724
|
|
@@ -86,8 +86,8 @@ cucu/steps/tables.js,sha256=Os2a7Fo-cg03XVli7USvcnBVad4N7idXr-HBuzdLvVQ,945
|
|
|
86
86
|
cucu/steps/text_steps.py,sha256=Jj_GHoHeemNwVdUOdqcehArNp7WM-WMjljA4w0pLXuw,2576
|
|
87
87
|
cucu/steps/variable_steps.py,sha256=WSctH3_xcxjijGPYZlxp-foC_SIAAKtF__saNtgZJbk,2966
|
|
88
88
|
cucu/steps/webserver_steps.py,sha256=wWkpSvcSMdiskPkh4cqlepWx1nkvEpTU2tRXQmPDbyo,1410
|
|
89
|
-
cucu-1.
|
|
90
|
-
cucu-1.
|
|
91
|
-
cucu-1.
|
|
92
|
-
cucu-1.
|
|
93
|
-
cucu-1.
|
|
89
|
+
cucu-1.2.0.dist-info/METADATA,sha256=NT6AMiexib9zaO0UZUlDeWRJPgE1jMRP2kV7hIPMuuM,16535
|
|
90
|
+
cucu-1.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
91
|
+
cucu-1.2.0.dist-info/entry_points.txt,sha256=YEXTyEfIZbcV0GJ9R3Gfu3j6DcOJJK7_XHkJqE3Yiao,39
|
|
92
|
+
cucu-1.2.0.dist-info/licenses/LICENSE,sha256=WfgJYF9EaQoL_OeWr2Qd0MxhhFegDfzWSUmvDTwFxis,1721
|
|
93
|
+
cucu-1.2.0.dist-info/RECORD,,
|
cucu/steps/comment_steps.py
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from behave import use_step_matcher
|
|
2
|
-
|
|
3
|
-
from cucu import step
|
|
4
|
-
|
|
5
|
-
use_step_matcher("re") # use regex to match comments
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@step("#.*")
|
|
9
|
-
def comment_step(ctx):
|
|
10
|
-
"""
|
|
11
|
-
A no-op step so that we can see "comments" in results and report.
|
|
12
|
-
Usage: add `* #` to the line you want to show up.
|
|
13
|
-
"""
|
|
14
|
-
pass
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
use_step_matcher("parse") # set this back to cucu's default matcher parser
|
|
File without changes
|
|
File without changes
|
|
File without changes
|