Test evidence
Getting results out
Every requirement of this module, the tests named for it, and what each test recorded the last time the evidence was rebuilt.
Summary
- Requirements
- 63
- Tests named for them
- 71 (23 unit, 48 browser)
- Result
- pass every test passing
- Screenshots
- 6
- Recorded
- 2026-10-04 19:02 UTC
- Environment
- linux 6.17.0-1022-azure · node v22.23.3 · playwright 1.61.1 · chromium 149.0.7827.55
The requirements are the rows of the module’s requirement matrix. A test is named for a requirement by starting its name with the requirement’s ID. The results are read from the committed evidence set; continuous integration reruns every test and fails when the committed set no longer matches.
Requirements and their tests
EXP-TXT-001 pass
A placeholder, a name in braces, is replaced by the text of its value, once, left to right; a name the chart does not have is left as written; nothing in a template or a value is evaluated, so code-like text (
${…},<script>,{{…}}) is text.EXP-TXT-002 pass
Every chart takes
title,subtitleandfootnotes, null by default; a title or subtitle that is not text, or footnotes that are not text or a list of texts, are refused with a sentence naming the setting.EXP-TXT-003 pass
In the page, a title, subtitle or footnote holding code-like text is drawn as that text: no element is made of it, no script runs, and a placeholder inside it is filled as text.
EXP-AUTO-001 pass
The chart's own footnote, always last, gives the date drawn (UTC), the bio.viz version, and for each statistic printed R's method and the counts R used, with which R computed it: R in this browser, or a stored result with its R and gsm.bio versions; while R is asked it says it is waiting, and it says when nothing was asked, when statistics are unavailable and when R reported an error.
- pass unit getting results out: titles and footnotes EXP-AUTO-001: the chart’s own footnote, always last, gives the date drawn, the bio.viz version, and R’s method and counts behind every statistic printed, with the R and gsm.bio versions of a stored result; while R is asked it says it is waiting (#66)
EXP-AUTO-002 pass
A connection given
computedBy, which R computed its stored results, hands that record with every stored answer and with no other; a record that is not one is refused with a sentence.EXP-AUTO-003 pass
In the page the chart's own footnote says it is waiting while R is asked, and is written again when R answers; with no R it says statistics are unavailable, and a view that asks R nothing says so.
EXP-DRAW-001 pass
The group comparison draws its title and subtitle above it and its footnotes under it, every placeholder filled from the view drawn, with its own footnote last naming the date, the version, R's method and counts and the R and gsm.bio versions of the stored result; it holds at 390px.
- pass browser EXP-DRAW-001: the group comparison draws its title and subtitle above it and its footnotes under it, filled from the view drawn, with its own footnote last: the date, the bio.viz version, R’s method and counts, and the R and gsm.bio versions of the stored result; it holds at 390px (#66)
EXP-DRAW-002 pass
The same for the association scatter.
- pass browser EXP-DRAW-002: the association scatter draws its title and subtitle above it and its footnotes under it, filled from the view drawn, with its own footnote last: the date, the bio.viz version, R’s method and counts, and the R and gsm.bio versions of the stored result; it holds at 390px (#66)
EXP-DRAW-003 pass
The same for the correlation matrix.
- pass browser EXP-DRAW-003: the correlation matrix draws its title and subtitle above it and its footnotes under it, filled from the view drawn, with its own footnote last: the date, the bio.viz version, R’s method and counts, and the R and gsm.bio versions of the stored result; it holds at 390px (#66)
EXP-DRAW-004 pass
The same for the biomarker screen.
- pass browser EXP-DRAW-004: the biomarker screen draws its title and subtitle above it and its footnotes under it, filled from the view drawn, with its own footnote last: the date, the bio.viz version, R’s method and counts, and the R and gsm.bio versions of the stored result; it holds at 390px (#66)
EXP-DRAW-005 pass
The same for the cross-tabulation.
EXP-DRAW-006 pass
The same for the stratified survival chart.
- pass browser EXP-DRAW-006: the stratified survival draws its title and subtitle above it and its footnotes under it, filled from the view drawn, with its own footnote last: the date, the bio.viz version, R’s method and counts, and the R and gsm.bio versions of the stored result; it holds at 390px (#66)
EXP-SITE-001 pass
Each chart's demo on the gallery shows its title, subtitle and footnotes, every placeholder filled, with the chart's own footnote last; at 390px the page does not scroll sideways.
- pass browser EXP-SITE-001: the association scatter demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
- pass browser EXP-SITE-001: the biomarker screen demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
- pass browser EXP-SITE-001: the correlation matrix demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
- pass browser EXP-SITE-001: the cross-tabulation demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
- pass browser EXP-SITE-001: the group comparison demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
- pass browser EXP-SITE-001: the stratified survival demo shows its title, subtitle and footnotes, every placeholder filled, with the chart’s own footnote last; at 390px the page does not scroll sideways (#66)
EXP-CSV-001 pass
A CSV is written by RFC 4180: records end in CRLF; a field or a heading holding a comma, a double quote, a carriage return or a line feed is quoted, each double quote doubled; it reads back field for field, and a number reads back as itself.
- pass unit getting results out: the downloads EXP-CSV-001: a CSV is written by RFC 4180: CRLF between records; a field or a heading that holds a comma, a double quote, a carriage return or a line feed is quoted, with each double quote doubled; and it reads back field for field, a heading with a comma one heading (#67, #39)
EXP-CSV-002 pass
The statistics are R's answer laid out as a table: a row for each answer's result and one for each of its parts, every member R returned a column and every number R's own, with the R function asked and the data it was asked about; an answer R did not give has no rows.
- pass unit getting results out: the downloads EXP-CSV-002: the statistics are R’s answer laid out as a table: a row for each answer’s result and one for each of its parts, every member R returned a column, every number R’s own, with the function asked and the data it was asked about; an answer R did not give has no rows (#67)
EXP-PNG-001 pass
A downloaded PNG carries its resolution as pixels per metre (
pHYs) and its title, footnotes and software as UTF-8 text (iTXt), each chunk with its CRC, after the header.EXP-DL-001 pass
The group comparison downloads a PNG of its frame at
png_scaletimes its width on the page, its title and footnotes in the file; the statistics R returned as CSV, every number R's; and the table it drew from as CSV, its rows and columns; a heading with a comma reads back as one heading; each file is named for the chart and the view.EXP-DL-002 pass
The same for the association scatter.
- pass browser EXP-DL-002: the association scatter downloads a PNG of its frame at twice its size on the page, carrying its title and footnotes; the statistics R returned as CSV, R’s numbers; and the table it drew from as CSV, its rows and columns; a heading with a comma reads back as one heading (#67)
EXP-DL-003 pass
The same for the correlation matrix.
- pass browser EXP-DL-003: the correlation matrix downloads a PNG of its frame at twice its size on the page, carrying its title and footnotes; the statistics R returned as CSV, R’s numbers; and the table it drew from as CSV, its rows and columns; a heading with a comma reads back as one heading (#67)
EXP-DL-004 pass
The same for the biomarker screen.
EXP-DL-005 pass
The same for the cross-tabulation.
EXP-DL-006 pass
The same for the stratified survival chart.
- pass browser EXP-DL-006: the stratified survival downloads a PNG of its frame at twice its size on the page, carrying its title and footnotes; the statistics R returned as CSV, R’s numbers; and the table it drew from as CSV, its rows and columns; a heading with a comma reads back as one heading (#67)
EXP-DL-007 pass
Every chart takes
downloads, true by default, andpng_scale, 2 by default, from 1 to 4, and refuses anything else with a sentence; withdownloadsfalse the bar is not shown,png_scalesets the picture's size and resolution, and the statistics download waits for an answer from R and is not offered by a view that asks R nothing.- pass browser EXP-DL-007: with `downloads` false the bar is not shown; the statistics download waits for R’s answer; and `png_scale` sets the picture’s size and resolution (#67)
- pass unit getting results out: the downloads EXP-DL-007: every chart takes `downloads`, true by default, and `png_scale`, 2 by default, from 1 to 4; anything else is refused with a sentence (#67)
EXP-AUTO-004 pass
The chart's own footnote names every method R used for what is printed, the pairwise test beside the overall one, and every adjustment of the p-values, by name.
- pass unit getting results out: what the #69 review found EXP-AUTO-004: the chart’s own footnote names every method R used for what is printed, the pairwise test beside the overall one, and every adjustment of the p-values, by name (#69 review)
EXP-AUTO-005 pass
The footnote never names a released version for code that is not one: a build with changes since its release says
with development changes; package.json'sbioviz.developmentis true exactly while the release log has an upcoming section, and false in a tagged build.- pass unit getting results out: what the #69 review found EXP-AUTO-005: the footnote never names a released version for code that is not one: with development changes on the integration branch it says so; the package says so exactly while its version is released and another is upcoming, never while a release is prepared or once it is promoted, and never in a tagged build (#69 review, #75)
EXP-AUTO-006 pass
Counts are named for four groups and summarised for five or more, numeric text is read as a number, and many counts are summarised without spreading them; the source is the connection's form as it says, and a stored result's date is named.
- pass unit getting results out: what the #69 review found EXP-AUTO-006: the counts are named for four groups and summarised for five, numeric text is read as a number, many counts are summarised without spreading them; the source is the connection’s form as it says, and a stored result’s date is named (#69 review)
EXP-TXT-004 pass
A title or subtitle of only white space is absent; a chart whose placeholders throw is still titled and the error is reported; each placeholder's value is a run of its own, drawn in a
<bdi>so its direction is isolated.- pass unit getting results out: what the #69 review found EXP-TXT-004: a title or subtitle of only white space is absent; a chart whose placeholders throw is still titled, and the error is reported, not swallowed; each placeholder’s value is its own run of text, so a page can isolate its direction (#69 review)
EXP-TXT-005 pass
In the group comparison's overview,
{n}is the participants drawn anywhere on its page of biomarkers.- pass browser EXP-TXT-005: in the group comparison’s overview, {n} is the participants drawn anywhere on its page of biomarkers, not blank (#69 review)
EXP-UPD-001 pass
The group comparison's title and subtitle are filled again when a filter or a control moves:
{filters}names the filter,{n}counts the participants it lets through, and the control's placeholder reads its new value.- pass browser EXP-UPD-001: the group comparison’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-UPD-002 pass
The same for the association scatter.
- pass browser EXP-UPD-002: the association scatter’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-UPD-003 pass
The same for the correlation matrix.
- pass browser EXP-UPD-003: the correlation matrix’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-UPD-004 pass
The same for the biomarker screen.
- pass browser EXP-UPD-004: the biomarker screen’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-UPD-005 pass
The same for the cross-tabulation.
- pass browser EXP-UPD-005: the cross tab’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-UPD-006 pass
The same for the stratified survival chart.
- pass browser EXP-UPD-006: the stratified survival’s title and subtitle are filled again when a filter or a control moves: {filters} names the filter, {n} counts the participants it lets through, and the control’s placeholder reads its new value (#69 review)
EXP-PNG-002 pass
On a wide page and on a phone, the PNG draws the marks the chart draws, each where the page has it: every disc of the correlation matrix and its colour key, and the screen's zero line, intervals and dots.
- pass browser EXP-PNG-002: on a phone, the PNG draws the marks the chart draws: every disc of the correlation matrix and its colour key, and the screen’s zero line, intervals and dots, each where the page has it (#70 review)
- pass browser EXP-PNG-002: on a wide page, the PNG draws the marks the chart draws: every disc of the correlation matrix and its colour key, and the screen’s zero line, intervals and dots, each where the page has it (#70 review)
EXP-PNG-003 pass
On a phone, what scrolls sideways in the frame is drawn whole, the survival chart's at-risk table to its last column, and the picture is as wide as it needs.
- pass browser EXP-PNG-003: on a phone, what scrolls sideways in the frame is drawn whole: the survival chart’s at-risk table to its last column, with no scroll bar, the picture as wide as it needs (#70 review)
EXP-PNG-004 pass
Every control of a chart's frame (the toolbar, the hint, the listing, the bar of downloads, a chart's own download and pager buttons) is marked
bv-no-picture, which the picture leaves out.- pass browser EXP-PNG-004: nothing a reader works the chart with is in the picture: every control of the frame (the toolbar, the hint, the listing, the bar of downloads, a chart’s own download and pager buttons) is marked to be left out (#70 review)
EXP-DL-008 pass
A download that fails says so in the bar, in a line a screen reader announces; the next download works and takes the line away.
- pass browser EXP-DL-008: a download that fails says so in the bar, where the reader sees it, and the next one works (#70 review)
EXP-DL-009 pass
The table download holds the value a cut was made from: the survival chart's biomarker beside its group, and the cross-tabulation's for a cut row or column.
- pass browser EXP-DL-009: the table download holds the value a cut was made from: the survival chart’s biomarker beside its group, and the cross-tabulation’s for a cut row or column; its headings, as written (#70 review)
EXP-CSV-003 pass
Every member R returned is a column, however nested: lists of objects or of lists in the data asked about are flattened by place, nested names are joined by a slash, and a member that would take an identifying column's name, or two written alike, is refused.
- pass unit getting results out: what the #70 review found EXP-CSV-003: every member R returned is a column, however nested: a list of objects or of lists in the data asked about is flattened by position (a list of values alone is one field), nested names are joined by a slash, and an R member that would take an identifying column’s name, or two names that would meet, is refused, not overwritten (#70 review)
EXP-CSV-004 pass
NaN, Inf and -Inf are written as R writes them, apart from a value missing; a list of values is joined by
|.- pass unit getting results out: what the #70 review found EXP-CSV-004: R’s NaN, Inf and -Inf are written as R writes them, apart from a value missing; a list of values is joined by “ | ”, which R’s notes do not use (#70 review)
EXP-SPEC-001 pass
A specification names its format, its format version, the bio.viz version, the chart, every setting that is data and every filter in force as a column, an operator and values; the page's connection and way back, and anything that is not data, are not written.
- pass unit getting results out: specifications EXP-SPEC-001: a specification names its format, its version, the bio.viz version, the chart, every setting that is data and every filter in force as a column, an operator and values; the page’s connection and way back, and anything not data, are not written (#68)
EXP-SPEC-002 pass
Nothing in a specification is evaluated: code-like text in a setting or a filter is read as that text; a function, a number JSON cannot hold, undefined or an object that is not plain is refused with a sentence that says where it is; a key reaching an object's prototype is no setting.
EXP-SPEC-003 pass
A specification is refused with a sentence naming what is wrong when it is not one, is of another format version, names a chart bio.viz does not have, holds a setting the chart does not have in this version, or a filter whose operator is not
in; one written by another version is read when its settings are still settings; a filter in force is laid onto the chart's filters as where it starts.- pass unit getting results out: specifications EXP-SPEC-003: a specification is refused, with a sentence that names what is wrong, when it is not one, is of another format version, names a chart bio.viz does not have, holds a setting the chart does not have in this version, or a filter whose operator is not `in`; one written by another version is read when its settings are still settings (#68)
EXP-SPEC-004 pass
The format has a JSON schema, committed as
src/data/specification.schema.jsonand written from each chart's own settings;npm testfails when it is stale; it holds a written specification and refuses an unknown chart, an unknown setting of a chart, an unknown operator and an unknown member.- pass unit getting results out: specifications EXP-SPEC-004: the format has a JSON schema, committed and written from each chart’s own settings, so it names exactly the settings each chart has; it holds a written specification and refuses an unknown chart, an unknown setting of a chart, an unknown operator and a member that is not one (#68)
EXP-SPEC-005 pass
The group comparison writes its specification, held by the schema, as its controls and filters now read; made again from it by
BioViz.fromSpecification, the chart draws the same view, asks R the same and writes the same specification.EXP-SPEC-006 pass
The same for the association scatter.
EXP-SPEC-007 pass
The same for the correlation matrix.
EXP-SPEC-008 pass
The same for the biomarker screen.
EXP-SPEC-009 pass
The same for the cross-tabulation.
EXP-SPEC-010 pass
The same for the stratified survival chart.
EXP-SPEC-011 pass
In the page, a chart made from a specification holding code-like text draws it as text and runs nothing; one with a setting the chart does not have, or an operator that is not
in, is refused with a sentence and makes no chart.- pass browser EXP-SPEC-011: a filter value that looks like code and is in the data is drawn as text, and filters by it (#71 review)
- pass browser EXP-SPEC-011: in the page, a chart made from a specification that holds code-like text draws it as text and runs nothing; one with a setting the chart does not have, or an operator that is not `in`, is refused with a sentence and makes no chart (#68)
EXP-SPEC-012 pass
The site publishes the format's schema at
schema/specification.json, the committed file.EXP-SPEC-013 pass
A selection emptied by hand round-trips: every Visit of the group comparison and every biomarker of the correlation matrix unticked write
[], which the reader takes, and the chart made again draws the same nothing.- pass browser EXP-SPEC-013: a selection emptied by hand round-trips: every Visit unticked in the group comparison, and every biomarker of the correlation matrix, write [] that the reader takes, and the chart made again draws the same nothing (#71 review)
EXP-SPEC-014 pass
A filter of several values emptied by hand writes
values: []and comes back empty, letting nobody through.- pass browser EXP-SPEC-014: a filter of several values emptied by hand writes values [] and comes back empty, letting nobody through, not as All (#71 review)
EXP-SPEC-015 pass
What a specification asks for that the data cannot draw is said above the chart and listed in
chart.notices: a filter on a column the participant table lacks, a value a filter does not offer, a grouping the tables lack, a filter on the id column; a filter named twice is refused.- pass browser EXP-SPEC-015: what a specification asks for that the data cannot draw is said on the chart and listed in chart.notices: a filter on a column the participant table does not have, a value a filter does not offer, a grouping the tables do not have, a filter on the id column; a filter named twice is refused (#71 review)
EXP-SPEC-016 pass
A specification opens on the same page of the group comparison's overview and of the screen, in the screen's order, and the survival chart's Groups keep the cut it opened on after a moved line.
- pass browser EXP-SPEC-016: a specification opens on the same page of the group comparison’s overview and of the screen, in the screen’s order, and the survival chart’s Groups keep the cut it opened on after a moved line (#71 review)
EXP-SPEC-017 pass
Reading a specification makes every check making the chart makes: a value the chart refuses is refused with the chart's sentence, and an empty selection the chart can draw is read.
- pass unit getting results out: what the #71 review found EXP-SPEC-017: reading a specification makes every check making the chart makes: a setting’s value the chart refuses is refused with the chart’s own sentence, and an empty selection the chart can draw is read (#71 review)
EXP-SPEC-018 pass
An object given as a specification is read once, own data properties only: a getter or a setter is refused, a Proxy's traps run once each and only the copy is checked, and nesting deeper than 64 is refused.
- pass unit getting results out: what the #71 review found EXP-SPEC-018: an object given as a specification is read once, own data properties only: a getter or a setter is refused, a Proxy’s traps run once each and the copy alone is checked, and nesting deeper than 64 is refused with a sentence (#71 review)
EXP-SPEC-019 pass
__proto__,constructorandprototypeare no column: a filter on one, or a setting naming one, is refused by the reader and the schema.- pass unit getting results out: what the #71 review found EXP-SPEC-019: `__proto__`, `constructor` and `prototype` are no column: a filter on one, or a setting that names one as its column, is refused by the reader and the schema (#71 review)
EXP-SPEC-020 pass
The reader and the schema agree:
bio_viz_versionis text, a filter names a column once and each value once, a column's name is not blank,settings.filtersis a list or null; the schema gives every setting's default and is written from the one chart list.- pass unit getting results out: what the #71 review found EXP-SPEC-020: the reader and the schema agree: `bio_viz_version` is text, a filter names one column once with its values each once, a column’s name is not blank, `settings.filters` is a list or null, and the schema gives every setting’s default (#71 review)
EXP-SITE-002 pass
Every chart's picture in the gallery is a capture of its frame taken by
captureGallery, which fails rather than capture when the frame lacks its title or its own footnote, or when R has not answered.EXP-SITE-003 pass
The built gallery shows every chart in that picture, its title and footnotes drawn in, and at 390px the page does not scroll sideways.
Checking this page
npm ci
npm run evidence:check # rerun every test and compare with the committed evidence set
npm run evidence # rebuild docs/evidence/output/evidence.json





