@@ -525,8 +525,9 @@ const pivoted_output = [
525525 let table = await perspective . table ( int_float_string_data ) ;
526526 let view = await table . view ( {
527527 group_by : [ "int" ] ,
528+ leaves_only : true ,
528529 } ) ;
529- let json = await view . to_json ( { leaves_only : true } ) ;
530+ let json = await view . to_json ( ) ;
530531 expect ( json ) . toEqual ( [
531532 {
532533 __ROW_PATH__ : [ 1 ] ,
@@ -560,6 +561,79 @@ const pivoted_output = [
560561 view . delete ( ) ;
561562 table . delete ( ) ;
562563 } ) ;
564+
565+ test ( "num_rows returns correct leaf count" , async function ( ) {
566+ let table = await perspective . table ( int_float_string_data ) ;
567+ let view = await table . view ( {
568+ group_by : [ "int" ] ,
569+ leaves_only : true ,
570+ } ) ;
571+ let num_rows = await view . num_rows ( ) ;
572+ expect ( num_rows ) . toEqual ( 4 ) ;
573+ view . delete ( ) ;
574+ table . delete ( ) ;
575+ } ) ;
576+
577+ test ( "viewport pagination returns exact page sizes" , async function ( ) {
578+ let table = await perspective . table ( int_float_string_data ) ;
579+ let view = await table . view ( {
580+ group_by : [ "int" ] ,
581+ leaves_only : true ,
582+ } ) ;
583+ let json = await view . to_json ( {
584+ start_row : 0 ,
585+ end_row : 2 ,
586+ } ) ;
587+ expect ( json . length ) . toEqual ( 2 ) ;
588+ expect ( json [ 0 ] . __ROW_PATH__ ) . toEqual ( [ 1 ] ) ;
589+ expect ( json [ 1 ] . __ROW_PATH__ ) . toEqual ( [ 2 ] ) ;
590+ view . delete ( ) ;
591+ table . delete ( ) ;
592+ } ) ;
593+
594+ test ( "to_columns works with leaves_only" , async function ( ) {
595+ let table = await perspective . table ( int_float_string_data ) ;
596+ let view = await table . view ( {
597+ group_by : [ "int" ] ,
598+ leaves_only : true ,
599+ } ) ;
600+ let cols = await view . to_columns ( ) ;
601+ expect ( cols [ "__ROW_PATH__" ] ) . toEqual ( [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] ] ) ;
602+ expect ( cols [ "int" ] ) . toEqual ( [ 1 , 2 , 3 , 4 ] ) ;
603+ view . delete ( ) ;
604+ table . delete ( ) ;
605+ } ) ;
606+
607+ test ( "leaves_only with multi-level group_by" , async function ( ) {
608+ let table = await perspective . table ( int_float_string_data ) ;
609+ let view = await table . view ( {
610+ group_by : [ "string" , "int" ] ,
611+ leaves_only : true ,
612+ } ) ;
613+ let num_rows = await view . num_rows ( ) ;
614+ expect ( num_rows ) . toEqual ( 4 ) ;
615+ let json = await view . to_json ( ) ;
616+ for ( let row of json ) {
617+ expect ( row . __ROW_PATH__ . length ) . toEqual ( 2 ) ;
618+ }
619+ view . delete ( ) ;
620+ table . delete ( ) ;
621+ } ) ;
622+
623+ test ( "leaves_only updates after table.update()" , async function ( ) {
624+ let table = await perspective . table ( int_float_string_data ) ;
625+ let view = await table . view ( {
626+ group_by : [ "int" ] ,
627+ leaves_only : true ,
628+ } ) ;
629+ let num_rows = await view . num_rows ( ) ;
630+ expect ( num_rows ) . toEqual ( 4 ) ;
631+ table . update ( [ { int : 5 , float : 6.0 , string : "e" , datetime : STD_DATE } ] ) ;
632+ let num_rows2 = await view . num_rows ( ) ;
633+ expect ( num_rows2 ) . toEqual ( 5 ) ;
634+ view . delete ( ) ;
635+ table . delete ( ) ;
636+ } ) ;
563637 } ) ;
564638
565639 test . describe ( "to_arrow()" , function ( ) {
0 commit comments