#!perl use strict; use warnings; use Test::More tests => 81; use Weather::NWS::NDFDgen; my $LAT = 42; my $LON = -88; my $START_TIME = scalar localtime; #now my $END_TIME = scalar localtime(time + (60*60*24)); #tomorrow ## Create Object my $NDFDgen = Weather::NWS::NDFDgen->new(); ok($NDFDgen, 'Object creation'); # Get Lists my @PRODUCTS = $NDFDgen->get_available_products(); ok(@PRODUCTS, 'Fetch product list'); my @W_PARAMS = $NDFDgen->get_available_weather_parameters(); ok(@W_PARAMS, 'Fetch weather parameter list'); ## Latitude and Longitude ok($NDFDgen->set_latitude($LAT) == $LAT, 'Set latitude' ); ok($NDFDgen->get_latitude() == $LAT, 'Get latitude' ); ok($NDFDgen->set_longitude($LON) == $LON, 'Set longitude'); ok($NDFDgen->get_longitude() == $LON, 'Get longitude'); ok($NDFDgen->get_longitude() != $NDFDgen->get_latitude(), 'Cross lat/lon'); ## Products for my $product (@PRODUCTS) { ok($NDFDgen->set_product($product) eq $product, "Set $product product"); ok($NDFDgen->get_product() eq $product, "Get $product product"); } eval { $NDFDgen->set_product('Not A Product'); }; ok($@, "Set bogus product"); ## Start and End Times my $st; ok($st = $NDFDgen->set_start_time($START_TIME), 'Set start time'); ok($NDFDgen->get_start_time() eq $st , 'Get start time'); my $et; ok($et = $NDFDgen->set_end_time($END_TIME), 'Set end time'); ok($NDFDgen->get_end_time() eq $et , 'Get end time'); ## Weather Parameters $NDFDgen->set_weather_parameters(); for my $parameter (@W_PARAMS) { my (@arguments, @results); # test setting valid values for my $value (0, 1) { @arguments = ($parameter => $value); @results = $NDFDgen->set_weather_parameters(@arguments); is_deeply(\@arguments, \@results, "Set $parameter to $value"); } # test setting invalid values eval{$NDFDgen->set_weather_parameters($parameter => 2)}; ok($@, "Set $parameter to 2"); # test getting values @results = $NDFDgen->get_weather_parameters($parameter); is_deeply(\@results, \@arguments, "Get $parameter"); } # test getting all parameters back my %results = $NDFDgen->get_weather_parameters(); is_deeply([sort @W_PARAMS], [sort keys %results], 'Return all parameters'); is_deeply([(1)x@W_PARAMS], [values %results], 'Return valid parameter values'); my %results2 = $NDFDgen->set_weather_parameters(%results); is_deeply(\%results2, \%results, 'Set all parameters'); eval { my $xml = $NDFDgen->get_forecast_xml('Weather Parameters' => { 'Maximum Temperature' => 1, 'Minimum Temperature' => 1, '3 Hourly Temperature' => 0, 'Dewpoint Temperature' => 0, 'Apparent Temperature' => 0, '12 Hour Probability of Precipitation' => 0, 'Liquid Precipitation Amount' => 0, 'Cloud Cover Amount' => 0, 'Snowfall Amount' => 0, 'Wind Speed' => 0, 'Wind Direction' => 0, 'Weather' => 0, 'Wave Height' => 0, 'Weather Icons' => 0, 'Relative Humidity' => 0, }); }; ok(not($@), "Fetch Data: $@");