The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict ;

use Data::Dumper ;

use Test::More tests => 4;

## Check module loads ok
BEGIN { use_ok('Linux::DVB::DVBT') };

#$Linux::DVB::DVBT::Config::DEBUG = 10 ;

##### Object methods

## Create object
my $dvb = Linux::DVB::DVBT->new(
	'dvb' => 1,		# special case to allow for testing
	
	'adapter_num'	=> 1,
	'frontend_num'	=> 0,
	
	'frontend_name'	=> '/dev/dvb/adapter1/frontend0',
	'demux_name'	=> '/dev/dvb/adapter1/demux0',
	'dvr_name'	=> '/dev/dvb/adapter1/dvr0',
	
) ;
isa_ok($dvb, 'Linux::DVB::DVBT') ;

#$dvb->debug(20) ;

## Check config read
my $expected_config_href = {
          'aliases' => {},
          'freqfile' => {
          	'578000000' => {
				frequency		=> 578000000,
				bandwidth		=> 8,
				code_rate_high	=> 23,
				code_rate_low	=> 0,
				modulation		=> 64,
				transmission	=> 2,
				guard_interval	=> 32,
				hierarchy		=> 0,
				inversion		=> 0,
          	},
          },
          'ts' => {
                    '8199' => {
                                'transmission' => '2',
                                'guard_interval' => '32',
                                'code_rate_high' => '23',
                                'name' => 'Oxford/Bexley',
                                'frequency' => '850000000',
                                'modulation' => '64',
                                'bandwidth' => '8',
                                'code_rate_low' => '12',
                                'hierarchy' => '0'
                              },
                    '4107' => {
                                'transmission' => '2',
                                'guard_interval' => '32',
                                'code_rate_high' => '34',
                                'name' => 'Oxford/Bexley',
                                'frequency' => '578000000',
                                'modulation' => '16',
                                'bandwidth' => '8',
                                'code_rate_low' => '34',
                                'hierarchy' => '0'
                              }
                  },
          'pr' => {
                    'CBBC Channel' => {
                                        'audio' => '621',
                                        'video' => '620',
                                        'tsid' => '4107',
                                        'name' => 'CBBC Channel',
                                        'type' => '1',
                                        'net' => 'BBC',
                                        'pnr' => '4671',
                                        'audio_details' => 'eng:621 eng:622'
                                      },
                    'Channel 4' => {
                                     'audio' => '561',
                                     'video' => '560',
                                     'tsid' => '8199',
                                     'name' => 'Channel 4',
                                     'type' => '1',
                                     'net' => 'Channel 4 TV',
                                     'pnr' => '8384',
                                     'audio_details' => 'eng:561 eng:562'
                                   },
                    'BBC TWO' => {
                                   'audio' => '611',
                                   'video' => '610',
                                   'tsid' => '4107',
                                   'name' => 'BBC TWO',
                                   'type' => '1',
                                   'net' => 'BBC',
                                   'pnr' => '4235',
                                   'audio_details' => 'eng:611 eng:612'
                                 },
                    'ITV1' => {
                                'audio' => '521',
                                'video' => '520',
                                'tsid' => '8199',
                                'name' => 'ITV1',
                                'type' => '1',
                                'net' => 'ITV',
                                'pnr' => '8263',
                                'audio_details' => 'eng:521 eng:522'
                              },
                    'ITV4' => {
                                'audio' => '601',
                                'video' => '600',
                                'tsid' => '8199',
                                'name' => 'ITV4',
                                'type' => '1',
                                'net' => 'ITV',
                                'pnr' => '8353',
                                'audio_details' => 'eng:601 eng:602'
                              },
                    'BBC NEWS' => {
                                    'audio' => '641',
                                    'video' => '640',
                                    'tsid' => '4107',
                                    'name' => 'BBC NEWS',
                                    'type' => '1',
                                    'net' => 'BBC',
                                    'pnr' => '4415',
                                    'audio_details' => 'eng:641'
                                  },
                    'E4' => {
                              'audio' => '571',
                              'video' => '570',
                              'tsid' => '8199',
                              'name' => 'E4',
                              'type' => '1',
                              'net' => 'Channel 4 TV',
                              'pnr' => '8448',
                              'audio_details' => 'eng:571 eng:572'
                            },
                    'More 4' => {
                                  'audio' => '591',
                                  'video' => '590',
                                  'tsid' => '8199',
                                  'name' => 'More 4',
                                  'type' => '1',
                                  'net' => 'Channel 4 TV',
                                  'pnr' => '8442',
                                  'audio_details' => 'eng:591 eng:592'
                                }
                  }
        };


#$Linux::DVB::DVBT::Config::DEBUG = 20 ;

$dvb->config_path('./t/config') ;
my $tuning_href = $dvb->get_tuning_info() ;
print Dumper($tuning_href) ;
is_deeply($tuning_href, $expected_config_href) ;

## Check config write
if ( -d './t/config-out' )
{
	system("rm -rf ./t/config-out") ;
}
$dvb->config_path('./t/config-out') ;
$dvb->tuning(0) ;
print Dumper($expected_config_href) ;
Linux::DVB::DVBT::Config::write($dvb->config_path, $expected_config_href) ;
$tuning_href = $dvb->get_tuning_info() ;
is_deeply($tuning_href, $expected_config_href) ;