Customsort test
------------------------------------

Export
+++++++++
here we export folders and documents
::

    >>> self.setRoles(['Manager'])
    >>> folder = self.folder
    >>> id=folder.invokeFactory('Folder',id='f1',title="1")
    >>> id=folder.invokeFactory('Folder',id='f3',title="1")
    >>> id=folder.invokeFactory('Folder',id='f2',title="1")
    >>> folder = self.folder['f1']
    >>> id=folder.invokeFactory('Folder',id='g2',title="1")
    >>> id=folder.invokeFactory('Folder',id='g1',title="1")
    >>> id=folder.invokeFactory('Folder',id='g3',title="1")
    >>> id=folder.invokeFactory('Folder',id='g4',title="1")
    >>> folder = self.folder['f1']['g1']
    >>> id=folder.invokeFactory('Folder',id='h1',title="1")
    >>> id=folder.invokeFactory('Folder',id='h2',title="1")
    >>> id=folder.invokeFactory('Folder',id='h3',title="1")
    >>> id=folder.invokeFactory('Folder',id='h4',title="1")
    >>> folder = self.folder['f2']
    >>> id=folder.invokeFactory('Folder',id='i1',title="1")
    >>> id=folder.invokeFactory('Folder',id='i2',title="1")
    >>> id=folder.invokeFactory('Folder',id='i3',title="1")
    >>> id=folder.invokeFactory('Folder',id='i4',title="1")
    >>> folder = self.folder['f2']['i2']
    >>> id=folder.invokeFactory('Folder',id='j1',title="1")
    >>> id=folder.invokeFactory('Folder',id='j2',title="1")
    >>> id=folder.invokeFactory('Folder',id='j3',title="1")
    >>> from pprint import pprint

    >>> from Products.csvreplicata import replicator
    >>> cat = self.portal.portal_catalog
    >>> def rr():
    ...     reload(replicator)
    >>> items = dict([(a.id, a) for a in cat.searchResults(
    ...   {
    ...    'path': {
    ...      'query':'/'.join(self.folder.getPhysicalPath()),
    ...      'depth':-1
    ...    }
    ...   })])
    >>> tests = [
    ...    ('f1', 'f2'),
    ...    ('f1', 'g1'),
    ...    ('g1', 'g2'),
    ...    ('g1', 'h3'),
    ...    ('f1', 'g4'),
    ...    ('f1', 'h1'),
    ...    ('f1', 'h2'),
    ...    ('f1', 'f2'),
    ...    ('f1', 'i4'),
    ...    ('h2', 'j2'),
    ... ]
    >>> pprint([(a, b, (item[0][0].getPath(),item[0][1]),
    ...          (item[1][0].getPath(),item[1][1]),)
    ... for a, b, item in
    ...  [(a, b, replicator.find_same_level_ancestors(
    ...                         items[a],items[b]))
    ...   for a, b in  tests]]) # doctest: +REPORT_UDIFF
    [('f1',
      'f2',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f2', 2)),
     ('f1',
      'g1',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f1', 0)),
     ('g1',
      'g2',
      ('/plone/Members/test_user_1_/f1/g1', 1),
      ('/plone/Members/test_user_1_/f1/g2', 0)),
     ('g1',
      'h3',
      ('/plone/Members/test_user_1_/f1/g1', 1),
      ('/plone/Members/test_user_1_/f1/g1', 1)),
     ('f1',
      'g4',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f1', 0)),
     ('f1',
      'h1',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f1', 0)),
     ('f1',
      'h2',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f1', 0)),
     ('f1',
      'f2',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f2', 2)),
     ('f1',
      'i4',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f2', 2)),
     ('h2',
      'j2',
      ('/plone/Members/test_user_1_/f1', 0),
      ('/plone/Members/test_user_1_/f2', 2))]
    >>> tests = [
    ...    ('f1', 'f2', -1),
    ...    ('f1', 'g1', -1),
    ...    ('f1', 'g2', -1),
    ...    ('f1', 'g3', -1),
    ...    ('f1', 'g4', -1),
    ...    ('f1', 'h1', -1),
    ...    ('f1', 'h2', -1),
    ...    ('f1', 'h3', -1),
    ...    ('f1', 'h4', -1),
    ...    ('f1', 'i1', -1),
    ...    ('f1', 'i2', -1),
    ...    ('f1', 'i3', -1),
    ...    ('f1', 'i4', -1),
    ...    ('j2', 'h2', -1),
    ...    ('f2', 'f1', 1),
    ...    ('g1', 'f1', 1),
    ...    ('g2', 'f1', 1),
    ...    ('g3', 'f1', 1),
    ...    ('g4', 'f1', 1),
    ...    ('h1', 'f1', 1),
    ...    ('h2', 'f1', 1),
    ...    ('h3', 'f1', 1),
    ...    ('h4', 'f1', 1),
    ...    ('i1', 'f1', 1),
    ...    ('i2', 'f1', 1),
    ...    ('i3', 'f1', 1),
    ...    ('i4', 'f1', 1),
    ...    ('h2', 'j2', 1),
    ... ]
    >>> pprint([(a, b, c, replicator.custom_sort(
    ...                 items[a], items[b],) == c)
    ... for a, b, c in tests]) # doctest: +REPORT_UDIFF
    [('f1', 'f2', -1, True),
     ('f1', 'g1', -1, True),
     ('f1', 'g2', -1, True),
     ('f1', 'g3', -1, True),
     ('f1', 'g4', -1, True),
     ('f1', 'h1', -1, True),
     ('f1', 'h2', -1, True),
     ('f1', 'h3', -1, True),
     ('f1', 'h4', -1, True),
     ('f1', 'i1', -1, True),
     ('f1', 'i2', -1, True),
     ('f1', 'i3', -1, True),
     ('f1', 'i4', -1, True),
     ('j2', 'h2', -1, True),
     ('f2', 'f1', 1, True),
     ('g1', 'f1', 1, True),
     ('g2', 'f1', 1, True),
     ('g3', 'f1', 1, True),
     ('g4', 'f1', 1, True),
     ('h1', 'f1', 1, True),
     ('h2', 'f1', 1, True),
     ('h3', 'f1', 1, True),
     ('h4', 'f1', 1, True),
     ('i1', 'f1', 1, True),
     ('i2', 'f1', 1, True),
     ('i3', 'f1', 1, True),
     ('i4', 'f1', 1, True),
     ('h2', 'j2', 1, True)]



