@@ -1886,31 +1886,38 @@ describe("Interaction", () => {
18861886 const selector = getAnnotationSelector ( "9R" ) ;
18871887 const hasVisibleCanvas = await page . $eval (
18881888 `${ selector } > canvas` ,
1889- elem => elem && ! elem . hasAttribute ( "hidden" )
1889+ elem => getComputedStyle ( elem ) . display !== "none"
18901890 ) ;
18911891 expect ( hasVisibleCanvas )
18921892 . withContext ( `In ${ browserName } ` )
18931893 . toEqual ( true ) ;
18941894
1895- const hasHiddenInput = await page . $eval ( `${ selector } > input` , elem =>
1896- elem ?. hasAttribute ( "hidden" )
1895+ const hasHiddenInput = await page . $eval (
1896+ `${ selector } > input` ,
1897+ elem => getComputedStyle ( elem ) . display === "none"
18971898 ) ;
18981899 expect ( hasHiddenInput ) . withContext ( `In ${ browserName } ` ) . toEqual ( true ) ;
18991900
19001901 await page . click ( getSelector ( "12R" ) ) ;
1901- await page . waitForSelector ( `${ selector } > canvas[hidden]` ) ;
1902+ await page . waitForFunction (
1903+ sel =>
1904+ getComputedStyle ( document . querySelector ( `${ sel } > canvas` ) )
1905+ . display === "none" ,
1906+ { } ,
1907+ selector
1908+ ) ;
19021909
19031910 const hasHiddenCanvas = await page . $eval (
19041911 `${ selector } > canvas` ,
1905- elem => elem ?. hasAttribute ( "hidden" )
1912+ elem => getComputedStyle ( elem ) . display === "none"
19061913 ) ;
19071914 expect ( hasHiddenCanvas )
19081915 . withContext ( `In ${ browserName } ` )
19091916 . toEqual ( true ) ;
19101917
19111918 const hasVisibleInput = await page . $eval (
19121919 `${ selector } > input` ,
1913- elem => elem && ! elem . hasAttribute ( "hidden" )
1920+ elem => getComputedStyle ( elem ) . display !== "none"
19141921 ) ;
19151922 expect ( hasVisibleInput )
19161923 . withContext ( `In ${ browserName } ` )
@@ -2696,4 +2703,89 @@ describe("Interaction", () => {
26962703 ) ;
26972704 } ) ;
26982705 } ) ;
2706+
2707+ describe ( "in text_field_own_canvas_calc.pdf" , ( ) => {
2708+ let pages ;
2709+
2710+ beforeEach ( async ( ) => {
2711+ pages = await loadAndWait (
2712+ "text_field_own_canvas_calc.pdf" ,
2713+ getSelector ( "7R" ) ,
2714+ "page-fit"
2715+ ) ;
2716+ } ) ;
2717+
2718+ afterEach ( async ( ) => {
2719+ await closePages ( pages ) ;
2720+ } ) ;
2721+
2722+ it ( "must show the field instead of its canvas when it was calculated while its page wasn't rendered" , async ( ) => {
2723+ await Promise . all (
2724+ pages . map ( async ( [ browserName , page ] ) => {
2725+ // The read-only "Mirror" field (8R) is on page 3, which hasn't been
2726+ // rendered yet.
2727+ expect ( await page . $ ( getSelector ( "8R" ) ) )
2728+ . withContext ( `In ${ browserName } ` )
2729+ . toBeNull ( ) ;
2730+
2731+ // Modifying the "Source" field (7R) on page 1 mirrors its value into
2732+ // the read-only field on page 3 through a Calculate action.
2733+ await page . type ( getSelector ( "7R" ) , "Hello PDF.js" ) ;
2734+ await page . keyboard . press ( "Enter" ) ;
2735+ await waitForEntryInStorage (
2736+ page ,
2737+ "8R" ,
2738+ { value : "Hello PDF.js" } ,
2739+ ( stored , expected ) =>
2740+ ! ! stored &&
2741+ JSON . parse ( stored ) . value === JSON . parse ( expected ) . value
2742+ ) ;
2743+
2744+ // The value has been mirrored into the storage while page 3, and
2745+ // hence its annotation layer, hasn't been rendered yet.
2746+ const page3AnnotationCount = await page . evaluate ( ( ) => {
2747+ const layer = document . querySelector (
2748+ '.page[data-page-number="3"] .annotationLayer'
2749+ ) ;
2750+ return layer ? layer . childElementCount : 0 ;
2751+ } ) ;
2752+ expect ( page3AnnotationCount )
2753+ . withContext ( `In ${ browserName } ` )
2754+ . toEqual ( 0 ) ;
2755+
2756+ // Render page 3.
2757+ await scrollIntoView ( page , '.page[data-page-number="3"]' ) ;
2758+ const inputPage3Selector = getSelector ( "8R" ) ;
2759+ await page . waitForSelector (
2760+ `.sandboxModified:has(${ inputPage3Selector } )` ,
2761+ { visible : true }
2762+ ) ;
2763+
2764+ // The field must show its (calculated) value and the now-outdated
2765+ // canvas must be hidden.
2766+ const { value, isFieldVisible, isCanvasHidden } = await page . evaluate (
2767+ sel => {
2768+ const input = document . querySelector ( sel ) ;
2769+ const canvas = input
2770+ . closest ( "section" )
2771+ . querySelector ( "canvas.annotationContent" ) ;
2772+ return {
2773+ value : input . value ,
2774+ isFieldVisible : getComputedStyle ( input ) . display !== "none" ,
2775+ isCanvasHidden :
2776+ ! ! canvas && getComputedStyle ( canvas ) . display === "none" ,
2777+ } ;
2778+ } ,
2779+ inputPage3Selector
2780+ ) ;
2781+
2782+ expect ( value )
2783+ . withContext ( `In ${ browserName } ` )
2784+ . toEqual ( "Hello PDF.js" ) ;
2785+ expect ( isFieldVisible ) . withContext ( `In ${ browserName } ` ) . toBe ( true ) ;
2786+ expect ( isCanvasHidden ) . withContext ( `In ${ browserName } ` ) . toBe ( true ) ;
2787+ } )
2788+ ) ;
2789+ } ) ;
2790+ } ) ;
26992791} ) ;
0 commit comments