aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--t/test.t503
1 files changed, 394 insertions, 109 deletions
diff --git a/t/test.t b/t/test.t
index a7dd2a7..eba3ed7 100644
--- a/t/test.t
+++ b/t/test.t
@@ -6,111 +6,394 @@ use warnings;
use English qw(-no_match_vars);
use Test::More;
-# each value is an arrayref with 3 elements, indexed by file name:
+# each value is an arrayref with 2 elements, indexed by file name:
# - expected output from find_edid_in_string function
-# - expected output from parse_edid function
-# - expected output from check_parsed_edid function
+# - list of tuples foreach edid fragement:
+# - expected output from parse_edid function
+# - expected output from check_parsed_edid function
my %tests = (
sample1 => [
- [ binary('00ffffffffffff0006af14a10000000001120103901a10780a50c59858528e2725505400000001010101010101010101010101010101ea1a007e502010303020360005a31000001aea1a007e502010303020360005a31000001a000000fe00593734374480423132314557300000000000000000000000000001010a202000a5') ],
- {
- 'serial_number' => 0,
- 'ratio_precision' => 'mm',
- 'feature_support' => {
- 'GTF_compliance' => 0,
- 'sRGB_compliance' => 0,
- 'rgb' => 0,
- 'DPMS_suspend' => 0,
- 'has_preferred_timing' => 1,
- 'DPMS_active_off' => 0,
- 'DPMS_standby' => 0
- },
- 'checksum' => 165,
- 'video_input_definition' => {
- 'voltage_level' => 0,
- 'digital' => 1,
- 'composite_sync' => 0,
- 'separate_sync' => 0,
- 'sync_on_green' => 1
- },
- 'established_timings' => [],
- 'max_size_precision' => 'mm',
- 'product_code' => 41236,
- 'ratio' => '1.60122699386503',
- 'standard_timings' => [],
- 'monitor_details' => '',
- 'week' => 1,
- 'monitor_text' => [
- "Y747D\x80B121EW0"
- ],
- 'detailed_timings' => [
+ [
+ binary('00ffffffffffff0006af14a10000000001120103901a10780a50c59858528e2725505400000001010101010101010101010101010101ea1a007e502010303020360005a31000001aea1a007e502010303020360005a31000001a000000fe00593734374480423132314557300000000000000000000000000001010a202000a5')
+ ],
+ [
+ [
{
- 'vertical_dpi' => '124.662576687117',
- 'vertical_sync_offset' => 3,
- 'pixel_clock' => '68.9',
- 'horizontal_border' => 0,
- 'stereo' => 0,
- 'interlaced' => 0,
- 'horizontal_blanking' => 126,
- 'digital_composite' => 3,
- 'vertical_sync_pulse_width' => 6,
- 'horizontal_active' => 1280,
- 'vertical_sync_positive' => 1,
- 'horizontal_sync_pulse_width' => 32,
- 'horizontal_dpi' => '124.567049808429',
- 'horizontal_sync_positive' => 0,
- 'vertical_border' => 0,
- 'preferred' => 1,
- 'horizontal_sync_offset' => 48,
- 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
- 'vertical_image_size' => 163,
- 'horizontal_image_size' => 261,
- 'ModeLine_comment' => '# Monitor preferred modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
- 'vertical_blanking' => 16,
- 'vertical_active' => 800
+ 'serial_number' => 0,
+ 'ratio_precision' => 'mm',
+ 'feature_support' => {
+ 'GTF_compliance' => 0,
+ 'sRGB_compliance' => 0,
+ 'rgb' => 0,
+ 'DPMS_suspend' => 0,
+ 'has_preferred_timing' => 1,
+ 'DPMS_active_off' => 0,
+ 'DPMS_standby' => 0
+ },
+ 'checksum' => 165,
+ 'video_input_definition' => {
+ 'voltage_level' => 0,
+ 'digital' => 1,
+ 'composite_sync' => 0,
+ 'separate_sync' => 0,
+ 'sync_on_green' => 1
+ },
+ 'established_timings' => [],
+ 'max_size_precision' => 'mm',
+ 'product_code' => 41236,
+ 'ratio' => '1.60122699386503',
+ 'standard_timings' => [],
+ 'monitor_details' => '',
+ 'week' => 1,
+ 'monitor_text' => [
+ "Y747D\x80B121EW0"
+ ],
+ 'detailed_timings' => [
+ {
+ 'vertical_dpi' => '124.662576687117',
+ 'vertical_sync_offset' => 3,
+ 'pixel_clock' => '68.9',
+ 'horizontal_border' => 0,
+ 'stereo' => 0,
+ 'interlaced' => 0,
+ 'horizontal_blanking' => 126,
+ 'digital_composite' => 3,
+ 'vertical_sync_pulse_width' => 6,
+ 'horizontal_active' => 1280,
+ 'vertical_sync_positive' => 1,
+ 'horizontal_sync_pulse_width' => 32,
+ 'horizontal_dpi' => '124.567049808429',
+ 'horizontal_sync_positive' => 0,
+ 'vertical_border' => 0,
+ 'preferred' => 1,
+ 'horizontal_sync_offset' => 48,
+ 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
+ 'vertical_image_size' => 163,
+ 'horizontal_image_size' => 261,
+ 'ModeLine_comment' => '# Monitor preferred modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
+ 'vertical_blanking' => 16,
+ 'vertical_active' => 800
+ },
+ {
+ 'vertical_dpi' => '124.662576687117',
+ 'vertical_sync_offset' => 3,
+ 'pixel_clock' => '68.9',
+ 'horizontal_border' => 0,
+ 'stereo' => 0,
+ 'interlaced' => 0,
+ 'horizontal_blanking' => 126,
+ 'digital_composite' => 3,
+ 'vertical_sync_pulse_width' => 6,
+ 'horizontal_active' => 1280,
+ 'vertical_sync_positive' => 1,
+ 'horizontal_sync_pulse_width' => 32,
+ 'horizontal_dpi' => '124.567049808429',
+ 'horizontal_sync_positive' => 0,
+ 'vertical_border' => 0,
+ 'horizontal_sync_offset' => 48,
+ 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
+ 'vertical_image_size' => 163,
+ 'horizontal_image_size' => 261,
+ 'ModeLine_comment' => '# Monitor supported modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
+ 'vertical_blanking' => 16,
+ 'vertical_active' => 800
+ }
+ ],
+ 'extension_flag' => 0,
+ 'gamma' => 120,
+ 'diagonal_size' => '12.1148583788498',
+ 'ratio_name' => '16/10',
+ 'edid_revision' => 3,
+ 'EISA_ID' => 'AUOa114',
+ 'max_size_horizontal' => '26.1',
+ 'max_size_vertical' => '16.3',
+ 'edid_version' => 1,
+ 'year' => 2008,
+ 'manufacturer_name' => 'AUO'
},
+ ''
+ ]
+ ]
+ ],
+ sample2 => [
+ [
+ binary('00ffffffffffff0006af14a10000000001120103901a10780a50c59858528e2725505400000001010101010101010101010101010101ea1a007e502010303020360005a31000001aea1a007e502010303020360005a31000001a000000fe00593734374480423132314557300000000000000000000000000001010a202000a5'),
+ binary('00ffffffffffff0022f0f62601010101181401036e362378eece50a3544c99260f5054a56b8081408180a900a940b300d10001010101283c80a070b023403020360022602100001a000000fc004850204c5032343735770a2020000000fd0030551e5e15000a202020202020000000ff00434e43303234303343500a20200085')
+ ],
+ [
+ [
{
- 'vertical_dpi' => '124.662576687117',
- 'vertical_sync_offset' => 3,
- 'pixel_clock' => '68.9',
- 'horizontal_border' => 0,
- 'stereo' => 0,
- 'interlaced' => 0,
- 'horizontal_blanking' => 126,
- 'digital_composite' => 3,
- 'vertical_sync_pulse_width' => 6,
- 'horizontal_active' => 1280,
- 'vertical_sync_positive' => 1,
- 'horizontal_sync_pulse_width' => 32,
- 'horizontal_dpi' => '124.567049808429',
- 'horizontal_sync_positive' => 0,
- 'vertical_border' => 0,
- 'horizontal_sync_offset' => 48,
- 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
- 'vertical_image_size' => 163,
- 'horizontal_image_size' => 261,
- 'ModeLine_comment' => '# Monitor supported modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
- 'vertical_blanking' => 16,
- 'vertical_active' => 800
- }
+ 'serial_number' => 0,
+ 'ratio_precision' => 'mm',
+ 'feature_support' => {
+ 'GTF_compliance' => 0,
+ 'sRGB_compliance' => 0,
+ 'rgb' => 0,
+ 'DPMS_suspend' => 0,
+ 'has_preferred_timing' => 1,
+ 'DPMS_active_off' => 0,
+ 'DPMS_standby' => 0
+ },
+ 'checksum' => 165,
+ 'video_input_definition' => {
+ 'voltage_level' => 0,
+ 'digital' => 1,
+ 'composite_sync' => 0,
+ 'separate_sync' => 0,
+ 'sync_on_green' => 1
+ },
+ 'established_timings' => [],
+ 'max_size_precision' => 'mm',
+ 'product_code' => 41236,
+ 'ratio' => '1.60122699386503',
+ 'standard_timings' => [],
+ 'monitor_details' => '',
+ 'week' => 1,
+ 'monitor_text' => [
+ "Y747D\x80B121EW0"
+ ],
+ 'detailed_timings' => [
+ {
+ 'vertical_dpi' => '124.662576687117',
+ 'vertical_sync_offset' => 3,
+ 'pixel_clock' => '68.9',
+ 'horizontal_border' => 0,
+ 'stereo' => 0,
+ 'interlaced' => 0,
+ 'horizontal_blanking' => 126,
+ 'digital_composite' => 3,
+ 'vertical_sync_pulse_width' => 6,
+ 'horizontal_active' => 1280,
+ 'vertical_sync_positive' => 1,
+ 'horizontal_sync_pulse_width' => 32,
+ 'horizontal_dpi' => '124.567049808429',
+ 'horizontal_sync_positive' => 0,
+ 'vertical_border' => 0,
+ 'preferred' => 1,
+ 'horizontal_sync_offset' => 48,
+ 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
+ 'vertical_image_size' => 163,
+ 'horizontal_image_size' => 261,
+ 'ModeLine_comment' => '# Monitor preferred modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
+ 'vertical_blanking' => 16,
+ 'vertical_active' => 800
+ },
+ {
+ 'vertical_dpi' => '124.662576687117',
+ 'vertical_sync_offset' => 3,
+ 'pixel_clock' => '68.9',
+ 'horizontal_border' => 0,
+ 'stereo' => 0,
+ 'interlaced' => 0,
+ 'horizontal_blanking' => 126,
+ 'digital_composite' => 3,
+ 'vertical_sync_pulse_width' => 6,
+ 'horizontal_active' => 1280,
+ 'vertical_sync_positive' => 1,
+ 'horizontal_sync_pulse_width' => 32,
+ 'horizontal_dpi' => '124.567049808429',
+ 'horizontal_sync_positive' => 0,
+ 'vertical_border' => 0,
+ 'horizontal_sync_offset' => 48,
+ 'ModeLine' => '"1280x800" 68.9 1280 1328 1360 1406 800 803 809 816 -hsync +vsync',
+ 'vertical_image_size' => 163,
+ 'horizontal_image_size' => 261,
+ 'ModeLine_comment' => '# Monitor supported modeline (60.1 Hz vsync, 49.0 kHz hsync, ratio 16/10, 124 dpi)',
+ 'vertical_blanking' => 16,
+ 'vertical_active' => 800
+ }
+ ],
+ 'extension_flag' => 0,
+ 'gamma' => 120,
+ 'diagonal_size' => '12.1148583788498',
+ 'ratio_name' => '16/10',
+ 'edid_revision' => 3,
+ 'EISA_ID' => 'AUOa114',
+ 'max_size_horizontal' => '26.1',
+ 'max_size_vertical' => '16.3',
+ 'edid_version' => 1,
+ 'year' => 2008,
+ 'manufacturer_name' => 'AUO'
+ },
+ ''
],
- 'extension_flag' => 0,
- 'gamma' => 120,
- 'diagonal_size' => '12.1148583788498',
- 'ratio_name' => '16/10',
- 'edid_revision' => 3,
- 'EISA_ID' => 'AUOa114',
- 'max_size_horizontal' => '26.1',
- 'max_size_vertical' => '16.3',
- 'edid_version' => 1,
- 'year' => 2008,
- 'manufacturer_name' => 'AUO'
- },
- ''
- ]
+ [
+ {
+ 'serial_number' => 16843009,
+ 'ratio_precision' => 'mm',
+ 'feature_support' => {
+ 'GTF_compliance' => 0,
+ 'sRGB_compliance' => 1,
+ 'rgb' => 0,
+ 'DPMS_suspend' => 1,
+ 'has_preferred_timing' => 1,
+ 'DPMS_active_off' => 1,
+ 'DPMS_standby' => 1
+ },
+ 'checksum' => 133,
+ 'serial_number2' => [
+ 'CNC02403CP'
+ ],
+ 'video_input_definition' => {
+ 'voltage_level' => 2,
+ 'digital' => 0,
+ 'composite_sync' => 1,
+ 'separate_sync' => 1,
+ 'sync_on_green' => 0
+ },
+ 'VertRefresh' => '48-85',
+ 'monitor_name' => 'HP LP2475w',
+ 'established_timings' => [
+ {
+ 'vfreq' => 60,
+ 'X' => 640,
+ 'Y' => '480'
+ },
+ {
+ 'vfreq' => 75,
+ 'X' => 640,
+ 'Y' => '480'
+ },
+ {
+ 'vfreq' => '70',
+ 'X' => 720,
+ 'Y' => '400'
+ },
+ {
+ 'vfreq' => 60,
+ 'X' => 800,
+ 'Y' => '600'
+ },
+ {
+ 'vfreq' => 75,
+ 'X' => 800,
+ 'Y' => '600'
+ },
+ {
+ 'vfreq' => '75',
+ 'X' => 832,
+ 'Y' => '624'
+ },
+ {
+ 'vfreq' => 60,
+ 'X' => 1024,
+ 'Y' => '768'
+ },
+ {
+ 'vfreq' => 75,
+ 'X' => 1024,
+ 'Y' => '768'
+ },
+ {
+ 'vfreq' => '75',
+ 'X' => 1280,
+ 'Y' => '1024'
+ }
+ ],
+ 'max_size_precision' => 'cm',
+ 'monitor_range' => {
+ 'horizontal_min' => 30,
+ 'vertical_max' => 85,
+ 'pixel_clock_max' => 210,
+ 'horizontal_max' => 94,
+ 'vertical_min' => 48
+ },
+ 'product_code' => 9974,
+ 'ratio' => '1.55113636363636',
+ 'HorizSync' => '30-94',
+ 'monitor_details' => '',
+ 'standard_timings' => [
+ {
+ 'ratio' => '4/3',
+ 'vfreq' => 60,
+ 'X' => 1280,
+ 'Y' => '960'
+ },
+ {
+ 'ratio' => '5/4',
+ 'vfreq' => 60,
+ 'X' => 1280,
+ 'Y' => '1024'
+ },
+ {
+ 'ratio' => '16/10',
+ 'vfreq' => 60,
+ 'X' => 1600,
+ 'Y' => '1000'
+ },
+ {
+ 'ratio' => '4/3',
+ 'vfreq' => 60,
+ 'X' => 1600,
+ 'Y' => '1200'
+ },
+ {
+ 'ratio' => '16/10',
+ 'vfreq' => 60,
+ 'X' => 1680,
+ 'Y' => '1050'
+ },
+ {
+ 'ratio' => '16/10',
+ 'vfreq' => 60,
+ 'X' => 1920,
+ 'Y' => '1200'
+ }
+ ],
+ 'week' => 24,
+ 'detailed_timings' => [
+ {
+ 'vertical_dpi' => '87.0857142857143',
+ 'vertical_sync_offset' => 3,
+ 'bad_ratio' => 1,
+ 'pixel_clock' => 154,
+ 'horizontal_border' => 0,
+ 'stereo' => 0,
+ 'interlaced' => 0,
+ 'horizontal_blanking' => 160,
+ 'digital_composite' => 3,
+ 'vertical_sync_pulse_width' => 6,
+ 'horizontal_active' => 1920,
+ 'vertical_sync_positive' => 1,
+ 'horizontal_sync_pulse_width' => 32,
+ 'horizontal_dpi' => '90.3111111111111',
+ 'horizontal_sync_positive' => 0,
+ 'vertical_border' => 0,
+ 'preferred' => 1,
+ 'horizontal_sync_offset' => 48,
+ 'ModeLine' => '"1920x1200" 154 1920 1968 2000 2080 1200 1203 1209 1235 -hsync +vsync',
+ 'vertical_image_size' => 352,
+ 'horizontal_image_size' => 546,
+ 'ModeLine_comment' => '# Monitor preferred modeline (60.0 Hz vsync, 74.0 kHz hsync, ratio 16/10, 90 dpi)',
+ 'vertical_blanking' => 35,
+ 'vertical_active' => 1200
+ }
+ ],
+ 'extension_flag' => 0,
+ 'gamma' => 120,
+ 'diagonal_size' => '25.3348827451908',
+ 'ratio_name' => '16/10',
+ 'edid_revision' => 3,
+ 'EISA_ID' => 'HWP26f6',
+ 'max_size_horizontal' => 54,
+ 'max_size_vertical' => 35,
+ 'edid_version' => 1,
+ 'year' => 2010,
+ 'manufacturer_name' => 'HWP'
+ },
+ ''
+ ]
+ ]
+ ]
);
-plan tests => 1 + (3 * scalar keys %tests);
+# use test
+my $count = 1;
+foreach my $test (keys %tests) {
+ # one find_edid test, plus two tests foreach fragment
+ $count += 1 + (2 * scalar @{$tests{$test}->[1]});
+}
+plan tests => $count;
use_ok('Parse::EDID');
@@ -121,22 +404,24 @@ foreach my $test (keys %tests) {
is_deeply(
\@edids,
$tests{$test}->[0],
- "$test: edid extraction"
+ "file $test: edids extraction"
);
- my $edid = parse_edid($edids[0]);
- is_deeply(
- $edid,
- $tests{$test}->[1],
- "$test: edid parsing"
- );
+ for my $i (0 .. $#edids) {
+ my $parsed_edid = parse_edid($edids[$i]);
+ is_deeply(
+ $parsed_edid,
+ $tests{$test}->[1]->[$i]->[0],
+ "file $test, edid $i: parsing"
+ );
- my $message = check_parsed_edid($edid);
- is(
- $message,
- $tests{$test}->[2],
- "$test: edid checking"
- );
+ my $message = check_parsed_edid($parsed_edid);
+ is(
+ $message,
+ $tests{$test}->[1]->[$i]->[1],
+ "file $test, edit $i: checking"
+ );
+ }
}
sub read_file {