|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
text: Test text transformations in libmpg123 (conversion to UTF-8).
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
Packit |
c32a2d |
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
Packit |
c32a2d |
initially written by Thomas Orgis
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
arguments: decoder testfile.mpeg
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include <mpg123.h>
|
|
Packit |
c32a2d |
#include <compat.h>
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include "testtext.h"
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int string_good(mpg123_string *sb)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
/* Let's accept additional null bytes... */
|
|
Packit |
c32a2d |
if(sb->fill >= sizeof(utf8) && memcmp(utf8, sb->p, sizeof(utf8)) == 0
|
|
Packit |
c32a2d |
&& (sb->fill <= sizeof(utf8) || sb->p[sizeof(utf8)] == 0) )
|
|
Packit |
c32a2d |
return 1;
|
|
Packit |
c32a2d |
else
|
|
Packit |
c32a2d |
return 0;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int check_string(const char* name, enum mpg123_text_encoding enc, const unsigned char* source, size_t source_size)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
int ret = 0;
|
|
Packit |
c32a2d |
mpg123_string sb;
|
|
Packit |
c32a2d |
mpg123_init_string(&sb);
|
|
Packit |
c32a2d |
printf("Conversion of %s: ", name);
|
|
Packit |
c32a2d |
if( mpg123_store_utf8(&sb, enc, source, source_size)
|
|
Packit |
c32a2d |
&& string_good(&sb) )
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
printf("PASS\n");
|
|
Packit |
c32a2d |
ret = 0;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
else
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
printf("FAIL (%"SIZE_P" vs. %"SIZE_P")\n", (size_p)sb.fill, (size_p)sizeof(utf8));
|
|
Packit |
c32a2d |
ret = 1;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123_free_string(&sb);
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* We test: latin1, cp1252, utf8 and all of utf16be/le with and without BOM.
|
|
Packit |
c32a2d |
Everything should succeed -- except utf16le without BOM. */
|
|
Packit |
c32a2d |
int main()
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
int ret = 0;
|
|
Packit |
c32a2d |
mpg123_string trans_utf16le;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123_init_string(&trans_utf16le);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* First, all conversions that should work. */
|
|
Packit |
c32a2d |
ret += check_string("latin1", mpg123_text_latin1, latin1, sizeof(latin1));
|
|
Packit |
c32a2d |
ret += check_string("cp1252", mpg123_text_cp1252, cp1252, sizeof(cp1252));
|
|
Packit |
c32a2d |
ret += check_string("utf8", mpg123_text_utf8, utf8, sizeof(utf8));
|
|
Packit |
c32a2d |
ret += check_string("utf16bom_be", mpg123_text_utf16bom, utf16bom_be, sizeof(utf16bom_be));
|
|
Packit |
c32a2d |
ret += check_string("utf16bom_le", mpg123_text_utf16, utf16bom_le, sizeof(utf16bom_le));
|
|
Packit |
c32a2d |
ret += check_string("utf16be", mpg123_text_utf16be, utf16be, sizeof(utf16be));
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Now test the non-supported string. */
|
|
Packit |
c32a2d |
printf("Let's see what happens with a non-BOM little endian UTF-16 string: ");
|
|
Packit |
c32a2d |
mpg123_store_utf8(&trans_utf16le, mpg123_text_utf16, utf16le, sizeof(utf16le));
|
|
Packit |
c32a2d |
if(string_good(&trans_utf16le))
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
++ret;
|
|
Packit |
c32a2d |
printf("FAIL\n");
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
else printf("PASS\n");
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123_free_string(&trans_utf16le);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
printf("\n%s\n", ret == 0 ? "PASS" : "FAIL");
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|