77 """ compare 2 dicts of components
78 dicts are of the form:
79 { 'comp_type' : <name of component>,
80 'cxx_type' : <C++ type of the component>,
81 'props' : { 'property-name' : 'property-value', }
85 ref_keys =
set(ref.keys())
86 chk_keys =
set(chk.keys())
88 common_keys = ref_keys & chk_keys
89 ref_only_keys = ref_keys - chk_keys
90 chk_only_keys = chk_keys - ref_keys
92 print (
"::: components in both files: [%5s]" % (len(common_keys),))
93 print (
"::: components in ref only: [%5s]" % (len(ref_only_keys),))
94 if len(ref_only_keys)>0:
97 print (
"::: components in chk only: [%5s]" % (len(chk_only_keys),))
98 if len(chk_only_keys)>0:
103 for comp_name
in common_keys:
104 comp_ref = ref[comp_name]
105 comp_chk = chk[comp_name]
109 if ref_props != chk_props:
110 diff.append((comp_name, ref_props, chk_props,
112 chk=comp_chk[
'props'])))
115 print (
"::: components with different properties: [%5s]" % (len(diff),))
116 for name, ref_props, chk_props, diff_props
in diff:
117 print (
"::: - component: [%s]" % (name,))
118 for prop_name, prop_value
in diff_props.iteritems():
119 ref_value = prop_value[0]
120 chk_value = prop_value[1]
121 if isinstance(ref_value, list):
122 ref_value =
sorted(ref_value)
123 if isinstance(chk_value, list):
124 chk_value =
sorted(chk_value)
126 if isinstance(ref_value, list)
and isinstance(chk_value, list):
127 dref_value =
set(ref_value) -
set(chk_value)
128 dchk_value =
set(chk_value) -
set(ref_value)
131 print (
"-%s: %r" %(prop_name, ref_value,))
132 print (
"+%s: %r" %(prop_name, chk_value,))
135 if (len(ref_only_keys) > 0
or
136 len(chk_only_keys) > 0
or