Test(parse_number,test_c_like_prefixes_select_base) { assert_parse("0x20", 32); assert_parse("020", 16); assert_parse("20", 20); assert_parse_with_suffix("0x20kiB", 32 * 1024); }
Test(parse_number, test_simple_numbers_are_parsed_properly) { assert_parse_with_suffix("1234", 1234); assert_parse_with_suffix("+1234", 1234); assert_parse_with_suffix("-1234", -1234); assert_parse("1234", 1234); }
int main(SIPE_UNUSED_PARAMETER int argc, SIPE_UNUSED_PARAMETER char **argv) { sipe_xml *xml; const sipe_xml *child1, *child2; #if 0 /* * No idea why the memory leak checks work on some platforms * but fail on others :-( Disable for now... */ g_mem_set_vtable(&memory_leak_check); #else (void) memory_leak_check; #endif /* empty XML */ xml = assert_parse(NULL, FALSE); assert_stringify(xml, 1, NULL); sipe_xml_free(xml); xml = assert_parse("", FALSE); sipe_xml_free(xml); xml = assert_parse("<?xml version=\"1.0\" ?>", FALSE); sipe_xml_free(xml); /* one node */ xml = assert_parse("<test></test>", TRUE); assert_name(xml, "test"); assert_data(xml, NULL); assert_stringify(xml, 1, "<test/>"); sipe_xml_free(xml); xml = assert_parse("<test/>", TRUE); assert_name(xml, "test"); assert_data(xml, NULL); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test>a</test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test>a\nb</test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a\nb"); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); /* child node */ xml = assert_parse("<test>a<child>b</child></test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); child1 = assert_child(xml, NULL, FALSE); child1 = assert_child(xml, "child", TRUE); assert_name(child1, "child"); assert_data(child1, "b"); child1 = assert_child(xml, "shouldnotmatch", FALSE); assert_data(child1, NULL); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test>a<child/></test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); child1 = assert_child(xml, "child", TRUE); assert_name(child1, "child"); assert_data(child1, NULL); child1 = assert_child(xml, "shouldnotmatch", FALSE); assert_data(child1, NULL); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test>a<child>b<inner>c</inner></child></test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); child1 = assert_child(xml, "child", TRUE); assert_name(child1, "child"); assert_data(child1, "b"); child1 = assert_child(child1, "inner", TRUE); assert_name(child1, "inner"); assert_data(child1, "c"); child1 = assert_child(xml, "child/inner", TRUE); assert_name(child1, "inner"); assert_data(child1, "c"); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test>a<child>b<inner>c<innerinner>d</innerinner></inner></child></test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); child1 = assert_child(xml, "child", TRUE); assert_name(child1, "child"); assert_data(child1, "b"); child2 = assert_child(child1, "inner/innerinner", TRUE); assert_name(child2, "innerinner"); assert_data(child2, "d"); child1 = assert_child(child1, "inner", TRUE); assert_name(child1, "inner"); assert_data(child1, "c"); child1 = assert_child(child1, "innerinner", TRUE); assert_name(child1, "innerinner"); assert_data(child1, "d"); child1 = assert_child(xml, "child/inner", TRUE); assert_name(child1, "inner"); assert_data(child1, "c"); child1 = assert_child(xml, "child/inner/innerinner", TRUE); assert_name(child1, "innerinner"); assert_data(child1, "d"); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); /* attributes */ xml = assert_parse("<test a=\"\">a</test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); assert_attribute(xml, NULL, NULL); assert_attribute(xml, "a", ""); assert_attribute(xml, "b", NULL); assert_stringify(xml, 1, teststring); sipe_xml_free(xml); xml = assert_parse("<test a=\"1\" b=\"abc\">a</test>", TRUE); assert_name(xml, "test"); assert_data(xml, "a"); assert_attribute(xml, "a", "1"); assert_int_attribute(xml, "a", 1, 0); assert_attribute(xml, "b", "abc"); assert_attribute(xml, "c", NULL); assert_int_attribute(xml, "d", 100, 200); /* the attribute order depends on glib hashing :-( */ assert_stringify(xml, 2, teststring, "<test b=\"abc\" a=\"1\">a</test>"); sipe_xml_free(xml); /* attributes with namespace */ xml = assert_parse("<m:row m:uri=\"sip:\" m:displayName=\"X\" m:title=\"Y\" m:office=\"Z\" m:phone=\"0\" m:company=\"A\" m:city=\"B\" m:state=\"C\" m:country=\"D\" m:email=\"E\" />", TRUE); assert_name(xml, "row"); assert_data(xml, NULL); assert_attribute(xml, "uri", "sip:"); assert_attribute(xml, "displayName", "X"); assert_attribute(xml, "title", "Y"); assert_attribute(xml, "office", "Z"); assert_attribute(xml, "phone", "0"); assert_attribute(xml, "company", "A"); assert_attribute(xml, "city", "B"); assert_attribute(xml, "state", "C"); assert_attribute(xml, "country", "D"); assert_attribute(xml, "email", "E"); sipe_xml_free(xml); xml = assert_parse("<state xsi:type=\"aggregateState\" lastActive=\"date\" xmlns:xsi=\"http://one\" xmlns=\"http://two\"><availability>15500</availability></state>", TRUE); assert_name(xml, "state"); assert_data(xml, NULL); assert_attribute(xml, "type", "aggregateState"); assert_attribute(xml, "lastActive", "date"); assert_attribute(xml, "xsi", "http://one"); assert_attribute(xml, "xmlns", "http://two"); child1 = assert_child(xml, "availability", TRUE); assert_name(child1, "availability"); assert_data(child1, "15500"); sipe_xml_free(xml); /* broken XML */ xml = assert_parse("t", FALSE); sipe_xml_free(xml); xml = assert_parse("<>", FALSE); sipe_xml_free(xml); xml = assert_parse("<></>", FALSE); sipe_xml_free(xml); xml = assert_parse("<test>", FALSE); sipe_xml_free(xml); xml = assert_parse("<a a=\"1\" a=\"2\"></a>", FALSE); sipe_xml_free(xml); if (allocated) { printf("MEMORY LEAK: %" G_GSIZE_FORMAT " still allocated\n", allocated); failed++; } else { printf("MEMORY LEAK CHECK OK\n"); succeeded++; } printf("Result: %d PASSED %d FAILED\n", succeeded, failed); return(failed); }