Ticket #1183: xmlformat-2nd-level.diff
| File xmlformat-2nd-level.diff, 10.2 KB (added by dgollub, 2 years ago) |
|---|
-
tests/check_merger.c
8 8 static OSyncCapabilities *_merger_assemble_caps(void) 9 9 { 10 10 OSyncError *error; 11 OSyncCapability *cap, *child_cap; 11 12 12 13 OSyncCapabilities *capabilities = osync_capabilities_new("xmlformat-caps", &error); 13 14 fail_unless(capabilities != NULL, NULL); … … 16 17 OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_objtype_new(capabilities, "contact", &error); 17 18 fail_unless(capsobjtype != NULL, NULL); 18 19 19 OSyncCapability *cap = osync_capability_new(capsobjtype, &error);20 osync_capability_set_name(cap, "Name");21 22 20 cap = osync_capability_new(capsobjtype, &error); 23 osync_capability_set_name(cap, " LastName");21 osync_capability_set_name(cap, "Address"); 24 22 25 c ap = osync_capability_new(capsobjtype, &error);26 osync_capability_set_name(c ap, "Telephone");23 child_cap = osync_capability_new_child(cap, &error); 24 osync_capability_set_name(child_cap, "City"); 27 25 26 child_cap = osync_capability_new_child(cap, &error); 27 osync_capability_set_name(child_cap, "Region"); 28 29 child_cap = osync_capability_new_child(cap, &error); 30 osync_capability_set_name(child_cap, "Street"); 31 28 32 cap = osync_capability_new(capsobjtype, &error); 29 33 osync_capability_set_name(cap, "Categories"); 30 34 31 35 cap = osync_capability_new(capsobjtype, &error); 32 osync_capability_set_name(cap, " Address");36 osync_capability_set_name(cap, "Name"); 33 37 34 cap = osync_capability_new(capsobjtype, &error);35 osync_capability_set_name(cap, "Street");38 // child_cap = osync_capability_new_child(cap, &error); 39 // osync_capability_set_name(child_cap, "FirstName"); 36 40 37 c ap = osync_capability_new(capsobjtype, &error);38 osync_capability_set_name(c ap, "City");41 child_cap = osync_capability_new_child(cap, &error); 42 osync_capability_set_name(child_cap, "LastName"); 39 43 44 40 45 cap = osync_capability_new(capsobjtype, &error); 41 osync_capability_set_name(cap, " Region");46 osync_capability_set_name(cap, "Telephone"); 42 47 48 43 49 return capabilities; 44 50 } 45 51 … … 99 105 OSyncXMLFormat *xmlformat, *xmlformat_entire; 100 106 OSyncCapabilities *capabilities = _merger_assemble_caps(); 101 107 108 OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_get_objtype(capabilities, "contact"); 109 OSyncList *caplist = osync_capabilities_objtype_get_caps(capsobjtype); 110 for (; caplist; caplist = caplist->next) { 111 OSyncCapability *cap_cur = (OSyncCapability *) caplist->data; 112 printf("Capability: %s\n", osync_capability_get_name(cap_cur)); 113 } 114 102 115 fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); 103 116 xmlformat = osync_xmlformat_parse(buffer, size, &error); 104 117 fail_unless(xmlformat != NULL, NULL); … … 115 128 osync_xmlformat_sort(xmlformat_entire, &error); 116 129 fail_unless(error == NULL, NULL); 117 130 118 //osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\n%s", buffer); g_free(buffer);119 //osync_xmlformat_assemble(xmlformat_entire, &buffer, &size); printf("\n%s", buffer); g_free(buffer);131 osync_xmlformat_assemble(xmlformat, &buffer, &size, NULL); printf("XMLFORMAT:\n%s", buffer); g_free(buffer); 132 osync_xmlformat_assemble(xmlformat_entire, &buffer, &size, NULL); printf("XMLFORMAT_ENTIRE\n%s", buffer); g_free(buffer); 120 133 121 fail_unless(merge_xmlformat((char **) &xmlformat, &xmlformat_size, (char *) xmlformat_entire, osync_xmlformat_size(), capabilities, NULL, &error), NULL);122 //osync_xmlformat_assemble(xmlformat, &buffer, &size ); printf("\nMERGED:\n%s", buffer); g_free(buffer);123 fail_unless(demerge_xmlformat((char **) &xmlformat , &xmlformat_size, capabilities, NULL, &error), NULL);124 //osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nDEMERGED:\n%s", buffer); g_free(buffer);134 // fail_unless(merge_xmlformat((char **) &xmlformat, &xmlformat_size, (char *) xmlformat_entire, osync_xmlformat_size(), capabilities, NULL, &error), NULL); 135 //osync_xmlformat_assemble(xmlformat, &buffer, &size, NULL); printf("\nMERGED:\n%s", buffer); g_free(buffer); 136 fail_unless(demerge_xmlformat((char **) &xmlformat_entire, &xmlformat_size, capabilities, NULL, &error), NULL); 137 osync_xmlformat_assemble(xmlformat_entire, &buffer, &size, NULL); printf("\nDEMERGED:\n%s", buffer); g_free(buffer); 125 138 126 139 osync_capabilities_unref(capabilities); 127 140 osync_xmlformat_unref(xmlformat); … … 134 147 Suite *filter_suite(void) 135 148 { 136 149 Suite *s = suite_create("Merger"); 137 create_case(s, "merger_merge", merger_merge);150 // create_case(s, "merger_merge", merger_merge); 138 151 create_case(s, "merger_demerge", merger_demerge); 139 152 return s; 140 153 } -
tests/check_xmlformat.c
199 199 }; 200 200 201 201 result = xmlformat_compare((OSyncXMLFormat*)xmlformat1, (OSyncXMLFormat*)xmlformat2, points, 0, 100); 202 203 osync_xmlformat_assemble(xmlformat1, &buffer1, &size1, NULL); printf("\nXMLFORMAT1:\n%s", buffer1); g_free(buffer1); 204 osync_xmlformat_assemble(xmlformat2, &buffer2, &size2, NULL); printf("\nXMLFORMAT2:\n%s", buffer2); g_free(buffer2); 205 202 206 fail_unless(result == OSYNC_CONV_DATA_SAME, NULL); 203 207 204 208 result = xmlformat_compare((OSyncXMLFormat*)xmlformat2, (OSyncXMLFormat*)xmlformat1, points, 0, 100); -
tests/data/merger/capabilities.xml
2 2 <capabilities> 3 3 <!-- Contacts for the brand new Foo 2000 --> 4 4 <contact> 5 <Name>6 <LastName />7 </Name>8 <Telephone />9 <Categories />10 5 <Address> 11 6 <Street /> 12 7 <City /> 13 8 <Region /> 14 9 </Address> 10 <Categories /> 11 <Name> 12 <LastName /> 13 </Name> 14 <Telephone /> 15 15 </contact> 16 16 </capabilities> -
tests/data/merger/contact-full.xml
1 1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 2 <contact version="1"> 3 <Telephone Type="Cellular">4 <Content>123Full</Content>5 </Telephone>6 3 <Name> 7 <FirstName>JohnFull123</FirstName> 8 <FirstName>JohnFull1123</FirstName> 9 <FirstName>JohnFull11123</FirstName> 10 <LastName>DoeFull</LastName> 4 <FirstName>John</FirstName> 5 <LastName>Doe</LastName> 11 6 </Name> 12 <Address>13 <City>city</City>14 <Region>region</Region>15 <Street>street</Street>16 </Address>17 <Aim>18 <Content>112</Content>19 </Aim>20 <Icq>21 <Content>65465469</Content>22 </Icq>23 7 </contact> -
tests/data/merger/contact.xml
1 1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 2 <contact version="1"> 3 <Telephone Type="Cellular">4 <Content>123</Content>5 </Telephone>6 3 <Name> 7 <FirstName></FirstName>8 <FirstName></FirstName>9 <FirstName></FirstName>10 4 <LastName>Doe</LastName> 11 <DickeBeats>1</DickeBeats>12 <DickeBeats>2</DickeBeats>13 <DickeBeats>3</DickeBeats>14 5 </Name> 15 6 </contact> -
src/xmlformat_merge.c
157 157 } 158 158 else if(ret > 0) 159 159 { 160 160 161 tmp = old_cur; 161 162 old_cur = osync_xmlfield_get_next(old_cur); 162 163 osync_xmlfield_adopt_xmlfield_before_field(new_cur, tmp); … … 213 214 } 214 215 break; 215 216 } 216 217 217 218 rc = strcmp(osync_xmlfield_get_name(cur_xmlfield), osync_capability_get_name(cur_capability)); 218 219 if(rc == 0) { 220 219 221 /* check the secound level here */ 220 222 if(osync_capability_get_childs(cur_capability)) /* if there is no key - it means that the xmlfield can handle all keys */ 221 223 { 222 224 int i, j=0; 223 225 int capability_keys = osync_list_length(osync_capability_get_childs(cur_capability)); 224 226 int xmlfield_keys = osync_xmlfield_get_key_count(cur_xmlfield); 225 226 for(i=0; i < xmlfield_keys; i++) 227 { 228 int krc = 0; 229 if(j == capability_keys) { 230 for(; i < xmlfield_keys; i++) { 231 osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); 232 osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); 233 } 234 break; 227 OSyncXMLField *child_xmlfield = osync_xmlfield_get_child(cur_xmlfield); 228 229 for(; child_xmlfield; child_xmlfield = osync_xmlfield_get_next(child_xmlfield)) { 230 int krc = 0; 231 if(j == capability_keys) { 232 for (; child_xmlfield; child_xmlfield = osync_xmlfield_get_next(child_xmlfield)) { 233 osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s", osync_xmlfield_get_name(cur_xmlfield)); 234 osync_xmlfield_delete(child_xmlfield); 235 235 } 236 break; 237 } 236 238 237 krc = strcmp(osync_xmlfield_get_nth_key_name(cur_xmlfield, i), osync_list_nth_data(osync_capability_get_childs(cur_capability), j)); 238 if(krc == 0) { 239 continue; 240 } 241 if(krc > 0) { 242 j++; 243 continue; 244 } 245 if(krc < 0) { 246 osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); 247 osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); 248 continue; 249 } 250 g_assert_not_reached(); 239 OSyncCapability *child_cap = osync_list_nth_data(osync_capability_get_childs(cur_capability), j); 240 krc = strcmp(osync_xmlfield_get_name(child_xmlfield), osync_capability_get_name(child_cap)); 241 if(krc == 0) { 242 continue; 243 } 244 if(krc > 0) { 245 246 j++; 247 continue; 251 248 } 249 if(krc < 0) { 250 osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s", osync_xmlfield_get_name(child_xmlfield)); 251 osync_xmlfield_delete(child_xmlfield); 252 continue; 253 } 254 g_assert_not_reached(); 255 } 252 256 } 253 257 cur_xmlfield = osync_xmlfield_get_next(cur_xmlfield); 254 258 continue;
