@@ -1487,4 +1487,186 @@ describe('resolveLayout', () => {
14871487 expect ( content . lines [ 0 ] . availableWidth ) . toBe ( 360 ) ;
14881488 } ) ;
14891489 } ) ;
1490+
1491+ describe ( 'page metadata fields' , ( ) => {
1492+ it ( 'carries margins through to resolved page' , ( ) => {
1493+ const layout : Layout = {
1494+ pageSize : { w : 612 , h : 792 } ,
1495+ pages : [
1496+ {
1497+ number : 1 ,
1498+ fragments : [ ] ,
1499+ margins : { top : 72 , right : 72 , bottom : 72 , left : 72 , header : 36 , footer : 36 , gutter : 0 } ,
1500+ } ,
1501+ ] ,
1502+ } ;
1503+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1504+ expect ( result . pages [ 0 ] . margins ) . toEqual ( {
1505+ top : 72 ,
1506+ right : 72 ,
1507+ bottom : 72 ,
1508+ left : 72 ,
1509+ header : 36 ,
1510+ footer : 36 ,
1511+ gutter : 0 ,
1512+ } ) ;
1513+ } ) ;
1514+
1515+ it ( 'leaves margins undefined when page has no margins' , ( ) => {
1516+ const layout : Layout = {
1517+ pageSize : { w : 612 , h : 792 } ,
1518+ pages : [ { number : 1 , fragments : [ ] } ] ,
1519+ } ;
1520+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1521+ expect ( result . pages [ 0 ] . margins ) . toBeUndefined ( ) ;
1522+ } ) ;
1523+
1524+ it ( 'carries footnoteReserved through to resolved page' , ( ) => {
1525+ const layout : Layout = {
1526+ pageSize : { w : 612 , h : 792 } ,
1527+ pages : [ { number : 1 , fragments : [ ] , footnoteReserved : 48 } ] ,
1528+ } ;
1529+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1530+ expect ( result . pages [ 0 ] . footnoteReserved ) . toBe ( 48 ) ;
1531+ } ) ;
1532+
1533+ it ( 'carries numberText through to resolved page' , ( ) => {
1534+ const layout : Layout = {
1535+ pageSize : { w : 612 , h : 792 } ,
1536+ pages : [ { number : 1 , fragments : [ ] , numberText : 'i' } ] ,
1537+ } ;
1538+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1539+ expect ( result . pages [ 0 ] . numberText ) . toBe ( 'i' ) ;
1540+ } ) ;
1541+
1542+ it ( 'carries vAlign and baseMargins through to resolved page' , ( ) => {
1543+ const layout : Layout = {
1544+ pageSize : { w : 612 , h : 792 } ,
1545+ pages : [
1546+ {
1547+ number : 1 ,
1548+ fragments : [ ] ,
1549+ vAlign : 'center' ,
1550+ baseMargins : { top : 72 , bottom : 72 } ,
1551+ } ,
1552+ ] ,
1553+ } ;
1554+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1555+ expect ( result . pages [ 0 ] . vAlign ) . toBe ( 'center' ) ;
1556+ expect ( result . pages [ 0 ] . baseMargins ) . toEqual ( { top : 72 , bottom : 72 } ) ;
1557+ } ) ;
1558+
1559+ it ( 'carries sectionIndex through to resolved page' , ( ) => {
1560+ const layout : Layout = {
1561+ pageSize : { w : 612 , h : 792 } ,
1562+ pages : [ { number : 1 , fragments : [ ] , sectionIndex : 2 } ] ,
1563+ } ;
1564+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1565+ expect ( result . pages [ 0 ] . sectionIndex ) . toBe ( 2 ) ;
1566+ } ) ;
1567+
1568+ it ( 'carries sectionRefs through to resolved page' , ( ) => {
1569+ const layout : Layout = {
1570+ pageSize : { w : 612 , h : 792 } ,
1571+ pages : [
1572+ {
1573+ number : 1 ,
1574+ fragments : [ ] ,
1575+ sectionRefs : {
1576+ headerRefs : { default : 'hdr1' , first : 'hdr-first' } ,
1577+ footerRefs : { default : 'ftr1' } ,
1578+ } ,
1579+ } ,
1580+ ] ,
1581+ } ;
1582+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1583+ expect ( result . pages [ 0 ] . sectionRefs ) . toEqual ( {
1584+ headerRefs : { default : 'hdr1' , first : 'hdr-first' } ,
1585+ footerRefs : { default : 'ftr1' } ,
1586+ } ) ;
1587+ } ) ;
1588+
1589+ it ( 'carries orientation through to resolved page' , ( ) => {
1590+ const layout : Layout = {
1591+ pageSize : { w : 792 , h : 612 } ,
1592+ pages : [ { number : 1 , fragments : [ ] , orientation : 'landscape' } ] ,
1593+ } ;
1594+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1595+ expect ( result . pages [ 0 ] . orientation ) . toBe ( 'landscape' ) ;
1596+ } ) ;
1597+
1598+ it ( 'leaves optional metadata undefined when not set on source page' , ( ) => {
1599+ const layout : Layout = {
1600+ pageSize : { w : 612 , h : 792 } ,
1601+ pages : [ { number : 1 , fragments : [ ] } ] ,
1602+ } ;
1603+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1604+ const page = result . pages [ 0 ] ;
1605+ expect ( page . margins ) . toBeUndefined ( ) ;
1606+ expect ( page . footnoteReserved ) . toBeUndefined ( ) ;
1607+ expect ( page . numberText ) . toBeUndefined ( ) ;
1608+ expect ( page . vAlign ) . toBeUndefined ( ) ;
1609+ expect ( page . baseMargins ) . toBeUndefined ( ) ;
1610+ expect ( page . sectionIndex ) . toBeUndefined ( ) ;
1611+ expect ( page . sectionRefs ) . toBeUndefined ( ) ;
1612+ expect ( page . orientation ) . toBeUndefined ( ) ;
1613+ } ) ;
1614+
1615+ it ( 'carries all metadata fields together on a fully-populated page' , ( ) => {
1616+ const layout : Layout = {
1617+ pageSize : { w : 612 , h : 792 } ,
1618+ pages : [
1619+ {
1620+ number : 3 ,
1621+ fragments : [ ] ,
1622+ margins : { top : 72 , right : 72 , bottom : 72 , left : 72 } ,
1623+ footnoteReserved : 24 ,
1624+ numberText : 'iii' ,
1625+ vAlign : 'bottom' ,
1626+ baseMargins : { top : 96 , bottom : 96 } ,
1627+ sectionIndex : 1 ,
1628+ sectionRefs : {
1629+ headerRefs : { default : 'h1' } ,
1630+ footerRefs : { default : 'f1' , even : 'f-even' } ,
1631+ } ,
1632+ orientation : 'portrait' ,
1633+ } ,
1634+ ] ,
1635+ } ;
1636+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1637+ const page = result . pages [ 0 ] ;
1638+ expect ( page . margins ) . toEqual ( { top : 72 , right : 72 , bottom : 72 , left : 72 } ) ;
1639+ expect ( page . footnoteReserved ) . toBe ( 24 ) ;
1640+ expect ( page . numberText ) . toBe ( 'iii' ) ;
1641+ expect ( page . vAlign ) . toBe ( 'bottom' ) ;
1642+ expect ( page . baseMargins ) . toEqual ( { top : 96 , bottom : 96 } ) ;
1643+ expect ( page . sectionIndex ) . toBe ( 1 ) ;
1644+ expect ( page . sectionRefs ) . toEqual ( {
1645+ headerRefs : { default : 'h1' } ,
1646+ footerRefs : { default : 'f1' , even : 'f-even' } ,
1647+ } ) ;
1648+ expect ( page . orientation ) . toBe ( 'portrait' ) ;
1649+ } ) ;
1650+ } ) ;
1651+
1652+ describe ( 'layoutEpoch' , ( ) => {
1653+ it ( 'carries layoutEpoch from source layout to resolved layout' , ( ) => {
1654+ const layout : Layout = {
1655+ pageSize : { w : 612 , h : 792 } ,
1656+ pages : [ ] ,
1657+ layoutEpoch : 42 ,
1658+ } ;
1659+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1660+ expect ( result . layoutEpoch ) . toBe ( 42 ) ;
1661+ } ) ;
1662+
1663+ it ( 'defaults layoutEpoch to undefined when not set' , ( ) => {
1664+ const layout : Layout = {
1665+ pageSize : { w : 612 , h : 792 } ,
1666+ pages : [ ] ,
1667+ } ;
1668+ const result = resolveLayout ( { layout, flowMode : 'paginated' , blocks : [ ] , measures : [ ] } ) ;
1669+ expect ( result . layoutEpoch ) . toBeUndefined ( ) ;
1670+ } ) ;
1671+ } ) ;
14901672} ) ;
0 commit comments