Firstly, based on the testng dtd, you cannot put preserve-order in the suite tag.
Secondly, I cannot reproduce your problem, everything works for me. try see my log:
Which version of testng are u using now? I use latest version of testng.
[TestNG] Running:
C:\Users\etigwuu\github\testng\src\main\java\gg\error2.xml
beforeMethod()
HAHAH
afterMethod()
===============================================
DemoSuite3
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Running:
C:\Users\etigwuu\github\testng\src\main\java\gg\error3.xml
beforeMethod()
HAHAH
afterMethod()
===============================================
DemoSuite2
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Running:
C:\Users\etigwuu\github\testng\src\main\java\gg\testng_test.xml
beforeMethod()
HAHAH
afterMethod()
===============================================
DemoSuite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Running:
C:\Users\etigwuu\github\testng\src\main\java\gg\testng-failed.xml
beforeMethod()
HAHAH
afterMethod()
===============================================
DemoSuite5
Total tests run: 1, Failures: 0, Skips: 0
===============================================