mirror of https://github.com/nirenjan/libx52.git
				
				
				
			
		
			
				
	
	
		
			211 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			211 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
#!/usr/bin/env bash
 | 
						|
# Clock tests
 | 
						|
#
 | 
						|
# Copyright (C) 2012-2018 Nirenjan Krishnan (nirenjan@nirenjan.org)
 | 
						|
#
 | 
						|
# SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0
 | 
						|
 | 
						|
source $(dirname $0)/../common_infra.sh
 | 
						|
 | 
						|
TEST_SUITE_ID="libx52 clock tests"
 | 
						|
 | 
						|
clock_test_utc()
 | 
						|
{
 | 
						|
    local timezone=$1
 | 
						|
    local time_format=$2
 | 
						|
    local date_format=$3
 | 
						|
    TEST_ID="Test setting clock to $timezone time, $time_format, $date_format"
 | 
						|
 | 
						|
    local dd=$(date +%_d)
 | 
						|
    local mm=$(date +%_m)
 | 
						|
    local yy=$(date +%_y)
 | 
						|
    local hr=$(date +%_H)
 | 
						|
    local mn=$(date +%_M)
 | 
						|
 | 
						|
    local clock_value=$(($hr * 256 + $mn))
 | 
						|
    if [[ $time_format == 24hr ]]
 | 
						|
    then
 | 
						|
        clock_value=$(($clock_value + 32768))
 | 
						|
    fi
 | 
						|
 | 
						|
    case $date_format in
 | 
						|
    ddmmyy)
 | 
						|
        date_value=$(($mm * 256 + $dd))
 | 
						|
        year_value=$yy
 | 
						|
        ;;
 | 
						|
    mmddyy)
 | 
						|
        date_value=$(($dd * 256 + $mm))
 | 
						|
        year_value=$yy
 | 
						|
        ;;
 | 
						|
    yymmdd)
 | 
						|
        date_value=$(($mm * 256 + $yy))
 | 
						|
        year_value=$dd
 | 
						|
        ;;
 | 
						|
    *)
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
 | 
						|
    expect_pattern \
 | 
						|
        $X52_CLOCK_DATE_INDEX $(printf '%04x' $date_value) \
 | 
						|
        $X52_CLOCK_YEAR_INDEX $(printf '%04x' $year_value) \
 | 
						|
        $X52_CLOCK_1_INDEX $(printf '%04x' $clock_value) \
 | 
						|
 | 
						|
    $X52CLI clock $timezone $time_format $date_format
 | 
						|
 | 
						|
    verify_output
 | 
						|
}
 | 
						|
 | 
						|
offset_test()
 | 
						|
{
 | 
						|
    local clock_id=$1
 | 
						|
    local offset=$2
 | 
						|
    local time_format=$3
 | 
						|
    TEST_ID="Test setting clock $clock_id offset to $offset, $time_format"
 | 
						|
 | 
						|
    local index="\$X52_CLOCK_${clock_id}_INDEX"
 | 
						|
    local value=0
 | 
						|
 | 
						|
    # Handle negative case
 | 
						|
    if [[ $offset -lt 0 ]]
 | 
						|
    then
 | 
						|
        value=$((-$offset))
 | 
						|
        value=$(($value & 0x3ff))
 | 
						|
        value=$(($value | 1024))
 | 
						|
    else
 | 
						|
        value=$offset
 | 
						|
    fi
 | 
						|
 | 
						|
    if [[ $time_format == 24hr ]]
 | 
						|
    then
 | 
						|
        value=$(($value + 32768))
 | 
						|
    fi
 | 
						|
 | 
						|
    expect_pattern $(eval echo $index) $(printf '%04x' $value)
 | 
						|
 | 
						|
    $X52CLI offset $clock_id $offset $time_format
 | 
						|
 | 
						|
    verify_output
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
raw_time_test()
 | 
						|
{
 | 
						|
    local hh=$1
 | 
						|
    local mm=$2
 | 
						|
    local time_format=$3
 | 
						|
    TEST_ID=$(printf "Test setting time to %02d:%02d, %s" $hh $mm $time_format)
 | 
						|
 | 
						|
    local value=$(($hh * 256 + $mm))
 | 
						|
    if [[ $time_format == 24hr ]]
 | 
						|
    then
 | 
						|
        value=$((value + 32768))
 | 
						|
    fi
 | 
						|
 | 
						|
    expect_pattern $X52_CLOCK_1_INDEX $(printf '%04x' $value)
 | 
						|
 | 
						|
    $X52CLI time $hh $mm $time_format
 | 
						|
 | 
						|
    verify_output
 | 
						|
}
 | 
						|
 | 
						|
raw_date_test()
 | 
						|
{
 | 
						|
    local dd=$1
 | 
						|
    local mm=$2
 | 
						|
    local yy=$3
 | 
						|
    local date_format=$4
 | 
						|
 | 
						|
    case "$date_format" in
 | 
						|
    ddmmyy)
 | 
						|
        dd1=$dd
 | 
						|
        mm1=$mm
 | 
						|
        yy1=$yy
 | 
						|
        ;;
 | 
						|
    mmddyy)
 | 
						|
        dd1=$mm
 | 
						|
        mm1=$dd
 | 
						|
        yy1=$yy
 | 
						|
        ;;
 | 
						|
    yymmdd)
 | 
						|
        dd1=$yy
 | 
						|
        mm1=$mm
 | 
						|
        yy1=$dd
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
 | 
						|
    TEST_ID=$(printf "Test setting date in %s format to %02d-%02d-%02d" $date_format $dd1 $mm1 $yy1)
 | 
						|
 | 
						|
    local date_value=$(printf '%04x' $(($mm1 * 256 + $dd1)))
 | 
						|
    local year_value=$(printf '%04x' $yy1)
 | 
						|
 | 
						|
    expect_pattern \
 | 
						|
        $X52_CLOCK_DATE_INDEX $date_value \
 | 
						|
        $X52_CLOCK_YEAR_INDEX $year_value
 | 
						|
 | 
						|
    $X52CLI date $dd $mm $yy $date_format
 | 
						|
 | 
						|
    verify_output
 | 
						|
}
 | 
						|
 | 
						|
# For all test cases, we want to assume that the local timezone
 | 
						|
# is the same as UTC, as otherwise, it can cause havoc, depending
 | 
						|
# on when and where the tests are run.
 | 
						|
export TZ=UTC
 | 
						|
 | 
						|
for timezone in 'local' gmt
 | 
						|
do
 | 
						|
    for time_format in 12hr 24hr
 | 
						|
    do
 | 
						|
        for date_format in ddmmyy mmddyy yymmdd
 | 
						|
        do
 | 
						|
            clock_test_utc $timezone $time_format $date_format
 | 
						|
        done
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
# For the offset test cases, x52cli reinitializes the internal data
 | 
						|
# structure every time it is called, therefore, the timezone for clock
 | 
						|
# 1 is automatically reset to UTC.
 | 
						|
unset TZ
 | 
						|
 | 
						|
for clock in 2 3
 | 
						|
do
 | 
						|
    for time_format in 12hr 24hr
 | 
						|
    do
 | 
						|
        # Run offset tests for every 30 minute offset from UTC
 | 
						|
        for offset in $(seq -1020 30 1020)
 | 
						|
        do
 | 
						|
            offset_test $clock $offset $time_format
 | 
						|
        done
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
# The raw time test cases are a limited set of tests, it simply runs for
 | 
						|
# every minute from 00:00 through 00:59, then it runs for every hour from
 | 
						|
# 00:00 through 23:00. The tests are run in both 12 hour and 24 hour mode.
 | 
						|
for mm in $(seq 0 59)
 | 
						|
do
 | 
						|
    for time_format in 12hr 24hr
 | 
						|
    do
 | 
						|
        raw_time_test 0 $mm $time_format
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
for hh in $(seq 0 23)
 | 
						|
do
 | 
						|
    for time_format in 12hr 24hr
 | 
						|
    do
 | 
						|
        raw_time_test $hh 0 $time_format
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
# The raw date tests simply verify that the date February 1, year 3 is
 | 
						|
# displayed correctly in all 3 date formats
 | 
						|
for date_format in ddmmyy mmddyy yymmdd
 | 
						|
do
 | 
						|
    raw_date_test 1 2 3 $date_format
 | 
						|
done
 | 
						|
 | 
						|
verify_test_suite
 | 
						|
 |