How to use compare_complex_stuff method in Sure

Best Python code snippet using sure_python

core.py

Source:core.py Github

copy

Full Screen

...96 def is_simple(self, obj):97 return isinstance(obj, (98 string_types, integer_types99 ))100 def compare_complex_stuff(self, X, Y):101 kind = type(X)102 mapping = {103 float: self.compare_floats,104 dict: self.compare_dicts,105 list: self.compare_iterables,106 tuple: self.compare_iterables,107 }108 return mapping.get(kind, self.compare_generic)(X, Y)109 def compare_generic(self, X, Y):110 c = self.get_context()111 if X == Y:112 return True113 else:114 m = 'X%s != Y%s' % (red(c.current_X_keys), green(c.current_Y_keys))115 return DeepExplanation(m)116 def compare_floats(self, X, Y):117 c = self.get_context()118 if self.epsilon is None:119 return self.compare_generic(X, Y)120 if abs(X - Y) <= self.epsilon:121 return True122 else:123 m = 'X%s±%s != Y%s±%s' % (red(c.current_X_keys), self.epsilon, green(c.current_Y_keys), self.epsilon)124 return DeepExplanation(m)125 def compare_dicts(self, X, Y):126 c = self.get_context()127 x_keys = list(sorted(X.keys()))128 y_keys = list(sorted(Y.keys()))129 diff_x = list(set(x_keys).difference(set(y_keys)))130 diff_y = list(set(y_keys).difference(set(x_keys)))131 if diff_x:132 msg = "X%s has the key %%r whereas Y%s does not" % (133 red(c.current_X_keys),134 green(c.current_Y_keys),135 ) % diff_x[0]136 return DeepExplanation(msg)137 elif diff_y:138 msg = "X%s does not have the key %%r whereas Y%s has it" % (139 red(c.current_X_keys),140 green(c.current_Y_keys),141 ) % diff_y[0]142 return DeepExplanation(msg)143 elif X == Y:144 return True145 else:146 for key_X, key_Y in zip(x_keys, y_keys):147 self.key_X = key_X148 self.key_Y = key_Y149 value_X = X[key_X]150 value_Y = Y[key_Y]151 child = DeepComparison(152 value_X,153 value_Y,154 epsilon=self.epsilon,155 parent=self,156 ).compare()157 if isinstance(child, DeepExplanation):158 return child159 def get_context(self):160 if self._context:161 return self._context162 X_keys = []163 Y_keys = []164 comp = self165 while comp.parent:166 X_keys.insert(0, comp.parent.key_X)167 Y_keys.insert(0, comp.parent.key_Y)168 comp = comp.parent169 def get_keys(i):170 if not i:171 return ''172 return '[%s]' % ']['.join(map(safe_repr, i))173 class ComparisonContext:174 current_X_keys = get_keys(X_keys)175 current_Y_keys = get_keys(Y_keys)176 parent = comp177 self._context = ComparisonContext()178 return self._context179 def compare_iterables(self, X, Y):180 len_X, len_Y = map(len, (X, Y))181 if len_X > len_Y:182 msg = "X has %d items whereas Y has only %d" % (len_X, len_Y)183 return DeepExplanation(msg)184 elif len_X < len_Y:185 msg = "Y has %d items whereas X has only %d" % (len_Y, len_X)186 return DeepExplanation(msg)187 elif X == Y:188 return True189 else:190 for i, (value_X, value_Y) in enumerate(zip(X, Y)):191 self.key_X = self.key_Y = i192 child = DeepComparison(193 value_X,194 value_Y,195 epsilon=self.epsilon,196 parent=self,197 ).compare()198 if isinstance(child, DeepExplanation):199 return child200 def compare(self):201 X, Y = self.operands202 if isinstance(X, mock._CallList):203 X = list(X)204 if isinstance(Y, mock._CallList):205 X = list(Y)206 c = self.get_context()207 if self.is_simple(X) and self.is_simple(Y): # both simple208 if X == Y:209 return True210 c = self.get_context()211 m = "X%s is %%r whereas Y%s is %%r"212 msg = m % (red(c.current_X_keys), green(c.current_Y_keys)) % (X, Y)213 return DeepExplanation(msg)214 elif type(X) is not type(Y): # different types215 xname, yname = map(lambda _: type(_).__name__, (X, Y))216 msg = 'X%s is a %%s and Y%s is a %%s instead' % (217 red(c.current_X_keys),218 green(c.current_Y_keys),219 ) % (xname, yname)220 exp = DeepExplanation(msg)221 else:222 exp = self.compare_complex_stuff(X, Y)223 if isinstance(exp, DeepExplanation):224 original_X, original_Y = c.parent.operands225 raise exp.as_assertion(original_X, original_Y)226 return exp227 def explanation(self):228 return self._explanation229def _get_file_name(func):230 try:231 name = inspect.getfile(func)232 except AttributeError:233 name = get_function_code(func).co_filename234 return os.path.abspath(name)235def _get_line_number(func):236 try:...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Sure automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful