def METHOD_NAME(self):
    app = wx.App()
    self._value = 0
    self._thread_id = None
    main_id = threading.current_thread().ident
    # Test calling first in a thread, then in the main thread, it should
    # still be ordered
    t = threading.Thread(target=self._store_thread_id_decorated, args=(1,))
    t.start()
    time.sleep(0.1)
    self._store_thread_id_decorated(2)
    app.Yield()  # run the main thread
    self.assertEqual(self._value, 2)
    self.assertEqual(self._thread_id, main_id)
    # Same with the wrapper
    wf = call_in_wx_main_wrapper(self._store_thread_id)
    t = threading.Thread(target=wf, args=(3,))
    t.start()
    time.sleep(0.1)
    wf(4)
    app.Yield()  # run the main thread
    self.assertEqual(self._value, 4)
    self.assertEqual(self._thread_id, main_id)
    app.Destroy()