def METHOD_NAME(self):
    """Test multi-level choices."""
    # Creaste three succeeding menu (t2 is contained in t1, t3 is contained in t2)
    def on_nomatch_t1(caller, menu):
        menu.move("whatever")  # this will be valid since after t1 is a joker
    def on_nomatch_t2(caller, menu):
        menu.move("t3")  # this time the key matters
    t1 = self.menu.add_choice("what", key="t1", on_nomatch=on_nomatch_t1)
    t2 = self.menu.add_choice("and", key="t1.*", on_nomatch=on_nomatch_t2)
    t3 = self.menu.add_choice("why", key="t1.*.t3")
    self.menu.open()
    # Move into t1
    self.assertIn(t1, self.menu.relevant_choices)
    self.assertNotIn(t2, self.menu.relevant_choices)
    self.assertNotIn(t3, self.menu.relevant_choices)
    self.assertIsNone(self.menu.current_choice)
    self.call(CmdNoMatch(building_menu=self.menu), "t1")
    self.assertEqual(self.menu.current_choice, t1)
    self.assertNotIn(t1, self.menu.relevant_choices)
    self.assertIn(t2, self.menu.relevant_choices)
    self.assertNotIn(t3, self.menu.relevant_choices)
    # Move into t2
    self.call(CmdNoMatch(building_menu=self.menu), "t2")
    self.assertEqual(self.menu.current_choice, t2)
    self.assertNotIn(t1, self.menu.relevant_choices)
    self.assertNotIn(t2, self.menu.relevant_choices)
    self.assertIn(t3, self.menu.relevant_choices)
    # Move into t3
    self.call(CmdNoMatch(building_menu=self.menu), "t3")
    self.assertEqual(self.menu.current_choice, t3)
    self.assertNotIn(t1, self.menu.relevant_choices)
    self.assertNotIn(t2, self.menu.relevant_choices)
    self.assertNotIn(t3, self.menu.relevant_choices)
    # Move back to t2
    self.call(CmdNoMatch(building_menu=self.menu), "@")
    self.assertEqual(self.menu.current_choice, t2)
    self.assertNotIn(t1, self.menu.relevant_choices)
    self.assertNotIn(t2, self.menu.relevant_choices)
    self.assertIn(t3, self.menu.relevant_choices)
    # Move back into t1
    self.call(CmdNoMatch(building_menu=self.menu), "@")
    self.assertEqual(self.menu.current_choice, t1)
    self.assertNotIn(t1, self.menu.relevant_choices)
    self.assertIn(t2, self.menu.relevant_choices)
    self.assertNotIn(t3, self.menu.relevant_choices)
    # Moves back to the main menu
    self.call(CmdNoMatch(building_menu=self.menu), "@")
    self.assertIn(t1, self.menu.relevant_choices)
    self.assertNotIn(t2, self.menu.relevant_choices)
    self.assertNotIn(t3, self.menu.relevant_choices)
    self.assertIsNone(self.menu.current_choice)
    self.call(CmdNoMatch(building_menu=self.menu), "q")