code: def assert_messages_equal(result, expected, msg=""):
      """Assertion helper for comparing very long strings (e.g. error messages)."""
      # The arg here is "keepends" which keeps trailing newlines (which
      # matters for checking trailing whitespace). You can't pass keepends by
      # name :(.
      left_lines = result.splitlines(True)
      right_lines = expected.splitlines(True)
      iter_lines = enumerate(zip_longest(left_lines, right_lines))
      for line, (ll, rl) in iter_lines:
          if ll != rl:
              col = index_of_first_difference(ll, rl)
              raise AssertionError(
                  "{msg}Messages differ on line {line}, col {col}:"
                  "\n{ll!r}\n!=\n{rl!r}".format(
                      msg=_fmt_msg(msg),
                      line=line,
                      col=col,
                      ll=ll,
                      rl=rl,
                  )
              )
  
imports: from collections import OrderedDict
  from contextlib import contextmanager
  import datetime
  from functools import partial
  import re
  from nose.tools import assert_almost_equal, assert_almost_equals, assert_dict_contains_subset, assert_false, assert_greater, assert_greater_equal, assert_in, assert_is, assert_is_instance, assert_is_none, assert_is_not, assert_is_not_none, assert_less, assert_less_equal, assert_multi_line_equal, assert_not_almost_equal, assert_not_almost_equals, assert_not_equal, assert_not_equals, assert_not_in, assert_not_is_instance, assert_raises, assert_raises_regexp, assert_regexp_matches, assert_true, assert_tuple_equal
  import numpy
  import pandas
  from pandas.util.testing import assert_frame_equal, assert_panel_equal, assert_series_equal, assert_index_equal
  from six import iteritems, viewkeys, PY2
  from six.moves import zip_longest
  from toolz import dissoc, keyfilter
  import toolz.curried.operator
  from zipline.assets import Asset
  from zipline.dispatch import dispatch
  from zipline.lib.adjustment import Adjustment
  from zipline.lib.labelarray import LabelArray
  from zipline.testing.core import ensure_doctest
  from zipline.utils.compat import getargspec, mappingproxy
  from zipline.utils.formatting import s
  from zipline.utils.functional import dzip_exact, instance
  from zipline.utils.math_utils import tolerant_equals
  from zipline.utils.numpy_utils import assert_array_compare, compare_datetime_arrays
label_desc: Use image node_id 30 for calling a global function with example usage: assert_messages_equal(result, expected, msg) without return types