From c9b6bb6a9bd2020f9b5a466c993e8c761466ec7e Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Wed, 8 May 2019 20:33:41 +0200 Subject: [PATCH 01/17] add create_context() function --- tests/stress.rs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index 09288324f..cd67fd78e 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -4467,18 +4467,20 @@ unsafe fn stress_functions(context: &dc_context_t) { }; } -unsafe extern "C" fn cb( - _context: &dc_context_t, - _event: Event, - _data1: uintptr_t, - _data2: uintptr_t, -) -> uintptr_t { - 0 -} +#[cfg(test)] +mod tests { + use super::*; -#[test] -fn run_stress_tests() { - unsafe { + unsafe extern "C" fn cb( + _context: &dc_context_t, + _event: Event, + _data1: uintptr_t, + _data2: uintptr_t, + ) -> uintptr_t { + 0 + } + + unsafe fn create_context() -> dc_context_t { let mut ctx = dc_context_new(cb, std::ptr::null_mut(), std::ptr::null_mut()); let dir = tempdir().unwrap(); let dbfile = CString::new(dir.path().join("db.sqlite").to_str().unwrap()).unwrap(); @@ -4491,6 +4493,14 @@ fn run_stress_tests() { .unwrap() ); - stress_functions(&ctx) + ctx + } + + #[test] + fn run_stress_tests() { + unsafe { + let ctx = create_context(); + stress_functions(&ctx); + } } } From e3e56d9f7ea4710785ec4d3aef15bf5ca018ef43 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Sat, 11 May 2019 17:51:35 +0200 Subject: [PATCH 02/17] Skip #[cfg(test)] and mod tests, not needed --- tests/stress.rs | 59 ++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index cd67fd78e..f8964cae7 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -4467,40 +4467,35 @@ unsafe fn stress_functions(context: &dc_context_t) { }; } -#[cfg(test)] -mod tests { - use super::*; +unsafe extern "C" fn cb( + _context: &dc_context_t, + _event: Event, + _data1: uintptr_t, + _data2: uintptr_t, +) -> uintptr_t { + 0 +} - unsafe extern "C" fn cb( - _context: &dc_context_t, - _event: Event, - _data1: uintptr_t, - _data2: uintptr_t, - ) -> uintptr_t { - 0 - } +unsafe fn create_context() -> dc_context_t { + let mut ctx = dc_context_new(cb, std::ptr::null_mut(), std::ptr::null_mut()); + let dir = tempdir().unwrap(); + let dbfile = CString::new(dir.path().join("db.sqlite").to_str().unwrap()).unwrap(); + assert_eq!( + dc_open(&mut ctx, dbfile.as_ptr(), std::ptr::null()), + 1, + "Failed to open {}", + CStr::from_ptr(dbfile.as_ptr() as *const libc::c_char) + .to_str() + .unwrap() + ); - unsafe fn create_context() -> dc_context_t { - let mut ctx = dc_context_new(cb, std::ptr::null_mut(), std::ptr::null_mut()); - let dir = tempdir().unwrap(); - let dbfile = CString::new(dir.path().join("db.sqlite").to_str().unwrap()).unwrap(); - assert_eq!( - dc_open(&mut ctx, dbfile.as_ptr(), std::ptr::null()), - 1, - "Failed to open {}", - CStr::from_ptr(dbfile.as_ptr() as *const libc::c_char) - .to_str() - .unwrap() - ); + ctx +} - ctx - } - - #[test] - fn run_stress_tests() { - unsafe { - let ctx = create_context(); - stress_functions(&ctx); - } +#[test] +fn run_stress_tests() { + unsafe { + let ctx = create_context(); + stress_functions(&ctx); } } From 3813a219e0fdf433327b5f0f5d9fcc3488f62233 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 11:45:55 +0200 Subject: [PATCH 03/17] Wrap dc_context_t and TempDir in a struct --- tests/stress.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index f8964cae7..1d7c74c8a 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -6,7 +6,7 @@ use mmime::mailimf_types::*; use mmime::mailmime_content::*; use mmime::mailmime_types::*; use mmime::other::*; -use tempfile::tempdir; +use tempfile::{tempdir, TempDir}; use deltachat::constants::*; use deltachat::dc_array::*; @@ -4476,7 +4476,13 @@ unsafe extern "C" fn cb( 0 } -unsafe fn create_context() -> dc_context_t { +#[allow(dead_code)] +struct TestContext { + ctx: dc_context_t, + dir: TempDir, +} + +unsafe fn create_test_context() -> TestContext { let mut ctx = dc_context_new(cb, std::ptr::null_mut(), std::ptr::null_mut()); let dir = tempdir().unwrap(); let dbfile = CString::new(dir.path().join("db.sqlite").to_str().unwrap()).unwrap(); @@ -4489,13 +4495,13 @@ unsafe fn create_context() -> dc_context_t { .unwrap() ); - ctx + TestContext { ctx: ctx, dir: dir } } #[test] fn run_stress_tests() { unsafe { - let ctx = create_context(); - stress_functions(&ctx); + let context = create_test_context(); + stress_functions(&context.ctx); } } From a95544c5c098c88292761a01a4c037d0b670f16b Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 13:03:41 +0200 Subject: [PATCH 04/17] test: move simplify tests to unit tests for dc_simplify.rs --- src/dc_simplify.rs | 100 +++++++++++++++++++++++++++++++++++++++++++-- tests/stress.rs | 69 ------------------------------- 2 files changed, 96 insertions(+), 73 deletions(-) diff --git a/src/dc_simplify.rs b/src/dc_simplify.rs index eb5de28b9..9d70afe84 100644 --- a/src/dc_simplify.rs +++ b/src/dc_simplify.rs @@ -73,9 +73,9 @@ pub unsafe fn dc_simplify_simplify( out } -/* ****************************************************************************** +/** * Simplify Plain Text - ******************************************************************************/ + */ unsafe fn dc_simplify_simplify_plain_text( mut simplify: *mut dc_simplify_t, buf_terminated: *const libc::c_char, @@ -250,9 +250,9 @@ unsafe fn dc_simplify_simplify_plain_text( ret.buf } -/* ****************************************************************************** +/** * Tools - ******************************************************************************/ + */ unsafe fn is_empty_line(buf: *const libc::c_char) -> bool { /* force unsigned - otherwise the `> ' '` comparison will fail */ let mut p1: *const libc::c_uchar = buf as *const libc::c_uchar; @@ -289,3 +289,95 @@ unsafe fn is_plain_quote(buf: *const libc::c_char) -> bool { false } + +#[cfg(test)] +mod tests { + use super::*; + use std::ffi::CStr; + + #[test] + fn test_simplify_trim() { + unsafe { + let simplify: *mut dc_simplify_t = dc_simplify_new(); + let html: *const libc::c_char = + b"\r\r\nline1
\r\n\r\n\r\rline2\n\r\x00" as *const u8 as *const libc::c_char; + let plain: *mut libc::c_char = + dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1, 0); + + assert_eq!( + CStr::from_ptr(plain as *const libc::c_char) + .to_str() + .unwrap(), + "line1\nline2", + ); + + free(plain as *mut libc::c_void); + dc_simplify_unref(simplify); + } + } + + #[test] + fn test_simplify_parse_href() { + unsafe { + let simplify: *mut dc_simplify_t = dc_simplify_new(); + let html: *const libc::c_char = + b"text]>text bold]]>\x00" + as *const u8 as *const libc::c_char; + let plain: *mut libc::c_char = + dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1, 0); + + assert_eq!( + CStr::from_ptr(plain as *const libc::c_char) + .to_str() + .unwrap(), + "text *bold*<>", + ); + + free(plain as *mut libc::c_void); + dc_simplify_unref(simplify); + } + } + + #[test] + fn test_simplify_html_encoded() { + unsafe { + let simplify: *mut dc_simplify_t = dc_simplify_new(); + let html: *const libc::c_char = + b"<>"'& äÄöÖüÜß fooÆçÇ ♦&noent;‎‏‌‍\x00" + as *const u8 as *const libc::c_char; + let plain: *mut libc::c_char = + dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1, 0); + + assert_eq!( + strcmp(plain, + b"<>\"\'& \xc3\xa4\xc3\x84\xc3\xb6\xc3\x96\xc3\xbc\xc3\x9c\xc3\x9f foo\xc3\x86\xc3\xa7\xc3\x87 \xe2\x99\xa6&noent;\x00" + as *const u8 as *const libc::c_char), + 0, + ); + + free(plain as *mut libc::c_void); + dc_simplify_unref(simplify); + } + } +} diff --git a/tests/stress.rs b/tests/stress.rs index 1d7c74c8a..8b439fb47 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -26,7 +26,6 @@ use deltachat::dc_pgp::*; use deltachat::dc_qr::*; use deltachat::dc_saxparser::*; use deltachat::dc_securejoin::*; -use deltachat::dc_simplify::*; use deltachat::dc_strbuilder::*; use deltachat::dc_strencode::*; use deltachat::dc_tools::*; @@ -61,74 +60,6 @@ unsafe fn stress_functions(context: &dc_context_t) { b"\r\n\r\n\r\rline2\n\r\x00" as *const u8 as *const libc::c_char; - let mut plain: *mut libc::c_char = - dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1i32, 0i32); - - assert_eq!( - CStr::from_ptr(plain as *const libc::c_char) - .to_str() - .unwrap(), - "line1\nline2", - ); - free(plain as *mut libc::c_void); - - html = b"text(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 179i32, - b"strcmp(plain, \"[text](url)\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(plain as *mut libc::c_void); - html = - b"]>text bold]]>\x00" - as *const u8 as *const libc::c_char; - plain = dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1i32, 0i32); - if 0 != !(strcmp( - plain, - b"text *bold*<>\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 184i32, - b"strcmp(plain, \"text *bold*<>\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(plain as *mut libc::c_void); - html = - b"<>"'& äÄöÖüÜß fooÆçÇ ♦&noent;‎‏‌‍\x00" - as *const u8 as *const libc::c_char; - plain = dc_simplify_simplify(simplify, html, strlen(html) as libc::c_int, 1i32, 0i32); - if 0 != - !(strcmp(plain, - b"<>\"\'& \xc3\xa4\xc3\x84\xc3\xb6\xc3\x96\xc3\xbc\xc3\x9c\xc3\x9f foo\xc3\x86\xc3\xa7\xc3\x87 \xe2\x99\xa6&noent;\x00" - as *const u8 as *const libc::c_char) == 0i32) as - libc::c_int as libc::c_long { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 189i32, - b"strcmp(plain, \"<>\\\"\'& \xc3\xa4\xc3\x84\xc3\xb6\xc3\x96\xc3\xbc\xc3\x9c\xc3\x9f foo\xc3\x86\xc3\xa7\xc3\x87 \xe2\x99\xa6&noent;\")==0\x00" - as *const u8 as *const libc::c_char); - } else { }; - free(plain as *mut libc::c_void); - dc_simplify_unref(simplify); let xml: *const libc::c_char = b"\n\n\n2019-03-06T21:09:57Z9.423110,53.790302\n\n \n\t2018-12-13T22:11:12Z\t 19.423110 \t , \n 63.790302\n \n\n\x00" as *const u8 as *const libc::c_char; From ec570ead35763a47f4bae2ddc189996f4ed006f0 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 13:35:58 +0200 Subject: [PATCH 05/17] test: move dc_kml_parse() to separate test --- tests/stress.rs | 166 ++++++++++++------------------------------------ 1 file changed, 42 insertions(+), 124 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index 8b439fb47..0d6adcc76 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -60,129 +60,6 @@ unsafe fn stress_functions(context: &dc_context_t) { b"\n\n\n2019-03-06T21:09:57Z9.423110,53.790302\n\n \n\t2018-12-13T22:11:12Z\t 19.423110 \t , \n 63.790302\n \n\n\x00" - as *const u8 as *const libc::c_char; - let kml: *mut dc_kml_t = dc_kml_parse(context, xml, strlen(xml)); - if 0 != !(!(*kml).addr.is_null() - && strcmp( - (*kml).addr, - b"user@example.org\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 205i32, - b"kml->addr && strcmp(kml->addr, \"user@example.org\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(dc_array_get_cnt((*kml).locations) == 2) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 206i32, - b"dc_array_get_cnt(kml->locations)==2\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let mut lat: libc::c_double = dc_array_get_latitude((*kml).locations, 0i32 as size_t); - if 0 != !(lat > 53.6f64 && lat < 53.8f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 208i32, - b"lat>53.6 && lat<53.8\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let mut lng: libc::c_double = dc_array_get_longitude((*kml).locations, 0i32 as size_t); - if 0 != !(lng > 9.3f64 && lng < 9.5f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 209i32, - b"lng> 9.3 && lng< 9.5\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let mut acc: libc::c_double = dc_array_get_accuracy((*kml).locations, 0i32 as size_t); - if 0 != !(acc > 31.9f64 && acc < 32.1f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 210i32, - b"acc>31.9 && acc<32.1\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(dc_array_get_timestamp((*kml).locations, 0i32 as size_t) - == 1551906597i32 as libc::c_long) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 211i32, - b"dc_array_get_timestamp(kml->locations, 0)==1551906597\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - lat = dc_array_get_latitude((*kml).locations, 1i32 as size_t); - if 0 != !(lat > 63.6f64 && lat < 63.8f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 213i32, - b"lat>63.6 && lat<63.8\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - lng = dc_array_get_longitude((*kml).locations, 1i32 as size_t); - if 0 != !(lng > 19.3f64 && lng < 19.5f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 214i32, - b"lng>19.3 && lng<19.5\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - acc = dc_array_get_accuracy((*kml).locations, 1i32 as size_t); - if 0 != !(acc > 2.4f64 && acc < 2.6f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 215i32, - b"acc> 2.4 && acc< 2.6\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(dc_array_get_timestamp((*kml).locations, 1i32 as size_t) - == 1544739072i32 as libc::c_long) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 216i32, - b"dc_array_get_timestamp(kml->locations, 1)==1544739072\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - dc_kml_unref(kml); if 0 != dc_is_open(context) { if 0 != dc_file_exist( context, @@ -4430,7 +4307,48 @@ unsafe fn create_test_context() -> TestContext { } #[test] -fn run_stress_tests() { +fn test_dc_kml_parse() { + unsafe { + let context = create_test_context(); + + let xml: *const libc::c_char = + b"\n\n\n2019-03-06T21:09:57Z9.423110,53.790302\n\n \n\t2018-12-13T22:11:12Z\t 19.423110 \t , \n 63.790302\n \n\n\x00" + as *const u8 as *const libc::c_char; + + let kml: *mut dc_kml_t = dc_kml_parse(&context.ctx, xml, strlen(xml)); + + assert!(!(*kml).addr.is_null()); + assert_eq!( + CStr::from_ptr((*kml).addr as *const libc::c_char) + .to_str() + .unwrap(), + "user@example.org", + ); + + assert_eq!(dc_array_get_cnt((*kml).locations), 2); + + assert!(dc_array_get_latitude((*kml).locations, 0) > 53.6f64); + assert!(dc_array_get_latitude((*kml).locations, 0) < 53.8f64); + assert!(dc_array_get_longitude((*kml).locations, 0) > 9.3f64); + assert!(dc_array_get_longitude((*kml).locations, 0) < 9.5f64); + assert!(dc_array_get_accuracy((*kml).locations, 0) > 31.9f64); + assert!(dc_array_get_accuracy((*kml).locations, 0) < 32.1f64); + assert_eq!(dc_array_get_timestamp((*kml).locations, 0), 1551906597); + + assert!(dc_array_get_latitude((*kml).locations, 1) > 63.6f64); + assert!(dc_array_get_latitude((*kml).locations, 1) < 63.8f64); + assert!(dc_array_get_longitude((*kml).locations, 1) > 19.3f64); + assert!(dc_array_get_longitude((*kml).locations, 1) < 19.5f64); + assert!(dc_array_get_accuracy((*kml).locations, 1) > 2.4f64); + assert!(dc_array_get_accuracy((*kml).locations, 1) < 2.6f64); + assert_eq!(dc_array_get_timestamp((*kml).locations, 1), 1544739072); + + dc_kml_unref(kml); + } +} + +#[test] +fn test_stress_tests() { unsafe { let context = create_test_context(); stress_functions(&context.ctx); From 5ccc68bbfa67c832342abfe054ca005a6a9e3df5 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 14:24:32 +0200 Subject: [PATCH 06/17] test: move mime parsing unit tests to dc_mimeparser.rs --- src/dc_mimeparser.rs | 79 +++++++++++++++++++++++ tests/stress.rs | 148 +------------------------------------------ 2 files changed, 81 insertions(+), 146 deletions(-) diff --git a/src/dc_mimeparser.rs b/src/dc_mimeparser.rs index 7bcefef00..a7ce75586 100644 --- a/src/dc_mimeparser.rs +++ b/src/dc_mimeparser.rs @@ -1966,3 +1966,82 @@ pub unsafe fn mailimf_find_optional_field( 0 as *mut mailimf_optional_field } + +#[cfg(test)] +mod tests { + use super::*; + use std::ffi::CStr; + + #[test] + fn test_mailmime_parse() { + unsafe { + let txt: *const libc::c_char = + b"FieldA: ValueA\nFieldB: ValueB\n\x00" as *const u8 as *const libc::c_char; + let mut mime: *mut mailmime = 0 as *mut mailmime; + let mut dummy: size_t = 0i32 as size_t; + let res = mailmime_parse(txt, strlen(txt), &mut dummy, &mut mime); + + assert_eq!(res, MAIL_NO_ERROR as libc::c_int); + assert!(!mime.is_null()); + + let fields: *mut mailimf_fields = mailmime_find_mailimf_fields(mime); + assert!(!fields.is_null()); + + let mut of_a: *mut mailimf_optional_field = mailimf_find_optional_field( + fields, + b"fielda\x00" as *const u8 as *const libc::c_char, + ); + + assert!(!of_a.is_null()); + assert!(!(*of_a).fld_value.is_null()); + assert_eq!( + CStr::from_ptr((*of_a).fld_name as *const libc::c_char) + .to_str() + .unwrap(), + "FieldA", + ); + assert_eq!( + CStr::from_ptr((*of_a).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "ValueA", + ); + + of_a = mailimf_find_optional_field( + fields, + b"FIELDA\x00" as *const u8 as *const libc::c_char, + ); + + assert!(!of_a.is_null()); + assert!(!(*of_a).fld_value.is_null()); + assert_eq!( + CStr::from_ptr((*of_a).fld_name as *const libc::c_char) + .to_str() + .unwrap(), + "FieldA", + ); + assert_eq!( + CStr::from_ptr((*of_a).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "ValueA", + ); + + let of_b: *mut mailimf_optional_field = mailimf_find_optional_field( + fields, + b"FieldB\x00" as *const u8 as *const libc::c_char, + ); + + assert!(!of_b.is_null()); + assert!(!(*of_b).fld_value.is_null()); + assert_eq!( + CStr::from_ptr((*of_b).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "ValueB", + ); + + mailmime_free(mime); + } + } +} diff --git a/tests/stress.rs b/tests/stress.rs index 0d6adcc76..21ddaba94 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -3,8 +3,6 @@ use std::ffi::{CStr, CString}; use mmime::mailimf_types::*; -use mmime::mailmime_content::*; -use mmime::mailmime_types::*; use mmime::other::*; use tempfile::{tempdir, TempDir}; @@ -417,150 +415,7 @@ unsafe fn stress_functions(context: &dc_context_t) { free(fn0 as *mut libc::c_void); free(fn1 as *mut libc::c_void); } - let txt: *const libc::c_char = - b"FieldA: ValueA\nFieldB: ValueB\n\x00" as *const u8 as *const libc::c_char; - let mut mime: *mut mailmime = 0 as *mut mailmime; - let mut dummy: size_t = 0i32 as size_t; - if 0 != !(mailmime_parse(txt, strlen(txt), &mut dummy, &mut mime) - == MAIL_NO_ERROR as libc::c_int) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 286i32, - b"mailmime_parse(txt, strlen(txt), &dummy, &mime) == MAIL_NO_ERROR\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != mime.is_null() as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 287i32, - b"mime != NULL\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let fields: *mut mailimf_fields = mailmime_find_mailimf_fields(mime); - if 0 != fields.is_null() as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 290i32, - b"fields != NULL\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let mut of_a: *mut mailimf_optional_field = - mailimf_find_optional_field(fields, b"fielda\x00" as *const u8 as *const libc::c_char); - if 0 != !(!of_a.is_null() && !(*of_a).fld_value.is_null()) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 293i32, - b"of_a && of_a->fld_value\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - (*of_a).fld_name, - b"FieldA\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 294i32, - b"strcmp(of_a->fld_name, \"FieldA\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - (*of_a).fld_value, - b"ValueA\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 295i32, - b"strcmp(of_a->fld_value, \"ValueA\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - of_a = mailimf_find_optional_field(fields, b"FIELDA\x00" as *const u8 as *const libc::c_char); - if 0 != !(!of_a.is_null() && !(*of_a).fld_value.is_null()) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 298i32, - b"of_a && of_a->fld_value\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - (*of_a).fld_name, - b"FieldA\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 299i32, - b"strcmp(of_a->fld_name, \"FieldA\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - (*of_a).fld_value, - b"ValueA\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 300i32, - b"strcmp(of_a->fld_value, \"ValueA\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let of_b: *mut mailimf_optional_field = - mailimf_find_optional_field(fields, b"FieldB\x00" as *const u8 as *const libc::c_char); - if 0 != !(!of_b.is_null() && !(*of_b).fld_value.is_null()) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 303i32, - b"of_b && of_b->fld_value\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - (*of_b).fld_value, - b"ValueB\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 304i32, - b"strcmp(of_b->fld_value, \"ValueB\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - mailmime_free(mime); + let mimeparser: *mut dc_mimeparser_t = dc_mimeparser_new(context); let raw: *const libc::c_char = b"Content-Type: multipart/mixed; boundary=\"==break==\";\nSubject: outer-subject\nX-Special-A: special-a\nFoo: Bar\nChat-Version: 0.0\n\n--==break==\nContent-Type: text/plain; protected-headers=\"v1\";\nSubject: inner-subject\nX-Special-B: special-b\nFoo: Xy\nChat-Version: 1.0\n\ntest1\n\n--==break==--\n\n\x00" @@ -4341,6 +4196,7 @@ fn test_dc_kml_parse() { assert!(dc_array_get_longitude((*kml).locations, 1) < 19.5f64); assert!(dc_array_get_accuracy((*kml).locations, 1) > 2.4f64); assert!(dc_array_get_accuracy((*kml).locations, 1) < 2.6f64); + assert_eq!(dc_array_get_timestamp((*kml).locations, 1), 1544739072); dc_kml_unref(kml); From 26d6e41c7dd6d4ac0512c77dcbabdc48369110a8 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 14:43:41 +0200 Subject: [PATCH 07/17] test: move dc_may_be_valid_addr tests to dc_contact.rs --- src/dc_contact.rs | 58 ++++++++++++++++- tests/stress.rs | 156 +--------------------------------------------- 2 files changed, 58 insertions(+), 156 deletions(-) diff --git a/src/dc_contact.rs b/src/dc_contact.rs index f786a3f72..1762ac468 100644 --- a/src/dc_contact.rs +++ b/src/dc_contact.rs @@ -45,7 +45,7 @@ pub unsafe fn dc_marknoticed_contact(context: &dc_context_t, contact_id: uint32_ ); } -// handle contacts +/// Returns false if addr is an invalid address, otherwise true. pub unsafe fn dc_may_be_valid_addr(addr: *const libc::c_char) -> bool { if addr.is_null() { return false; @@ -1259,3 +1259,59 @@ pub unsafe fn dc_scaleup_contact_origin( sqlite3_step(stmt); sqlite3_finalize(stmt); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_dc_may_be_valid_addr() { + unsafe { + assert_eq!(dc_may_be_valid_addr(0 as *const libc::c_char), false); + assert_eq!( + dc_may_be_valid_addr(b"\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"user@domain.tld\x00" as *const u8 as *const libc::c_char), + true + ); + assert_eq!( + dc_may_be_valid_addr(b"uuu\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"dd.tt\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"tt.dd@uu\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"u@d\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"u@d.\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"u@d.t\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"u@d.tt\x00" as *const u8 as *const libc::c_char), + true + ); + assert_eq!( + dc_may_be_valid_addr(b"u@.tt\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_may_be_valid_addr(b"@d.tt\x00" as *const u8 as *const libc::c_char), + false + ); + } + } +} diff --git a/tests/stress.rs b/tests/stress.rs index 21ddaba94..3e3112304 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -9,7 +9,6 @@ use tempfile::{tempdir, TempDir}; use deltachat::constants::*; use deltachat::dc_array::*; use deltachat::dc_configure::*; -use deltachat::dc_contact::*; use deltachat::dc_context::*; use deltachat::dc_hash::*; use deltachat::dc_imex::*; @@ -592,160 +591,7 @@ unsafe fn stress_functions(context: &dc_context_t) { } else { }; free(s as *mut libc::c_void); - if 0 != (dc_may_be_valid_addr(0 as *const libc::c_char)) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 380i32, - b"!dc_may_be_valid_addr(NULL)\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 381i32, - b"!dc_may_be_valid_addr(\"\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (!dc_may_be_valid_addr(b"user@domain.tld\x00" as *const u8 as *const libc::c_char)) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 382i32, - b"dc_may_be_valid_addr(\"user@domain.tld\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"uuu\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 383i32, - b"!dc_may_be_valid_addr(\"uuu\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"dd.tt\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 384i32, - b"!dc_may_be_valid_addr(\"dd.tt\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"tt.dd@uu\x00" as *const u8 as *const libc::c_char)) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 385i32, - b"!dc_may_be_valid_addr(\"tt.dd@uu\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"uu\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 386i32, - b"!dc_may_be_valid_addr(\"uu\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"u@d\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 387i32, - b"!dc_may_be_valid_addr(\"u@d\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"u@d.\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 388i32, - b"!dc_may_be_valid_addr(\"u@d.\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"u@d.t\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 389i32, - b"!dc_may_be_valid_addr(\"u@d.t\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (!dc_may_be_valid_addr(b"u@d.tt\x00" as *const u8 as *const libc::c_char)) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 390i32, - b"dc_may_be_valid_addr(\"u@d.tt\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"u@.tt\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 391i32, - b"!dc_may_be_valid_addr(\"u@.tt\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_may_be_valid_addr(b"@d.tt\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 392i32, - b"!dc_may_be_valid_addr(\"@d.tt\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; + let mut str: *mut libc::c_char = strdup(b"aaa\x00" as *const u8 as *const libc::c_char); let replacements: libc::c_int = dc_str_replace( &mut str, From 418314142444c79a4640f7ea507583475cceb413 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 14:54:06 +0200 Subject: [PATCH 08/17] test: move ato{l,i} tests to x.rs --- src/x.rs | 13 +++++++++++++ tests/stress.rs | 24 ------------------------ 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/x.rs b/src/x.rs index 9d74ddc11..282395516 100644 --- a/src/x.rs +++ b/src/x.rs @@ -76,3 +76,16 @@ pub use libc::atof; pub unsafe fn atof(nptr: *mut libc::c_char) -> libc::c_double { libc::strtod(nptr, std::ptr::null_mut()) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_atox() { + unsafe { + assert_eq!(atol(b"\x00" as *const u8 as *const libc::c_char), 0); + assert_eq!(atoi(b"\x00" as *const u8 as *const libc::c_char), 0); + } + } +} diff --git a/tests/stress.rs b/tests/stress.rs index 3e3112304..655710075 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -544,30 +544,6 @@ unsafe fn stress_functions(context: &dc_context_t) { } else { }; free(mime_0 as *mut libc::c_void); - if 0 != !(atol(b"\x00" as *const u8 as *const libc::c_char) == 0i32 as libc::c_long) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 370i32, - b"atol(\"\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(atoi(b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 371i32, - b"atoi(\"\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; let f: libc::c_double = dc_atof(b"1.23\x00" as *const u8 as *const libc::c_char); if 0 != !(f > 1.22f64 && f < 1.24f64) as libc::c_int as libc::c_long { __assert_rtn( From ab96264c1a15e50eb9334f47c7c1813aca2abf44 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 15:00:15 +0200 Subject: [PATCH 09/17] test: move dc_atof/dc_ftoa tests to dc_tools.rs --- src/dc_tools.rs | 19 +++++++++++++++++++ tests/stress.rs | 23 ----------------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/dc_tools.rs b/src/dc_tools.rs index 9075578d9..272d4f543 100644 --- a/src/dc_tools.rs +++ b/src/dc_tools.rs @@ -1704,4 +1704,23 @@ mod tests { ); } } + + #[test] + fn test_dc_atof() { + unsafe { + let f: libc::c_double = dc_atof(b"1.23\x00" as *const u8 as *const libc::c_char); + assert!(f > 1.22f64); + assert!(f < 1.24f64); + } + } + + #[test] + fn test_dc_ftoa() { + unsafe { + let s: *mut libc::c_char = dc_ftoa(1.23f64); + assert!(dc_atof(s) > 1.22f64); + assert!(dc_atof(s) < 1.24f64); + free(s as *mut libc::c_void); + } + } } diff --git a/tests/stress.rs b/tests/stress.rs index 655710075..bb406f6b0 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -544,29 +544,6 @@ unsafe fn stress_functions(context: &dc_context_t) { } else { }; free(mime_0 as *mut libc::c_void); - let f: libc::c_double = dc_atof(b"1.23\x00" as *const u8 as *const libc::c_char); - if 0 != !(f > 1.22f64 && f < 1.24f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 374i32, - b"f>1.22 && f<1.24\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let s: *mut libc::c_char = dc_ftoa(1.23f64); - if 0 != !(dc_atof(s) > 1.22f64 && dc_atof(s) < 1.24f64) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 377i32, - b"dc_atof(s)>1.22 && dc_atof(s)<1.24\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(s as *mut libc::c_void); let mut str: *mut libc::c_char = strdup(b"aaa\x00" as *const u8 as *const libc::c_char); let replacements: libc::c_int = dc_str_replace( From 986c0928010afc7693fd298b4c7ae4252e25b77a Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 16:06:32 +0200 Subject: [PATCH 10/17] test: move dc_mimeparser_parse() tests to separate test --- tests/stress.rs | 143 +++++++++++++++++++----------------------------- 1 file changed, 56 insertions(+), 87 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index bb406f6b0..8f250efa2 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -415,93 +415,6 @@ unsafe fn stress_functions(context: &dc_context_t) { free(fn1 as *mut libc::c_void); } - let mimeparser: *mut dc_mimeparser_t = dc_mimeparser_new(context); - let raw: *const libc::c_char = - b"Content-Type: multipart/mixed; boundary=\"==break==\";\nSubject: outer-subject\nX-Special-A: special-a\nFoo: Bar\nChat-Version: 0.0\n\n--==break==\nContent-Type: text/plain; protected-headers=\"v1\";\nSubject: inner-subject\nX-Special-B: special-b\nFoo: Xy\nChat-Version: 1.0\n\ntest1\n\n--==break==--\n\n\x00" - as *const u8 as *const libc::c_char; - dc_mimeparser_parse(mimeparser, raw, strlen(raw)); - if 0 != !(strcmp( - (*mimeparser).subject, - b"inner-subject\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 336i32, - b"strcmp(mimeparser->subject, \"inner-subject\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - let mut of: *mut mailimf_optional_field = dc_mimeparser_lookup_optional_field( - mimeparser, - b"X-Special-A\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - (*of).fld_value, - b"special-a\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 339i32, - b"strcmp(of->fld_value, \"special-a\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - of = dc_mimeparser_lookup_optional_field( - mimeparser, - b"Foo\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - (*of).fld_value, - b"Bar\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 342i32, - b"strcmp(of->fld_value, \"Bar\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - of = dc_mimeparser_lookup_optional_field( - mimeparser, - b"Chat-Version\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - (*of).fld_value, - b"1.0\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 345i32, - b"strcmp(of->fld_value, \"1.0\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(carray_count((*mimeparser).parts) == 1i32 as libc::c_uint) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 347i32, - b"carray_count(mimeparser->parts) == 1\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - dc_mimeparser_unref(mimeparser); let mut type_0: libc::c_int = 0; let mut mime_0: *mut libc::c_char = 0 as *mut libc::c_char; dc_msg_guess_msgtype_from_suffix( @@ -4002,6 +3915,62 @@ fn test_dc_kml_parse() { } } +#[test] +fn test_dc_mimeparser_with_context() { + unsafe { + let context = create_test_context(); + + let mimeparser: *mut dc_mimeparser_t = dc_mimeparser_new(&context.ctx); + let raw: *const libc::c_char = + b"Content-Type: multipart/mixed; boundary=\"==break==\";\nSubject: outer-subject\nX-Special-A: special-a\nFoo: Bar\nChat-Version: 0.0\n\n--==break==\nContent-Type: text/plain; protected-headers=\"v1\";\nSubject: inner-subject\nX-Special-B: special-b\nFoo: Xy\nChat-Version: 1.0\n\ntest1\n\n--==break==--\n\n\x00" + as *const u8 as *const libc::c_char; + + dc_mimeparser_parse(mimeparser, raw, strlen(raw)); + assert_eq!( + CStr::from_ptr((*mimeparser).subject as *const libc::c_char) + .to_str() + .unwrap(), + "inner-subject", + ); + + let mut of: *mut mailimf_optional_field = dc_mimeparser_lookup_optional_field( + mimeparser, + b"X-Special-A\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr((*of).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "special-a", + ); + + of = dc_mimeparser_lookup_optional_field( + mimeparser, + b"Foo\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr((*of).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "Bar", + ); + + of = dc_mimeparser_lookup_optional_field( + mimeparser, + b"Chat-Version\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr((*of).fld_value as *const libc::c_char) + .to_str() + .unwrap(), + "1.0", + ); + assert_eq!(carray_count((*mimeparser).parts), 1); + + dc_mimeparser_unref(mimeparser); + } +} + #[test] fn test_stress_tests() { unsafe { From 5c9dc3a3341692cdf4b21155cf55bb74801e8bcb Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 16:23:47 +0200 Subject: [PATCH 11/17] test: move dc_msg_guess_msgtype_from_suffix tests to dc_msg.rs --- src/dc_msg.rs | 33 +++++++++++++++++++++++++++++++++ tests/stress.rs | 44 -------------------------------------------- 2 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/dc_msg.rs b/src/dc_msg.rs index 6e03e9b88..cf07ba795 100644 --- a/src/dc_msg.rs +++ b/src/dc_msg.rs @@ -1616,3 +1616,36 @@ pub unsafe fn dc_update_server_uid( sqlite3_step(stmt); sqlite3_finalize(stmt); } + +#[cfg(test)] +mod tests { + use super::*; + use std::ffi::CStr; + + #[test] + fn test_dc_msg_guess_msgtype_from_suffix() { + unsafe { + let mut type_0: libc::c_int = 0; + let mut mime_0: *mut libc::c_char = 0 as *mut libc::c_char; + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, + 0 as *mut libc::c_int, + &mut mime_0, + ); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "audio/mpeg" + ); + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, + &mut type_0, + 0 as *mut *mut libc::c_char, + ); + assert_eq!(type_0, 40); + // TODO add more tests for different message types + free(mime_0 as *mut libc::c_void); + } + } +} diff --git a/tests/stress.rs b/tests/stress.rs index 8f250efa2..ae1eb2091 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -17,7 +17,6 @@ use deltachat::dc_keyring::*; use deltachat::dc_location::*; use deltachat::dc_lot::*; use deltachat::dc_mimeparser::*; -use deltachat::dc_msg::*; use deltachat::dc_param::*; use deltachat::dc_pgp::*; use deltachat::dc_qr::*; @@ -415,49 +414,6 @@ unsafe fn stress_functions(context: &dc_context_t) { free(fn1 as *mut libc::c_void); } - let mut type_0: libc::c_int = 0; - let mut mime_0: *mut libc::c_char = 0 as *mut libc::c_char; - dc_msg_guess_msgtype_from_suffix( - b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, - 0 as *mut libc::c_int, - 0 as *mut *mut libc::c_char, - ); - dc_msg_guess_msgtype_from_suffix( - b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, - 0 as *mut libc::c_int, - &mut mime_0, - ); - if 0 != !(strcmp( - mime_0, - b"audio/mpeg\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 360i32, - b"strcmp(mime, \"audio/mpeg\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - dc_msg_guess_msgtype_from_suffix( - b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, - &mut type_0, - 0 as *mut *mut libc::c_char, - ); - if 0 != !(type_0 == 40i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 362i32, - b"type == DC_MSG_AUDIO\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(mime_0 as *mut libc::c_void); - let mut str: *mut libc::c_char = strdup(b"aaa\x00" as *const u8 as *const libc::c_char); let replacements: libc::c_int = dc_str_replace( &mut str, From 95f4d0d7014aad049b65f5301433e0cc7a5a8e56 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 16:35:10 +0200 Subject: [PATCH 12/17] test: test more message types --- src/dc_msg.rs | 115 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 4 deletions(-) diff --git a/src/dc_msg.rs b/src/dc_msg.rs index cf07ba795..cf227b693 100644 --- a/src/dc_msg.rs +++ b/src/dc_msg.rs @@ -1627,24 +1627,131 @@ mod tests { unsafe { let mut type_0: libc::c_int = 0; let mut mime_0: *mut libc::c_char = 0 as *mut libc::c_char; + dc_msg_guess_msgtype_from_suffix( b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, - 0 as *mut libc::c_int, + &mut type_0, &mut mime_0, ); + assert_eq!(type_0, 40); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() .unwrap(), "audio/mpeg" ); + free(mime_0 as *mut libc::c_void); + dc_msg_guess_msgtype_from_suffix( - b"foo/bar-sth.mp3\x00" as *const u8 as *const libc::c_char, + b"foo/bar-sth.aac\x00" as *const u8 as *const libc::c_char, &mut type_0, - 0 as *mut *mut libc::c_char, + &mut mime_0, ); assert_eq!(type_0, 40); - // TODO add more tests for different message types + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "audio/aac" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.mp4\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 50); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "video/mp4" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.jpg\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 20); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "image/jpeg" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.jpeg\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 20); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "image/jpeg" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.png\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 20); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "image/png" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.webp\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 20); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "image/webp" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.gif\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 21); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "image/gif" + ); + free(mime_0 as *mut libc::c_void); + + dc_msg_guess_msgtype_from_suffix( + b"foo/bar-sth.vcf\x00" as *const u8 as *const libc::c_char, + &mut type_0, + &mut mime_0, + ); + assert_eq!(type_0, 60); + assert_eq!( + CStr::from_ptr(mime_0 as *const libc::c_char) + .to_str() + .unwrap(), + "text/vcard" + ); free(mime_0 as *mut libc::c_void); } } From be1972e36c3f4012f7ae56f688efb1822e118399 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 16:38:38 +0200 Subject: [PATCH 13/17] test: pull in constants for message types into tests --- src/dc_msg.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dc_msg.rs b/src/dc_msg.rs index cf227b693..dbc31b677 100644 --- a/src/dc_msg.rs +++ b/src/dc_msg.rs @@ -1,4 +1,4 @@ -use crate::constants::Event; +use crate::constants::*; use crate::dc_chat::*; use crate::dc_contact::*; use crate::dc_context::*; @@ -1633,7 +1633,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 40); + assert_eq!(type_0, DC_MSG_AUDIO as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1647,7 +1647,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 40); + assert_eq!(type_0, DC_MSG_AUDIO as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1661,7 +1661,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 50); + assert_eq!(type_0, DC_MSG_VIDEO as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1675,7 +1675,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 20); + assert_eq!(type_0, DC_MSG_IMAGE as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1689,7 +1689,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 20); + assert_eq!(type_0, DC_MSG_IMAGE as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1703,7 +1703,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 20); + assert_eq!(type_0, DC_MSG_IMAGE as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1717,7 +1717,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 20); + assert_eq!(type_0, DC_MSG_IMAGE as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1731,7 +1731,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 21); + assert_eq!(type_0, DC_MSG_GIF as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() @@ -1745,7 +1745,7 @@ mod tests { &mut type_0, &mut mime_0, ); - assert_eq!(type_0, 60); + assert_eq!(type_0, DC_MSG_FILE as libc::c_int); assert_eq!( CStr::from_ptr(mime_0 as *const libc::c_char) .to_str() From 90daeb36165a7a6749143b5d7e728ecf6ed5b6c0 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 16:47:02 +0200 Subject: [PATCH 14/17] test: use constants instead of hardcoded values --- src/dc_msg.rs | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/dc_msg.rs b/src/dc_msg.rs index dbc31b677..f2adeaa9e 100644 --- a/src/dc_msg.rs +++ b/src/dc_msg.rs @@ -388,32 +388,32 @@ pub unsafe fn dc_msg_guess_msgtype_from_suffix( suffix = dc_get_filesuffix_lc(pathNfilename); if !suffix.is_null() { if strcmp(suffix, b"mp3\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 40i32; + *ret_msgtype = DC_MSG_AUDIO as libc::c_int; *ret_mime = dc_strdup(b"audio/mpeg\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"aac\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 40i32; + *ret_msgtype = DC_MSG_AUDIO as libc::c_int; *ret_mime = dc_strdup(b"audio/aac\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"mp4\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 50i32; + *ret_msgtype = DC_MSG_VIDEO as libc::c_int; *ret_mime = dc_strdup(b"video/mp4\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"jpg\x00" as *const u8 as *const libc::c_char) == 0i32 || strcmp(suffix, b"jpeg\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 20i32; + *ret_msgtype = DC_MSG_IMAGE as libc::c_int; *ret_mime = dc_strdup(b"image/jpeg\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"png\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 20i32; + *ret_msgtype = DC_MSG_IMAGE as libc::c_int; *ret_mime = dc_strdup(b"image/png\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"webp\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 20i32; + *ret_msgtype = DC_MSG_IMAGE as libc::c_int; *ret_mime = dc_strdup(b"image/webp\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"gif\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 21i32; + *ret_msgtype = DC_MSG_GIF as libc::c_int; *ret_mime = dc_strdup(b"image/gif\x00" as *const u8 as *const libc::c_char) } else if strcmp(suffix, b"vcf\x00" as *const u8 as *const libc::c_char) == 0i32 || strcmp(suffix, b"vcard\x00" as *const u8 as *const libc::c_char) == 0i32 { - *ret_msgtype = 60i32; + *ret_msgtype = DC_MSG_FILE as libc::c_int; *ret_mime = dc_strdup(b"text/vcard\x00" as *const u8 as *const libc::c_char) } } @@ -1009,7 +1009,14 @@ pub unsafe fn dc_msg_get_summarytext_by_raw( b"ErrFilename\x00" as *const u8 as *const libc::c_char, ); value = dc_get_filename(pathNfilename); - label = dc_stock_str(context, if type_0 == 40i32 { 11i32 } else { 12i32 }); + label = dc_stock_str( + context, + if type_0 == DC_MSG_AUDIO as libc::c_int { + 11i32 + } else { + 12i32 + }, + ); prefix = dc_mprintf( b"%s \xe2\x80\x93 %s\x00" as *const u8 as *const libc::c_char, label, @@ -1112,18 +1119,21 @@ pub unsafe fn dc_msg_is_increation(msg: *const dc_msg_t) -> libc::c_int { return 0i32; } - (((*msg).type_0 == 20i32 - || (*msg).type_0 == 21i32 - || (*msg).type_0 == 40i32 - || (*msg).type_0 == 41i32 - || (*msg).type_0 == 50i32 - || (*msg).type_0 == 60i32) + (((*msg).type_0 == DC_MSG_IMAGE as libc::c_int + || (*msg).type_0 == DC_MSG_GIF as libc::c_int + || (*msg).type_0 == DC_MSG_AUDIO as libc::c_int + || (*msg).type_0 == DC_MSG_VOICE as libc::c_int + || (*msg).type_0 == DC_MSG_VIDEO as libc::c_int + || (*msg).type_0 == DC_MSG_FILE as libc::c_int) && (*msg).state == 18i32) as libc::c_int } // TODO should return bool /rtn pub unsafe fn dc_msg_is_setupmessage(msg: *const dc_msg_t) -> libc::c_int { - if msg.is_null() || (*msg).magic != 0x11561156i32 as libc::c_uint || (*msg).type_0 != 60i32 { + if msg.is_null() + || (*msg).magic != 0x11561156i32 as libc::c_uint + || (*msg).type_0 != DC_MSG_FILE as libc::c_int + { return 0i32; } return if dc_param_get_int((*msg).param, 'S' as i32, 0i32) == 6i32 { From 4fb5bc63be59d2018bc7d1f5c4e12d42c95e475e Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 17:22:43 +0200 Subject: [PATCH 15/17] test: move tests to dc_tools.rs --- src/dc_tools.rs | 235 +++++++++++++++++++++++++++++++++++++++ tests/stress.rs | 288 ------------------------------------------------ 2 files changed, 235 insertions(+), 288 deletions(-) diff --git a/src/dc_tools.rs b/src/dc_tools.rs index 272d4f543..e3a27718f 100644 --- a/src/dc_tools.rs +++ b/src/dc_tools.rs @@ -1723,4 +1723,239 @@ mod tests { free(s as *mut libc::c_void); } } + + #[test] + fn test_dc_str_replace() { + unsafe { + let mut str: *mut libc::c_char = strdup(b"aaa\x00" as *const u8 as *const libc::c_char); + let replacements: libc::c_int = dc_str_replace( + &mut str, + b"a\x00" as *const u8 as *const libc::c_char, + b"ab\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "ababab" + ); + assert_eq!(replacements, 3); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_str_truncate_1() { + unsafe { + let str: *mut libc::c_char = + strdup(b"this is a little test string\x00" as *const u8 as *const libc::c_char); + dc_truncate_str(str, 16); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "this is a [...]" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_str_truncate_2() { + unsafe { + let str: *mut libc::c_char = strdup(b"1234\x00" as *const u8 as *const libc::c_char); + dc_truncate_str(str, 2); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "1234" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_str_truncate_3() { + unsafe { + let str: *mut libc::c_char = strdup(b"1234567\x00" as *const u8 as *const libc::c_char); + dc_truncate_str(str, 1); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "1[...]" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_str_truncate_4() { + unsafe { + let str: *mut libc::c_char = strdup(b"123456\x00" as *const u8 as *const libc::c_char); + dc_truncate_str(str, 4); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "123456" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_insert_breaks_1() { + unsafe { + let str: *mut libc::c_char = dc_insert_breaks( + b"just1234test\x00" as *const u8 as *const libc::c_char, + 4, + b" \x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "just 1234 test" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_insert_breaks_2() { + unsafe { + let str: *mut libc::c_char = dc_insert_breaks( + b"just1234tes\x00" as *const u8 as *const libc::c_char, + 4i32, + b"--\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "just--1234--tes" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_insert_breaks_3() { + unsafe { + let str: *mut libc::c_char = dc_insert_breaks( + b"just1234t\x00" as *const u8 as *const libc::c_char, + 4i32, + b"\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "just1234t" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_insert_breaks_4() { + unsafe { + let str: *mut libc::c_char = dc_insert_breaks( + b"\x00" as *const u8 as *const libc::c_char, + 4i32, + b"---\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_null_terminate_1() { + unsafe { + let str: *mut libc::c_char = + dc_null_terminate(b"abcxyz\x00" as *const u8 as *const libc::c_char, 3); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "abc" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_null_terminate_2() { + unsafe { + let str: *mut libc::c_char = + dc_null_terminate(b"abcxyz\x00" as *const u8 as *const libc::c_char, 0); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_null_terminate_3() { + unsafe { + let str: *mut libc::c_char = + dc_null_terminate(0 as *const u8 as *const libc::c_char, 0); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "" + ); + free(str as *mut libc::c_void); + } + } + + #[test] + fn test_dc_str_to_clist_1() { + unsafe { + let list: *mut clist = dc_str_to_clist( + 0 as *const libc::c_char, + b" \x00" as *const u8 as *const libc::c_char, + ); + assert_eq!((*list).count, 0); + clist_free_content(list); + clist_free(list); + } + } + + #[test] + fn test_dc_str_to_clist_2() { + unsafe { + let list: *mut clist = dc_str_to_clist( + b"\x00" as *const u8 as *const libc::c_char, + b" \x00" as *const u8 as *const libc::c_char, + ); + assert_eq!((*list).count, 1); + clist_free_content(list); + clist_free(list); + } + } + + #[test] + fn test_dc_str_to_clist_3() { + unsafe { + let list: *mut clist = dc_str_to_clist( + b" \x00" as *const u8 as *const libc::c_char, + b" \x00" as *const u8 as *const libc::c_char, + ); + assert_eq!((*list).count, 2); + clist_free_content(list); + clist_free(list); + } + } + + #[test] + fn test_dc_str_to_clist_4() { + unsafe { + let list: *mut clist = dc_str_to_clist( + b"foo bar test\x00" as *const u8 as *const libc::c_char, + b" \x00" as *const u8 as *const libc::c_char, + ); + assert_eq!((*list).count, 3); + let str: *mut libc::c_char = + dc_str_from_clist(list, b" \x00" as *const u8 as *const libc::c_char); + + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "foo bar test" + ); + + clist_free_content(list); + clist_free(list); + free(str as *mut libc::c_void); + } + } } diff --git a/tests/stress.rs b/tests/stress.rs index ae1eb2091..0c4c18c16 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -414,294 +414,6 @@ unsafe fn stress_functions(context: &dc_context_t) { free(fn1 as *mut libc::c_void); } - let mut str: *mut libc::c_char = strdup(b"aaa\x00" as *const u8 as *const libc::c_char); - let replacements: libc::c_int = dc_str_replace( - &mut str, - b"a\x00" as *const u8 as *const libc::c_char, - b"ab\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp(str, b"ababab\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 396i32, - b"strcmp(str, \"ababab\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(replacements == 3i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 397i32, - b"replacements == 3\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = strdup(b"this is a little test string\x00" as *const u8 as *const libc::c_char); - dc_truncate_str(str, 16i32); - if 0 != !(strcmp( - str, - b"this is a [...]\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 402i32, - b"strcmp(str, \"this is a \" DC_EDITORIAL_ELLIPSE)==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = strdup(b"1234\x00" as *const u8 as *const libc::c_char); - dc_truncate_str(str, 2i32); - if 0 != !(strcmp(str, b"1234\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 407i32, - b"strcmp(str, \"1234\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = strdup(b"1234567\x00" as *const u8 as *const libc::c_char); - dc_truncate_str(str, 1i32); - if 0 != !(strcmp(str, b"1[...]\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 412i32, - b"strcmp(str, \"1[...]\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = strdup(b"123456\x00" as *const u8 as *const libc::c_char); - dc_truncate_str(str, 4i32); - if 0 != !(strcmp(str, b"123456\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 417i32, - b"strcmp(str, \"123456\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_insert_breaks( - b"just1234test\x00" as *const u8 as *const libc::c_char, - 4i32, - b" \x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - str, - b"just 1234 test\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 421i32, - b"strcmp(str, \"just 1234 test\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_insert_breaks( - b"just1234tes\x00" as *const u8 as *const libc::c_char, - 4i32, - b"--\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - str, - b"just--1234--tes\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 425i32, - b"strcmp(str, \"just--1234--tes\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_insert_breaks( - b"just1234t\x00" as *const u8 as *const libc::c_char, - 4i32, - b"\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp(str, b"just1234t\x00" as *const u8 as *const libc::c_char) == 0i32) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 429i32, - b"strcmp(str, \"just1234t\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_insert_breaks( - b"\x00" as *const u8 as *const libc::c_char, - 4i32, - b"---\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp(str, b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 433i32, - b"strcmp(str, \"\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_null_terminate(b"abcxyz\x00" as *const u8 as *const libc::c_char, 3i32); - if 0 != !(strcmp(str, b"abc\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 437i32, - b"strcmp(str, \"abc\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_null_terminate(b"abcxyz\x00" as *const u8 as *const libc::c_char, 0i32); - if 0 != !(strcmp(str, b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 441i32, - b"strcmp(str, \"\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - str = dc_null_terminate(0 as *const libc::c_char, 0i32); - if 0 != !(strcmp(str, b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 445i32, - b"strcmp(str, \"\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str as *mut libc::c_void); - let mut list: *mut clist = dc_str_to_clist( - 0 as *const libc::c_char, - b" \x00" as *const u8 as *const libc::c_char, - ); - if 0 != !((*list).count == 0i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 449i32, - b"clist_count(list)==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - clist_free_content(list); - clist_free(list); - list = dc_str_to_clist( - b"\x00" as *const u8 as *const libc::c_char, - b" \x00" as *const u8 as *const libc::c_char, - ); - if 0 != !((*list).count == 1i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 454i32, - b"clist_count(list)==1\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - clist_free_content(list); - clist_free(list); - list = dc_str_to_clist( - b" \x00" as *const u8 as *const libc::c_char, - b" \x00" as *const u8 as *const libc::c_char, - ); - if 0 != !((*list).count == 2i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 459i32, - b"clist_count(list)==2\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - clist_free_content(list); - clist_free(list); - list = dc_str_to_clist( - b"foo bar test\x00" as *const u8 as *const libc::c_char, - b" \x00" as *const u8 as *const libc::c_char, - ); - if 0 != !((*list).count == 3i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 464i32, - b"clist_count(list)==3\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - str = dc_str_from_clist(list, b" \x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(str, b"foo bar test\x00" as *const u8 as *const libc::c_char) == 0i32) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 466i32, - b"strcmp(str, \"foo bar test\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - clist_free_content(list); - clist_free(list); - free(str as *mut libc::c_void); if 0 != !(strcmp( b"fresh=10\x00" as *const u8 as *const libc::c_char, b"fresh=10\x00" as *const u8 as *const libc::c_char, From 0ad4a7189764cd2c8a2b292041c4b28855043c41 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 17:40:54 +0200 Subject: [PATCH 16/17] test: remove tests testing c pre processor code :boom: --- tests/stress.rs | 422 ------------------------------------------------ 1 file changed, 422 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index 0c4c18c16..50bb3e462 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -414,428 +414,6 @@ unsafe fn stress_functions(context: &dc_context_t) { free(fn1 as *mut libc::c_void); } - if 0 != !(strcmp( - b"fresh=10\x00" as *const u8 as *const libc::c_char, - b"fresh=10\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 471i32, - b"strcmp(\"fresh=\" DC_STRINGIFY(DC_STATE_IN_FRESH), \"fresh=10\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"noticed=13\x00" as *const u8 as *const libc::c_char, - b"noticed=13\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 472i32, - b"strcmp(\"noticed=\" DC_STRINGIFY(DC_STATE_IN_NOTICED), \"noticed=13\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"seen=16\x00" as *const u8 as *const libc::c_char, - b"seen=16\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 473i32, - b"strcmp(\"seen=\" DC_STRINGIFY(DC_STATE_IN_SEEN), \"seen=16\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"pending=20\x00" as *const u8 as *const libc::c_char, - b"pending=20\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 474i32, - b"strcmp(\"pending=\" DC_STRINGIFY(DC_STATE_OUT_PENDING), \"pending=20\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"failed=24\x00" as *const u8 as *const libc::c_char, - b"failed=24\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 475i32, - b"strcmp(\"failed=\" DC_STRINGIFY(DC_STATE_OUT_FAILED), \"failed=24\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"delivered=26\x00" as *const u8 as *const libc::c_char, - b"delivered=26\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 476i32, - b"strcmp(\"delivered=\" DC_STRINGIFY(DC_STATE_OUT_DELIVERED), \"delivered=26\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"mdn_rcvd=28\x00" as *const u8 as *const libc::c_char, - b"mdn_rcvd=28\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 477i32, - b"strcmp(\"mdn_rcvd=\" DC_STRINGIFY(DC_STATE_OUT_MDN_RCVD), \"mdn_rcvd=28\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"undefined=0\x00" as *const u8 as *const libc::c_char, - b"undefined=0\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 479i32, - b"strcmp(\"undefined=\" DC_STRINGIFY(DC_CHAT_TYPE_UNDEFINED), \"undefined=0\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"single=100\x00" as *const u8 as *const libc::c_char, - b"single=100\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 480i32, - b"strcmp(\"single=\" DC_STRINGIFY(DC_CHAT_TYPE_SINGLE), \"single=100\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"group=120\x00" as *const u8 as *const libc::c_char, - b"group=120\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 481i32, - b"strcmp(\"group=\" DC_STRINGIFY(DC_CHAT_TYPE_GROUP), \"group=120\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"vgroup=130\x00" as *const u8 as *const libc::c_char, - b"vgroup=130\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 482i32, - b"strcmp(\"vgroup=\" DC_STRINGIFY(DC_CHAT_TYPE_VERIFIED_GROUP), \"vgroup=130\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"deaddrop=1\x00" as *const u8 as *const libc::c_char, - b"deaddrop=1\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 484i32, - b"strcmp(\"deaddrop=\" DC_STRINGIFY(DC_CHAT_ID_DEADDROP), \"deaddrop=1\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"trash=3\x00" as *const u8 as *const libc::c_char, - b"trash=3\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 485i32, - b"strcmp(\"trash=\" DC_STRINGIFY(DC_CHAT_ID_TRASH), \"trash=3\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"in_creation=4\x00" as *const u8 as *const libc::c_char, - b"in_creation=4\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 486i32, - b"strcmp(\"in_creation=\" DC_STRINGIFY(DC_CHAT_ID_MSGS_IN_CREATION), \"in_creation=4\")==0\x00" - as *const u8 as *const libc::c_char); - } else { - }; - if 0 != !(strcmp( - b"starred=5\x00" as *const u8 as *const libc::c_char, - b"starred=5\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 487i32, - b"strcmp(\"starred=\" DC_STRINGIFY(DC_CHAT_ID_STARRED), \"starred=5\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"archivedlink=6\x00" as *const u8 as *const libc::c_char, - b"archivedlink=6\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 488i32, - b"strcmp(\"archivedlink=\" DC_STRINGIFY(DC_CHAT_ID_ARCHIVED_LINK), \"archivedlink=6\")==0\x00" - as *const u8 as *const libc::c_char); - } else { - }; - if 0 != !(strcmp( - b"spcl_chat=9\x00" as *const u8 as *const libc::c_char, - b"spcl_chat=9\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 489i32, - b"strcmp(\"spcl_chat=\" DC_STRINGIFY(DC_CHAT_ID_LAST_SPECIAL), \"spcl_chat=9\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"self=1\x00" as *const u8 as *const libc::c_char, - b"self=1\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 491i32, - b"strcmp(\"self=\" DC_STRINGIFY(DC_CONTACT_ID_SELF), \"self=1\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"spcl_contact=9\x00" as *const u8 as *const libc::c_char, - b"spcl_contact=9\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 492i32, - b"strcmp(\"spcl_contact=\" DC_STRINGIFY(DC_CONTACT_ID_LAST_SPECIAL), \"spcl_contact=9\")==0\x00" - as *const u8 as *const libc::c_char); - } else { - }; - if 0 != !(strcmp( - b"grpimg=3\x00" as *const u8 as *const libc::c_char, - b"grpimg=3\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 494i32, - b"strcmp(\"grpimg=\" DC_STRINGIFY(DC_CMD_GROUPIMAGE_CHANGED), \"grpimg=3\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"notverified=0\x00" as *const u8 as *const libc::c_char, - b"notverified=0\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 496i32, - b"strcmp(\"notverified=\" DC_STRINGIFY(DC_NOT_VERIFIED), \"notverified=0\")==0\x00" - as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"bidirectional=2\x00" as *const u8 as *const libc::c_char, - b"bidirectional=2\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 497i32, - b"strcmp(\"bidirectional=\" DC_STRINGIFY(DC_BIDIRECT_VERIFIED), \"bidirectional=2\")==0\x00" - as *const u8 as *const libc::c_char); - } else { - }; - if 0 != !(strcmp( - b"public=0\x00" as *const u8 as *const libc::c_char, - b"public=0\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 499i32, - b"strcmp(\"public=\" DC_STRINGIFY(DC_KEY_PUBLIC), \"public=0\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"private=1\x00" as *const u8 as *const libc::c_char, - b"private=1\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 500i32, - b"strcmp(\"private=\" DC_STRINGIFY(DC_KEY_PRIVATE), \"private=1\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !('f' as i32 == 'f' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 502i32, - b"DC_PARAM_FILE == \'f\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('w' as i32 == 'w' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 503i32, - b"DC_PARAM_WIDTH == \'w\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('h' as i32 == 'h' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 504i32, - b"DC_PARAM_HEIGHT == \'h\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('d' as i32 == 'd' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 505i32, - b"DC_PARAM_DURATION == \'d\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('m' as i32 == 'm' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 506i32, - b"DC_PARAM_MIMETYPE == \'m\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('a' as i32 == 'a' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 507i32, - b"DC_PARAM_FORWARDED == \'a\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !('U' as i32 == 'U' as i32) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 508i32, - b"DC_PARAM_UNPROMOTED == \'U\'\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; let mut buf1: *mut libc::c_char = strdup(b"ol\xc3\xa1 mundo <>\"\'& \xc3\xa4\xc3\x84\xc3\xb6\xc3\x96\xc3\xbc\xc3\x9c\xc3\x9f foo\xc3\x86\xc3\xa7\xc3\x87 \xe2\x99\xa6&noent;\x00" as *const u8 as *const libc::c_char); From 0408695c1dead417d906d6643b684c98251bbb75 Mon Sep 17 00:00:00 2001 From: Lars-Magnus Skog Date: Mon, 13 May 2019 23:10:34 +0200 Subject: [PATCH 17/17] test: move tests to dc_strencode.rs --- src/dc_strencode.rs | 156 ++++++++++++++++++++++ tests/stress.rs | 307 -------------------------------------------- 2 files changed, 156 insertions(+), 307 deletions(-) diff --git a/src/dc_strencode.rs b/src/dc_strencode.rs index bc5ad7164..a0a73cf50 100644 --- a/src/dc_strencode.rs +++ b/src/dc_strencode.rs @@ -728,6 +728,7 @@ pub unsafe fn dc_decode_ext_header(to_decode: *const libc::c_char) -> *mut libc: #[cfg(test)] mod tests { use super::*; + use std::ffi::CStr; #[test] fn test_isalnum() { @@ -735,4 +736,159 @@ mod tests { assert_eq!(isalnum('5' as libc::c_int), 1); assert_eq!(isalnum('Q' as libc::c_int), 1); } + + #[test] + fn test_dc_decode_header_words() { + unsafe { + let mut buf1: *mut libc::c_char = dc_decode_header_words( + b"=?utf-8?B?dGVzdMOkw7bDvC50eHQ=?=\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + strcmp( + buf1, + b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char + ), + 0 + ); + free(buf1 as *mut libc::c_void); + + buf1 = + dc_decode_header_words(b"just ascii test\x00" as *const u8 as *const libc::c_char); + assert_eq!(CStr::from_ptr(buf1).to_str().unwrap(), "just ascii test"); + free(buf1 as *mut libc::c_void); + + buf1 = dc_encode_header_words(b"abcdef\x00" as *const u8 as *const libc::c_char); + assert_eq!(CStr::from_ptr(buf1).to_str().unwrap(), "abcdef"); + free(buf1 as *mut libc::c_void); + + buf1 = dc_encode_header_words( + b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + strncmp(buf1, b"=?utf-8\x00" as *const u8 as *const libc::c_char, 7), + 0 + ); + + let buf2: *mut libc::c_char = dc_decode_header_words(buf1); + assert_eq!( + strcmp( + buf2, + b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char + ), + 0 + ); + free(buf1 as *mut libc::c_void); + free(buf2 as *mut libc::c_void); + + buf1 = dc_decode_header_words( + b"=?ISO-8859-1?Q?attachment=3B=0D=0A_filename=3D?= =?ISO-8859-1?Q?=22test=E4=F6=FC=2Etxt=22=3B=0D=0A_size=3D39?=\x00" as *const u8 as *const libc::c_char + ); + assert_eq!( + strcmp( + buf1, + b"attachment;\r\n filename=\"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\";\r\n size=39\x00" as *const u8 as *const libc::c_char, + + ), + 0 + ); + free(buf1 as *mut libc::c_void); + } + } + + #[test] + fn test_dc_encode_ext_header() { + unsafe { + let mut buf1 = dc_encode_ext_header( + b"Bj\xc3\xb6rn Petersen\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + CStr::from_ptr(buf1).to_str().unwrap(), + "utf-8\'\'Bj%C3%B6rn%20Petersen" + ); + let buf2 = dc_decode_ext_header(buf1); + assert_eq!( + strcmp( + buf2, + b"Bj\xc3\xb6rn Petersen\x00" as *const u8 as *const libc::c_char, + ), + 0 + ); + free(buf1 as *mut libc::c_void); + free(buf2 as *mut libc::c_void); + + buf1 = dc_decode_ext_header( + b"iso-8859-1\'en\'%A3%20rates\x00" as *const u8 as *const libc::c_char, + ); + assert_eq!( + strcmp( + buf1, + b"\xc2\xa3 rates\x00" as *const u8 as *const libc::c_char, + ), + 0 + ); + free(buf1 as *mut libc::c_void); + + buf1 = dc_decode_ext_header(b"wrong\'format\x00" as *const u8 as *const libc::c_char); + assert_eq!( + strcmp( + buf1, + b"wrong\'format\x00" as *const u8 as *const libc::c_char, + ), + 0 + ); + free(buf1 as *mut libc::c_void); + + buf1 = dc_decode_ext_header(b"\'\'\x00" as *const u8 as *const libc::c_char); + assert_eq!( + strcmp(buf1, b"\'\'\x00" as *const u8 as *const libc::c_char), + 0 + ); + free(buf1 as *mut libc::c_void); + + buf1 = dc_decode_ext_header(b"x\'\'\x00" as *const u8 as *const libc::c_char); + assert_eq!(strcmp(buf1, b"\x00" as *const u8 as *const libc::c_char), 0); + free(buf1 as *mut libc::c_void); + + buf1 = dc_decode_ext_header(b"\'\x00" as *const u8 as *const libc::c_char); + assert_eq!( + strcmp(buf1, b"\'\x00" as *const u8 as *const libc::c_char), + 0 + ); + free(buf1 as *mut libc::c_void); + + buf1 = dc_decode_ext_header(b"\x00" as *const u8 as *const libc::c_char); + assert_eq!(strcmp(buf1, b"\x00" as *const u8 as *const libc::c_char), 0); + free(buf1 as *mut libc::c_void); + } + } + + #[test] + fn test_dc_needs_ext_header() { + unsafe { + assert_eq!( + dc_needs_ext_header(b"Bj\xc3\xb6rn\x00" as *const u8 as *const libc::c_char), + true + ); + assert_eq!( + dc_needs_ext_header(b"Bjoern\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_needs_ext_header(b"\x00" as *const u8 as *const libc::c_char), + false + ); + assert_eq!( + dc_needs_ext_header(b" \x00" as *const u8 as *const libc::c_char), + true + ); + assert_eq!( + dc_needs_ext_header(b"a b\x00" as *const u8 as *const libc::c_char), + true + ); + assert_eq!( + dc_needs_ext_header(0 as *const u8 as *const libc::c_char), + false + ); + } + } } diff --git a/tests/stress.rs b/tests/stress.rs index 50bb3e462..ffaa84437 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -510,313 +510,6 @@ unsafe fn stress_functions(context: &dc_context_t) { } else { }; free(buf1 as *mut libc::c_void); - buf1 = dc_decode_header_words( - b"=?utf-8?B?dGVzdMOkw7bDvC50eHQ=?=\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - buf1, - b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 538i32, - b"strcmp(buf1, \"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\")==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_header_words(b"just ascii test\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp( - buf1, - b"just ascii test\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 542i32, - b"strcmp(buf1, \"just ascii test\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_encode_header_words(b"abcdef\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(buf1, b"abcdef\x00" as *const u8 as *const libc::c_char) == 0i32) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 546i32, - b"strcmp(buf1, \"abcdef\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_encode_header_words( - b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strncmp(buf1, b"=?utf-8\x00" as *const u8 as *const libc::c_char, 7) == 0i32) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 550i32, - b"strncmp(buf1, \"=?utf-8\", 7)==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - buf2 = dc_decode_header_words(buf1); - if 0 != !(strcmp( - b"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\x00" as *const u8 as *const libc::c_char, - buf2, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 552i32, - b"strcmp(\"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\", buf2)==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - free(buf2 as *mut libc::c_void); - buf1 = - dc_decode_header_words(b"=?ISO-8859-1?Q?attachment=3B=0D=0A_filename=3D?= =?ISO-8859-1?Q?=22test=E4=F6=FC=2Etxt=22=3B=0D=0A_size=3D39?=\x00" - as *const u8 as *const libc::c_char); - if 0 != !(strcmp( - buf1, - b"attachment;\r\n filename=\"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\";\r\n size=39\x00" - as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 557i32, - b"strcmp(buf1, \"attachment;\\r\\n filename=\\\"test\xc3\xa4\xc3\xb6\xc3\xbc.txt\\\";\\r\\n size=39\")==0\x00" - as *const u8 as *const libc::c_char); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_encode_ext_header(b"Bj\xc3\xb6rn Petersen\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp( - buf1, - b"utf-8\'\'Bj%C3%B6rn%20Petersen\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 561i32, - b"strcmp(buf1, \"utf-8\'\'Bj%C3%B6rn%20Petersen\") == 0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - buf2 = dc_decode_ext_header(buf1); - if 0 != !(strcmp( - buf2, - b"Bj\xc3\xb6rn Petersen\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 563i32, - b"strcmp(buf2, \"Bj\xc3\xb6rn Petersen\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - free(buf2 as *mut libc::c_void); - buf1 = dc_decode_ext_header( - b"iso-8859-1\'en\'%A3%20rates\x00" as *const u8 as *const libc::c_char, - ); - if 0 != !(strcmp( - buf1, - b"\xc2\xa3 rates\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 568i32, - b"strcmp(buf1, \"\xc2\xa3 rates\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - buf1, - b"\xc2\xa3 rates\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 569i32, - b"strcmp(buf1, \"\\xC2\\xA3 rates\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_ext_header(b"wrong\'format\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp( - buf1, - b"wrong\'format\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 573i32, - b"strcmp(buf1, \"wrong\'format\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_ext_header(b"\'\'\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(buf1, b"\'\'\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 577i32, - b"strcmp(buf1, \"\'\'\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_ext_header(b"x\'\'\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(buf1, b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 581i32, - b"strcmp(buf1, \"\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_ext_header(b"\'\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(buf1, b"\'\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 585i32, - b"strcmp(buf1, \"\'\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - buf1 = dc_decode_ext_header(b"\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp(buf1, b"\x00" as *const u8 as *const libc::c_char) == 0i32) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 589i32, - b"strcmp(buf1, \"\") == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(buf1 as *mut libc::c_void); - if 0 != (!dc_needs_ext_header(b"Bj\xc3\xb6rn\x00" as *const u8 as *const libc::c_char)) - as libc::c_int as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 592i32, - b"dc_needs_ext_header(\"Bj\xc3\xb6rn\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_needs_ext_header(b"Bjoern\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 593i32, - b"!dc_needs_ext_header(\"Bjoern\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_needs_ext_header(b"\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 594i32, - b"!dc_needs_ext_header(\"\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (!dc_needs_ext_header(b" \x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 595i32, - b"dc_needs_ext_header(\" \")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (!dc_needs_ext_header(b"a b\x00" as *const u8 as *const libc::c_char)) as libc::c_int - as libc::c_long - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 596i32, - b"dc_needs_ext_header(\"a b\")\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != (dc_needs_ext_header(0 as *const libc::c_char)) as libc::c_int as libc::c_long { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 597i32, - b"!dc_needs_ext_header(NULL)\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; buf1 = dc_encode_modified_utf7( b"Bj\xc3\xb6rn Petersen\x00" as *const u8 as *const libc::c_char, 1i32,