def iterate_list_tables(connection):
    """
    Make as many :class:`.ListTables` actions as needed to iterate over all tables.
    That is until :attr:`.ListTablesResponse.last_evaluated_table_name` is ``None``.

    >>> for table in iterate_list_tables(connection):
    ...   print table
    LowVoltage.Tests.Doc.1
    LowVoltage.Tests.Doc.2
    """

    r = connection(_lv.ListTables())
    for table_name in r.table_names:
        yield table_name
    while r.last_evaluated_table_name is not None:
        r = connection(_lv.ListTables().exclusive_start_table_name(
            r.last_evaluated_table_name))
        for table_name in r.table_names:
            yield table_name
    def test_no_arguments(self):
        r = self.connection(_lv.ListTables())

        self.assertEqual(r.table_names[0], "Aaa")
        self.assertEqual(r.table_names[1], "Bbb")
        self.assertEqual(r.table_names[2], "Ccc")
    def test_all_arguments(self):
        r = self.connection(
            _lv.ListTables().exclusive_start_table_name("Aaa").limit(1))

        self.assertEqual(r.last_evaluated_table_name, "Bbb")
        self.assertEqual(r.table_names[0], "Bbb")