Skip to content

Commit 412f01b

Browse files
authored
Fix: Support cells.pop() (#641)
1 parent 43175f1 commit 412f01b

File tree

7 files changed

+45
-23
lines changed

7 files changed

+45
-23
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ on:
1212

1313
concurrency:
1414
group: ${{ github.workflow }}-${{ github.ref }}
15-
cancel-in-progress: ${{ github.ref != github.event.repository.default_branch }}
15+
cancel-in-progress: ${{ ! contains(github.ref, github.event.repository.default_branch) }}
1616

1717
jobs:
1818
build_docs:

src/pytest_html/basereport.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ def pytest_sessionstart(self, session):
246246

247247
header_cells = Header()
248248
session.config.hook.pytest_html_results_table_header(cells=header_cells)
249-
250249
self._report.set_data("resultsTableHeader", header_cells.html)
250+
self._report.set_data("headerPops", header_cells.get_pops())
251251

252252
self._report.set_data("runningState", "Started")
253253
self._generate_report()

src/pytest_html/scripts/main.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ const renderContent = (tests) => {
4444
table.querySelectorAll('.extra').forEach((item) => {
4545
item.colSpan = document.querySelectorAll('th').length
4646
})
47+
48+
const { headerPops } = manager.renderData
49+
if (headerPops > 0) {
50+
// remove 'headerPops' number of header columns
51+
findAll('#results-table-head th').splice(-headerPops).forEach(column => column.remove())
52+
53+
// remove 'headerPops' number of row columns
54+
const resultRows = findAll('.results-table-row')
55+
resultRows.forEach((elem) => {
56+
findAll('td:not(.extra)', elem).splice(-headerPops).forEach(column => column.remove())
57+
})
58+
}
59+
4760
findAll('.sortable').forEach((elem) => {
4861
elem.addEventListener('click', (evt) => {
4962
const { target: element } = evt

src/pytest_html/scripts/sort.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const doInitSort = () => {
2929
const ascending = storageModule.getSortDirection()
3030
const list = manager.testSubset
3131
const initialOrder = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed', 'Skipped', 'Passed']
32-
console.log(list)
3332
if (type?.toLowerCase() === 'original') {
3433
manager.setRender(list)
3534
} else {

src/pytest_html/table.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Cell(Table):
3333
def __init__(self):
3434
super().__init__()
3535
self._append_counter = 0
36+
self._pop_counter = 0
3637
self._sortables = dict()
3738

3839
def __setitem__(self, key, value):
@@ -69,10 +70,10 @@ def insert(self, index, html):
6970
self._html[index] = html
7071

7172
def pop(self, *args):
72-
warnings.warn(
73-
"'pop' is deprecated and no longer supported.",
74-
DeprecationWarning,
75-
)
73+
self._pop_counter += 1
74+
75+
def get_pops(self):
76+
return self._pop_counter
7677

7778
def _extract_sortable(self, html):
7879
match = re.search(r'<td class="col-(\w+)">(.*?)</', html)
@@ -90,3 +91,7 @@ class Row(Cell):
9091
def __delitem__(self, key):
9192
# This means the item should be removed
9293
self._html = None
94+
95+
def pop(self, *args):
96+
# Calling pop on header is sufficient
97+
pass

testing/test_integration.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,27 @@ def test_pass(): pass
690690
page = run(pytester)
691691
assert_results(page, passed=1)
692692

693+
def test_results_table_hook_pop(self, pytester):
694+
pytester.makeconftest(
695+
"""
696+
def pytest_html_results_table_header(cells):
697+
cells.pop()
698+
699+
def pytest_html_results_table_row(report, cells):
700+
cells.pop()
701+
"""
702+
)
703+
pytester.makepyfile("def test_pass(): pass")
704+
page = run(pytester)
705+
706+
header_columns = page.select(".summary #results-table-head th")
707+
assert_that(header_columns).is_length(3)
708+
709+
row_columns = page.select_one(".summary .results-table-row").select(
710+
"td:not(.extra)"
711+
)
712+
assert_that(row_columns).is_length(3)
713+
693714
@pytest.mark.parametrize("no_capture", ["", "-s"])
694715
def test_standard_streams(self, pytester, no_capture):
695716
pytester.makepyfile(

testing/test_unit.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,3 @@ def pytest_runtest_makereport(item, call):
2424
"*DeprecationWarning: 'duration_formatter'*",
2525
],
2626
)
27-
28-
29-
def test_cells_pop_deprecation_warning(pytester):
30-
pytester.makeconftest(
31-
"""
32-
def pytest_html_results_table_row(cells):
33-
cells.pop()
34-
"""
35-
)
36-
pytester.makepyfile("def test_pass(): pass")
37-
result = run(pytester)
38-
result.stdout.fnmatch_lines(
39-
[
40-
"*DeprecationWarning: 'pop' is deprecated*",
41-
],
42-
)

0 commit comments

Comments
 (0)