<html>
  <head>
  </head>
  <body>
    <pre id="test">
    <script type="text/javascript" src="lib/Test/Builder.js"></script>
    <script type="text/javascript" src="lib/Test/More.js"></script>
    <script type="text/javascript" src="../share/JS/Data/Page.js"></script>
    <script>
    // Copied from Toshimasa Ishibashi
    plan({ tests: 772 });

    var cases = [
        '# Initial test',
        '50 10 1    1 5 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10',
        '50 10 2    1 5 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19     10',
        '50 10 3    1 5 21 30 2 3 4 20,21,22,23,24,25,26,27,28,29     10',
        '50 10 4    1 5 31 40 3 4 5 30,31,32,33,34,35,36,37,38,39     10',
        '50 10 5    1 5 41 50 4 5 undef 40,41,42,43,44,45,46,47,48,49 10',

        '# Under 10',
        '1 10 1    1 1 1 1 undef 1 undef 0                     1',
        '2 10 1    1 1 1 2 undef 1 undef 0,1                   2',
        '3 10 1    1 1 1 3 undef 1 undef 0,1,2                 3',
        '4 10 1    1 1 1 4 undef 1 undef 0,1,2,3               4',
        '5 10 1    1 1 1 5 undef 1 undef 0,1,2,3,4             5',
        '6 10 1    1 1 1 6 undef 1 undef 0,1,2,3,4,5           6',
        '7 10 1    1 1 1 7 undef 1 undef 0,1,2,3,4,5,6         7',
        '8 10 1    1 1 1 8 undef 1 undef 0,1,2,3,4,5,6,7       8',
        '9 10 1    1 1 1 9 undef 1 undef 0,1,2,3,4,5,6,7,8     9',
        '10 10 1   1 1 1 10 undef 1 undef 0,1,2,3,4,5,6,7,8,9  10',

        '# Over 10',
        '11 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10',
        '11 10 2    1 2 11 11 1 2 undef 10                     1',
        '12 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10',
        '12 10 2    1 2 11 12 1 2 undef 10,11                  2',
        '13 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10',
        '13 10 2    1 2 11 13 1 2 undef 10,11,12               3',

        '# Under 20',
        '19 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10',
        '19 10 2    1 2 11 19 1 2 undef 10,11,12,13,14,15,16,17,18    9',
        '20 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10',
        '20 10 2    1 2 11 20 1 2 undef 10,11,12,13,14,15,16,17,18,19 10',

        '# Over 20',
        '21 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10',
        '21 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10',
        '21 10 3    1 3 21 21 2 3 undef 20                        1',
        '22 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10',
        '22 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10',
        '22 10 3    1 3 21 22 2 3 undef 20,21                     2',
        '23 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10',
        '23 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10',
        '23 10 3    1 3 21 23 2 3 undef 20,21,22                  3',

        '# Zero test',
        '0 10 1    1 1 0 0 undef 1 undef "" 0'
    ];

    var name = '';
    var p;
    for( var i=0; i<cases.length; i++ ){
        var s = cases[i];
        if( s.match( /^# ?(.+?)/ ) ){
            name = s.match( /^# ?(.+)/ )[1];
            continue;
        }
        var arr = s.split( /\s+/ );
        for( var x=0; x<arr.length; x++ ){
            if( arr[x].match( /^undef$/ ) ){
                arr[x] = undefined;
            }else if( arr[x].match( /^""$/ ) ){
                arr[x] = '';
            }else if( x == 10 ){
                continue;
            }else{
                arr[x] = parseInt( arr[x] );
            }
        }
        //diag('old: ', arr[0], ', ', arr[1], ', ', arr[2]);
        p = new Data.Page( arr[0], arr[1], arr[2] );
        check( p, name, arr );

        //diag('new: ', arr[0], ', ', arr[1], ', ', arr[2]);
        p = new Data.Page();
        p.total_entries( arr[0] );
        p.entries_per_page( arr[1] );
        p.current_page( arr[2] );
        check( p, name, arr );
    }

    p = new Data.Page( 0, 10 );
    isaOK( p, 'Data.Page' );
    var empty = [];
    var spliced = p.splice( empty );
    is( spliced.length, 0, "Splice on empty is empty" );

    function check ( page, name, vals ){
        isaOK( page, 'Data.Page' );

        is( p.first_page(),    vals[3], name + ': first page'    );
        is( p.last_page(),     vals[4], name + ': last page'     );
        is( p.first(),         vals[5], name + ': first'         );
        is( p.last(),          vals[6], name + ': last'          );
        is( p.previous_page(), vals[7], name + ': previous page' );
        is( p.current_page(),  vals[8], name + ': current page'  );
        is( p.next_page(),     vals[9], name + ': next page'     );

        var int = [];
        for( var i=0; i < vals[0]; i++ ){ int.push( i ) }
        int = p.splice( int );
        is( int.join( ',' ), vals[10], name + ': splice' );
        is( p.entries_on_this_page(), vals[11],
            name + ': entries on this page' );

        var skipped = vals[5] - 1;
        if( skipped < 0 ){ skipped = 0 }
        is( p.skipped(), skipped, name + ': skipped' );
    };
    </script></pre>
  </body>
</html>