2013-09-17 23:39:09 +04:00
/***
This file is part of systemd .
Copyright 2013 Dave Reisner
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2015-10-27 05:01:06 +03:00
# include "alloc-util.h"
2015-11-17 00:09:36 +03:00
# include "string-util.h"
2013-09-17 23:39:09 +04:00
# include "utf8.h"
# include "util.h"
2013-09-18 19:52:14 +04:00
static void test_utf8_is_printable ( void ) {
assert_se ( utf8_is_printable ( " ascii is valid \t unicode " , 22 ) ) ;
assert_se ( utf8_is_printable ( " \342 \204 \242 " , 3 ) ) ;
assert_se ( ! utf8_is_printable ( " \341 \204 " , 2 ) ) ;
2013-10-06 06:47:52 +04:00
assert_se ( utf8_is_printable ( " ąę " , 4 ) ) ;
2013-09-18 19:52:14 +04:00
}
2013-09-17 23:39:09 +04:00
static void test_utf8_is_valid ( void ) {
assert_se ( utf8_is_valid ( " ascii is valid unicode " ) ) ;
2013-09-18 20:12:04 +04:00
assert_se ( utf8_is_valid ( " \342 \204 \242 " ) ) ;
2013-09-17 23:39:09 +04:00
assert_se ( ! utf8_is_valid ( " \341 \204 " ) ) ;
}
2013-09-18 20:32:23 +04:00
static void test_ascii_is_valid ( void ) {
assert_se ( ascii_is_valid ( " alsdjf \t \v barr \n ba z " ) ) ;
assert_se ( ! ascii_is_valid ( " \342 \204 \242 " ) ) ;
assert_se ( ! ascii_is_valid ( " \341 \204 " ) ) ;
}
static void test_utf8_encoded_valid_unichar ( void ) {
assert_se ( utf8_encoded_valid_unichar ( " \342 \204 \242 " ) = = 3 ) ;
assert_se ( utf8_encoded_valid_unichar ( " \302 \256 " ) = = 2 ) ;
assert_se ( utf8_encoded_valid_unichar ( " a " ) = = 1 ) ;
assert_se ( utf8_encoded_valid_unichar ( " \341 \204 " ) < 0 ) ;
assert_se ( utf8_encoded_valid_unichar ( " \341 \204 \341 \204 " ) < 0 ) ;
}
2014-01-18 06:28:41 +04:00
static void test_utf8_escaping ( void ) {
_cleanup_free_ char * p1 , * p2 , * p3 ;
p1 = utf8_escape_invalid ( " goo goo goo " ) ;
puts ( p1 ) ;
assert_se ( utf8_is_valid ( p1 ) ) ;
p2 = utf8_escape_invalid ( " \341 \204 \341 \204 " ) ;
puts ( p2 ) ;
assert_se ( utf8_is_valid ( p2 ) ) ;
p3 = utf8_escape_invalid ( " \341 \204 " ) ;
puts ( p3 ) ;
assert_se ( utf8_is_valid ( p3 ) ) ;
}
2014-11-12 13:49:31 +03:00
static void test_utf8_escaping_printable ( void ) {
2014-12-04 04:27:14 +03:00
_cleanup_free_ char * p1 , * p2 , * p3 , * p4 , * p5 , * p6 ;
2014-11-12 13:49:31 +03:00
p1 = utf8_escape_non_printable ( " goo goo goo " ) ;
puts ( p1 ) ;
assert_se ( utf8_is_valid ( p1 ) ) ;
p2 = utf8_escape_non_printable ( " \341 \204 \341 \204 " ) ;
puts ( p2 ) ;
assert_se ( utf8_is_valid ( p2 ) ) ;
p3 = utf8_escape_non_printable ( " \341 \204 " ) ;
puts ( p3 ) ;
assert_se ( utf8_is_valid ( p3 ) ) ;
p4 = utf8_escape_non_printable ( " ąę \n 가너도루 \n 1234 \n \341 \204 \341 \204 \n \001 \01 9 \20 \a " ) ;
puts ( p4 ) ;
assert_se ( utf8_is_valid ( p4 ) ) ;
p5 = utf8_escape_non_printable ( " \001 \01 9 \20 \a " ) ;
puts ( p5 ) ;
assert_se ( utf8_is_valid ( p5 ) ) ;
2014-12-04 04:27:14 +03:00
p6 = utf8_escape_non_printable ( " \xef \xbf \x30 \x13 " ) ;
puts ( p6 ) ;
assert_se ( utf8_is_valid ( p6 ) ) ;
2014-11-12 13:49:31 +03:00
}
2014-12-22 14:57:05 +03:00
static void test_utf16_to_utf8 ( void ) {
char * a = NULL ;
2015-02-18 16:33:50 +03:00
const uint16_t utf16 [ ] = { htole16 ( ' a ' ) , htole16 ( 0xd800 ) , htole16 ( ' b ' ) , htole16 ( 0xdc00 ) , htole16 ( ' c ' ) , htole16 ( 0xd801 ) , htole16 ( 0xdc37 ) } ;
2014-12-22 14:57:05 +03:00
const char utf8 [ ] = { ' a ' , ' b ' , ' c ' , 0xf0 , 0x90 , 0x90 , 0xb7 , 0 } ;
a = utf16_to_utf8 ( utf16 , 14 ) ;
assert_se ( a ) ;
assert_se ( streq ( a , utf8 ) ) ;
free ( a ) ;
}
2013-09-17 23:39:09 +04:00
int main ( int argc , char * argv [ ] ) {
test_utf8_is_valid ( ) ;
2013-09-18 19:52:14 +04:00
test_utf8_is_printable ( ) ;
2013-09-18 20:32:23 +04:00
test_ascii_is_valid ( ) ;
test_utf8_encoded_valid_unichar ( ) ;
2014-01-18 06:28:41 +04:00
test_utf8_escaping ( ) ;
2014-11-12 13:49:31 +03:00
test_utf8_escaping_printable ( ) ;
2014-12-22 14:57:05 +03:00
test_utf16_to_utf8 ( ) ;
2013-09-18 19:52:14 +04:00
return 0 ;
2013-09-17 23:39:09 +04:00
}