[lldb/tests] Removed add_test_categories decorator for python API tests, NFC

There is a .categories file in the python_api directory that makes all nested tests
belong to the category "pyapi". The decorator is unnecessary for these tests.

GitOrigin-RevId: 05d7d6949c7cd3f1566d4c8394fa59160a7ffd05
diff --git a/test/API/python_api/breakpoint/TestBreakpointAPI.py b/test/API/python_api/breakpoint/TestBreakpointAPI.py
index 80324ee..bd02b76 100644
--- a/test/API/python_api/breakpoint/TestBreakpointAPI.py
+++ b/test/API/python_api/breakpoint/TestBreakpointAPI.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_breakpoint_is_valid(self):
         """Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
         self.build()
@@ -45,7 +44,6 @@
             not breakpoint,
             "Breakpoint we deleted is no longer valid.")
 
-    @add_test_categories(['pyapi'])
     def test_target_delete(self):
         """Make sure that if an SBTarget gets deleted the associated
         Breakpoint's IsValid returns false."""
diff --git a/test/API/python_api/class_members/TestSBTypeClassMembers.py b/test/API/python_api/class_members/TestSBTypeClassMembers.py
index 091bb1b..061556a 100644
--- a/test/API/python_api/class_members/TestSBTypeClassMembers.py
+++ b/test/API/python_api/class_members/TestSBTypeClassMembers.py
@@ -24,7 +24,6 @@
         self.line = line_number(self.source, '// set breakpoint here')
 
     @skipUnlessDarwin
-    @add_test_categories(['pyapi'])
     def test(self):
         """Test SBType APIs to fetch member function types."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/debugger/TestDebuggerAPI.py b/test/API/python_api/debugger/TestDebuggerAPI.py
index 1559714..f9fe64d 100644
--- a/test/API/python_api/debugger/TestDebuggerAPI.py
+++ b/test/API/python_api/debugger/TestDebuggerAPI.py
@@ -14,7 +14,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_debugger_api_boundary_condition(self):
         """Exercise SBDebugger APIs with boundary conditions."""
         self.dbg.HandleCommand(None)
@@ -37,7 +36,6 @@
         fresh_dbg = lldb.SBDebugger()
         self.assertEquals(len(fresh_dbg), 0)
 
-    @add_test_categories(['pyapi'])
     def test_debugger_delete_invalid_target(self):
         """SBDebugger.DeleteTarget() should not crash LLDB given and invalid target."""
         target = lldb.SBTarget()
diff --git a/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py b/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
index 65c4dac..d69e13f 100644
--- a/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
+++ b/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
@@ -25,7 +25,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_SBAddress(self):
         obj = lldb.SBAddress()
         if self.TraceOn():
@@ -35,7 +34,6 @@
         import sb_address
         sb_address.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBlock(self):
         obj = lldb.SBBlock()
         if self.TraceOn():
@@ -45,7 +43,6 @@
         import sb_block
         sb_block.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpoint(self):
         obj = lldb.SBBreakpoint()
         if self.TraceOn():
@@ -55,7 +52,6 @@
         import sb_breakpoint
         sb_breakpoint.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpointLocation(self):
         obj = lldb.SBBreakpointLocation()
         if self.TraceOn():
@@ -65,7 +61,6 @@
         import sb_breakpointlocation
         sb_breakpointlocation.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBreakpointName(self):
         obj = lldb.SBBreakpointName()
         if self.TraceOn():
@@ -75,7 +70,6 @@
         import sb_breakpointname
         sb_breakpointname.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBBroadcaster(self):
         obj = lldb.SBBroadcaster()
         if self.TraceOn():
@@ -85,7 +79,6 @@
         import sb_broadcaster
         sb_broadcaster.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCommandReturnObject(self):
         """SBCommandReturnObject object is valid after default construction."""
         obj = lldb.SBCommandReturnObject()
@@ -93,7 +86,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCommunication(self):
         obj = lldb.SBCommunication()
         if self.TraceOn():
@@ -103,7 +95,6 @@
         import sb_communication
         sb_communication.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBCompileUnit(self):
         obj = lldb.SBCompileUnit()
         if self.TraceOn():
@@ -113,7 +104,6 @@
         import sb_compileunit
         sb_compileunit.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_SBDebugger(self):
         obj = lldb.SBDebugger()
@@ -124,7 +114,6 @@
         import sb_debugger
         sb_debugger.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     # darwin: This test passes with swig 3.0.2, fails w/3.0.5 other tests fail
     # with 2.0.12 http://llvm.org/pr23488
     def test_SBError(self):
@@ -136,7 +125,6 @@
         import sb_error
         sb_error.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBEvent(self):
         obj = lldb.SBEvent()
         # This is just to test that typemap, as defined in lldb.swig, works.
@@ -148,7 +136,6 @@
         import sb_event
         sb_event.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFileSpec(self):
         obj = lldb.SBFileSpec()
         # This is just to test that FileSpec(None) does not crash.
@@ -160,7 +147,6 @@
         import sb_filespec
         sb_filespec.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFrame(self):
         obj = lldb.SBFrame()
         if self.TraceOn():
@@ -170,7 +156,6 @@
         import sb_frame
         sb_frame.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBFunction(self):
         obj = lldb.SBFunction()
         if self.TraceOn():
@@ -180,7 +165,6 @@
         import sb_function
         sb_function.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_SBFile(self):
         sbf = lldb.SBFile()
@@ -194,7 +178,6 @@
         self.assertEqual(n, 0)
         self.assertTrue(e.Fail())
 
-    @add_test_categories(['pyapi'])
     def test_SBInstruction(self):
         obj = lldb.SBInstruction()
         if self.TraceOn():
@@ -204,7 +187,6 @@
         import sb_instruction
         sb_instruction.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBInstructionList(self):
         obj = lldb.SBInstructionList()
         if self.TraceOn():
@@ -214,7 +196,6 @@
         import sb_instructionlist
         sb_instructionlist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBLineEntry(self):
         obj = lldb.SBLineEntry()
         if self.TraceOn():
@@ -224,7 +205,6 @@
         import sb_lineentry
         sb_lineentry.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBListener(self):
         obj = lldb.SBListener()
         if self.TraceOn():
@@ -234,7 +214,6 @@
         import sb_listener
         sb_listener.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     # Py3 asserts due to a bug in SWIG.  Trying to upstream a patch to fix
     # this in 3.0.8
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
@@ -247,7 +226,6 @@
         import sb_module
         sb_module.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBProcess(self):
         obj = lldb.SBProcess()
         if self.TraceOn():
@@ -257,7 +235,6 @@
         import sb_process
         sb_process.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBProcessInfo(self):
         obj = lldb.SBProcessInfo()
         if self.TraceOn():
@@ -267,7 +244,6 @@
         import sb_process_info
         sb_process_info.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSection(self):
         obj = lldb.SBSection()
         if self.TraceOn():
@@ -277,7 +253,6 @@
         import sb_section
         sb_section.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBStream(self):
         """SBStream object is valid after default construction."""
         obj = lldb.SBStream()
@@ -285,7 +260,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBStringList(self):
         obj = lldb.SBStringList()
         if self.TraceOn():
@@ -295,7 +269,6 @@
         import sb_stringlist
         sb_stringlist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbol(self):
         obj = lldb.SBSymbol()
         if self.TraceOn():
@@ -305,7 +278,6 @@
         import sb_symbol
         sb_symbol.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbolContext(self):
         obj = lldb.SBSymbolContext()
         if self.TraceOn():
@@ -315,7 +287,6 @@
         import sb_symbolcontext
         sb_symbolcontext.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBSymbolContextList(self):
         """SBSymbolContextList object is valid after default construction."""
         obj = lldb.SBSymbolContextList()
@@ -323,7 +294,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBTarget(self):
         obj = lldb.SBTarget()
         if self.TraceOn():
@@ -333,7 +303,6 @@
         import sb_target
         sb_target.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBThread(self):
         obj = lldb.SBThread()
         if self.TraceOn():
@@ -343,7 +312,6 @@
         import sb_thread
         sb_thread.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBType(self):
         try:
             obj = lldb.SBType()
@@ -361,7 +329,6 @@
         import sb_type
         sb_type.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBTypeList(self):
         """SBTypeList object is valid after default construction."""
         obj = lldb.SBTypeList()
@@ -369,7 +336,6 @@
             print(obj)
         self.assertTrue(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBValue(self):
         obj = lldb.SBValue()
         if self.TraceOn():
@@ -379,7 +345,6 @@
         import sb_value
         sb_value.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBValueList(self):
         obj = lldb.SBValueList()
         if self.TraceOn():
@@ -389,7 +354,6 @@
         import sb_valuelist
         sb_valuelist.fuzz_obj(obj)
 
-    @add_test_categories(['pyapi'])
     def test_SBWatchpoint(self):
         obj = lldb.SBWatchpoint()
         if self.TraceOn():
diff --git a/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py b/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
index 80b39d2..6be7d01 100644
--- a/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
+++ b/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
@@ -16,7 +16,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfRemote
     @skipIfReproducer # GetInstructions is not instrumented.
diff --git a/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py b/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
index 86c51a2..9260b72 100644
--- a/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
+++ b/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
@@ -17,7 +17,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfLLVMTargetMissing("ARM")
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
diff --git a/test/API/python_api/event/TestEvents.py b/test/API/python_api/event/TestEvents.py
index b53163b..95cf5b2 100644
--- a/test/API/python_api/event/TestEvents.py
+++ b/test/API/python_api/event/TestEvents.py
@@ -26,7 +26,6 @@
         self.line = line_number(
             'main.c', '// Find the line number of function "c" here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(
         oslist=["linux"],
         bugnumber="llvm.org/pr23730 Flaky, fails ~1/10 cases")
@@ -119,7 +118,6 @@
 
         # Shouldn't we be testing against some kind of expectation here?
 
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux("llvm.org/pr23730")  # Flaky, fails ~1/100 cases
     @skipIfWindows # This is flakey on Windows AND when it fails, it hangs: llvm.org/pr38373
     @skipIfNetBSD
@@ -197,7 +195,6 @@
         self.assertTrue(event,
                         "My listening thread successfully received an event")
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(
         oslist=["linux"],
         bugnumber="llvm.org/pr23617 Flaky, fails ~1/10 cases")
diff --git a/test/API/python_api/file_handle/TestFileHandle.py b/test/API/python_api/file_handle/TestFileHandle.py
index bbcb112..286b3ee 100644
--- a/test/API/python_api/file_handle/TestFileHandle.py
+++ b/test/API/python_api/file_handle/TestFileHandle.py
@@ -119,7 +119,6 @@
         return ret.GetOutput()
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_out_script(self):
         with open(self.out_filename, 'w') as f:
@@ -135,7 +134,6 @@
             self.assertEqual(readStrippedLines(f), ['2', 'FOO'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_out(self):
         with open(self.out_filename, 'w') as f:
@@ -144,7 +142,6 @@
         with open(self.out_filename, 'r') as f:
             self.assertIn('deadbeef', f.read())
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_err_with_get(self):
         with open(self.out_filename, 'w') as f:
@@ -159,7 +156,6 @@
             self.assertTrue(re.search(r'FOOBAR', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_err(self):
         with open(self.out_filename, 'w') as f:
@@ -169,7 +165,6 @@
             self.assertIn("is not a valid command", f.read())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_legacy_file_error(self):
         with open(self.out_filename, 'w') as f:
@@ -179,7 +174,6 @@
             errors = f.read()
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_type_errors(self):
         sbf = lldb.SBFile()
@@ -190,7 +184,6 @@
         self.assertRaises(Exception, sbf.Read, u"ham sandwich")
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_fileno(self):
         with open(self.out_filename, 'w') as f:
@@ -205,7 +198,6 @@
             self.assertEqual(readStrippedLines(f), ['FOO', 'BAR'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write(self):
         with open(self.out_filename, 'w') as f:
@@ -219,7 +211,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_fileno(self):
         with open(self.out_filename, 'w') as f:
@@ -233,7 +224,6 @@
             self.assertEqual(buffer[:n], b'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read(self):
         with open(self.out_filename, 'w') as f:
@@ -249,7 +239,6 @@
             self.assertTrue(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_out(self):
         with open(self.out_filename, 'w') as f:
@@ -264,7 +253,6 @@
             self.assertEqual(readStrippedLines(f), ['3', 'quux'])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_help(self):
         with open(self.out_filename, 'w') as f:
@@ -276,7 +264,6 @@
             self.assertTrue(re.search(r'Show a list of all debugger commands', f.read()))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_help(self):
         with open(self.out_filename, 'w') as f:
@@ -287,7 +274,6 @@
             self.assertIn('Show a list of all debugger commands', f.read())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate(self):
         with open(self.out_filename, 'w') as f:
@@ -304,7 +290,6 @@
             self.assertTrue(re.search(r'QUUX', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate_string(self):
@@ -321,7 +306,6 @@
         self.assertTrue(re.search(r'QUUX', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_immediate_sbfile_string(self):
@@ -337,7 +321,6 @@
         self.assertTrue(re.search(r'Show a list of all debugger commands', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -361,7 +344,6 @@
             self.assertTrue(re.search(r'Show a list of all debugger commands', f.read()))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -380,7 +362,6 @@
             self.assertIn('Show a list of all debugger commands', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_binary_inout(self):
         with open(self.in_filename, 'w') as f:
@@ -399,7 +380,6 @@
             self.assertIn('Show a list of all debugger commands', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_inout(self):
@@ -417,7 +397,6 @@
         self.assertIn('0xfff', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_bytes_inout(self):
@@ -435,7 +414,6 @@
         self.assertIn(b'Set a breakpoint', output)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_error(self):
         with open(self.out_filename, 'w') as f:
@@ -454,7 +432,6 @@
             self.assertTrue(re.search(r'zork', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_replace_stdout(self):
         f = io.StringIO()
@@ -465,7 +442,6 @@
             self.assertEqual(sys.stdout, f)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_replace_stdout_with_nonfile(self):
         f = io.StringIO()
@@ -481,7 +457,6 @@
         self.assertEqual(f.getvalue(), "FOO")
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_borrowed(self):
         with open(self.out_filename, 'w') as f:
@@ -497,7 +472,6 @@
 
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_forced(self):
@@ -519,7 +493,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_forced_borrowed(self):
@@ -541,7 +514,6 @@
             self.assertEqual(f.read().strip(), 'FOO')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_string(self):
@@ -555,7 +527,6 @@
         self.assertTrue(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_out(self):
@@ -566,7 +537,6 @@
         self.assertEqual(f.getvalue().strip(), "'foobar'")
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_string_error(self):
@@ -578,7 +548,6 @@
         self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_write_bytes(self):
@@ -591,7 +560,6 @@
         sbf.Close()
         self.assertTrue(f.closed)
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_string(self):
@@ -603,7 +571,6 @@
         self.assertEqual(buf[:n], b'zork')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_string_one_byte(self):
@@ -616,7 +583,6 @@
         self.assertEqual(e.GetCString(), "can't read less than 6 bytes from a utf8 text stream")
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_read_bytes(self):
@@ -628,7 +594,6 @@
         self.assertEqual(buf[:n], b'zork')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_out(self):
@@ -641,7 +606,6 @@
             self.assertEqual(f.read().strip(), '4')
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_file_out(self):
@@ -653,7 +617,6 @@
             self.assertEqual(f.read().strip(), '4')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbfile_error(self):
         with open(self.out_filename, 'w') as f:
@@ -666,7 +629,6 @@
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_file_error(self):
         with open(self.out_filename, 'w') as f:
@@ -678,7 +640,6 @@
             self.assertTrue(re.search(r'error:.*lolwut', errors))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_exceptions(self):
         self.assertRaises(Exception, lldb.SBFile, None)
@@ -697,7 +658,6 @@
             self.assertIn('OH NOE', error.GetCString())
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_exceptions_logged(self):
@@ -709,7 +669,6 @@
         self.assertTrue(any('OH NOE' in msg for msg in messages))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_flush(self):
@@ -740,7 +699,6 @@
         self.assertFalse(f.closed)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_fileno_flush(self):
         with open(self.out_filename, 'w') as f:
@@ -762,7 +720,6 @@
             self.assertEqual(f.read(), 'foobar')
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_close(self):
         with open(self.out_filename, 'w') as f:
@@ -781,7 +738,6 @@
             self.assertTrue(re.search(r'ZAP', output))
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_stdout(self):
@@ -792,7 +748,6 @@
         self.assertEqual(f.getvalue().strip().split(), ["foobar", "7"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_stdout_file(self):
         with open(self.out_filename, 'w') as f:
@@ -808,7 +763,6 @@
             self.assertEqual(lines, ["foobar"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIf(py_version=['<', (3,)])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_identity(self):
@@ -865,7 +819,6 @@
             self.assertEqual("foobar", f.read().strip())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_back_and_forth(self):
         with open(self.out_filename, 'w') as f:
@@ -885,7 +838,6 @@
             self.assertEqual(list(range(10)), list(map(int, f.read().strip().split())))
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_set_filehandle_none(self):
         self.assertRaises(Exception, self.dbg.SetOutputFile, None)
@@ -924,7 +876,6 @@
                 self.assertEqual(sbf.GetFile().fileno(), 0)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # lldb::FileSP used in typemap cannot be instrumented.
     def test_sbstream(self):
 
diff --git a/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py b/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
index 4042052..727c114 100644
--- a/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
+++ b/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     def test_formatters_api(self):
         """Test that SBFrame::FindValue finds things but does not duplicate the entire variables list"""
         self.build()
diff --git a/test/API/python_api/formatters/TestFormattersSBAPI.py b/test/API/python_api/formatters/TestFormattersSBAPI.py
index 3f8329c..ac135b9 100644
--- a/test/API/python_api/formatters/TestFormattersSBAPI.py
+++ b/test/API/python_api/formatters/TestFormattersSBAPI.py
@@ -19,7 +19,6 @@
         TestBase.setUp(self)
         self.line = line_number('main.cpp', '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_formatters_api(self):
         """Test Python APIs for working with formatters"""
         self.build()
@@ -436,7 +435,6 @@
                 lldb.eLanguageTypeObjC) is not None,
             "ObjC category is None")
 
-    @add_test_categories(['pyapi'])
     def test_force_synth_off(self):
         """Test that one can have the public API return non-synthetic SBValues if desired"""
         self.build(dictionary={'EXE': 'no_synth'})
diff --git a/test/API/python_api/frame/TestFrames.py b/test/API/python_api/frame/TestFrames.py
index c8a58ad..f02257a 100644
--- a/test/API/python_api/frame/TestFrames.py
+++ b/test/API/python_api/frame/TestFrames.py
@@ -16,7 +16,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_arg_vals_for_call_stack(self):
         """Exercise SBFrame.GetVariables() API to get argument vals."""
         self.build()
@@ -120,7 +119,6 @@
                     substrs=["a((int)val=1, (char)ch='A')",
                              "a((int)val=3, (char)ch='A')"])
 
-    @add_test_categories(['pyapi'])
     def test_frame_api_boundary_condition(self):
         """Exercise SBFrame APIs with boundary condition inputs."""
         self.build()
@@ -162,7 +160,6 @@
 
         frame.EvaluateExpression(None)
 
-    @add_test_categories(['pyapi'])
     def test_frame_api_IsEqual(self):
         """Exercise SBFrame API IsEqual."""
         self.build()
diff --git a/test/API/python_api/frame/inlines/TestInlinedFrame.py b/test/API/python_api/frame/inlines/TestInlinedFrame.py
index 46b9b9f..aa8c9c3 100644
--- a/test/API/python_api/frame/inlines/TestInlinedFrame.py
+++ b/test/API/python_api/frame/inlines/TestInlinedFrame.py
@@ -25,7 +25,6 @@
         self.second_stop = line_number(
             self.source, '// This should correspond to the second break stop.')
 
-    @add_test_categories(['pyapi'])
     def test_stop_at_outer_inline(self):
         """Exercise SBFrame.IsInlined() and SBFrame.GetFunctionName()."""
         self.build()
diff --git a/test/API/python_api/function_symbol/TestDisasmAPI.py b/test/API/python_api/function_symbol/TestDisasmAPI.py
index d67798e..c884241 100644
--- a/test/API/python_api/function_symbol/TestDisasmAPI.py
+++ b/test/API/python_api/function_symbol/TestDisasmAPI.py
@@ -24,7 +24,6 @@
         self.line2 = line_number(
             'main.c', '// Find the line number for breakpoint 2 here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test(self):
         """Exercise getting SBAddress objects, disassembly, and SBAddress APIs."""
diff --git a/test/API/python_api/function_symbol/TestSymbolAPI.py b/test/API/python_api/function_symbol/TestSymbolAPI.py
index 09e7db7..14b01d5 100644
--- a/test/API/python_api/function_symbol/TestSymbolAPI.py
+++ b/test/API/python_api/function_symbol/TestSymbolAPI.py
@@ -24,7 +24,6 @@
         self.line2 = line_number(
             'main.c', '// Find the line number for breakpoint 2 here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test(self):
         """Exercise some SBSymbol and SBAddress APIs."""
diff --git a/test/API/python_api/hello_world/TestHelloWorld.py b/test/API/python_api/hello_world/TestHelloWorld.py
index ea8b9a7..0f616f4 100644
--- a/test/API/python_api/hello_world/TestHelloWorld.py
+++ b/test/API/python_api/hello_world/TestHelloWorld.py
@@ -26,7 +26,6 @@
         # Call super's tearDown().
         TestBase.tearDown(self)
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     def test_with_process_launch_api(self):
         """Create target, breakpoint, launch a process, and then kill it."""
@@ -72,7 +71,6 @@
         # The breakpoint should have a hit count of 1.
         self.assertEqual(breakpoint.GetHitCount(), 1, BREAKPOINT_HIT_ONCE)
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     @skipIfReproducer # File synchronization is not supported during replay.
     def test_with_attach_to_process_with_id_api(self):
@@ -104,7 +102,6 @@
                     substrs=['main.c:%d' % self.line2,
                              '(int)argc=2'])
 
-    @add_test_categories(['pyapi'])
     @skipIfiOSSimulator
     @skipIfAsan # FIXME: Hangs indefinitely.
     @skipIfReproducer # FIXME: Unexpected packet during (active) replay
diff --git a/test/API/python_api/interpreter/TestCommandInterpreterAPI.py b/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
index a920ce8..151d445 100644
--- a/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
+++ b/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
@@ -20,7 +20,6 @@
         # Find the line number to break on inside main.cpp.
         self.line = line_number('main.c', 'Hello world.')
 
-    @add_test_categories(['pyapi'])
     def test_with_process_launch_api(self):
         """Test the SBCommandInterpreter APIs."""
         self.build()
@@ -74,7 +73,6 @@
         if self.TraceOn():
             lldbutil.print_stacktraces(process)
 
-    @add_test_categories(['pyapi'])
     def test_command_output(self):
         """Test command output handling."""
         ci = self.dbg.GetCommandInterpreter()
diff --git a/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py b/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
index 9f30f6a..86d7f78 100644
--- a/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
+++ b/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -30,7 +30,6 @@
         self.dbg.SetOutputFileHandle(self.devnull, False)
         self.dbg.SetErrorFileHandle (self.devnull, False)
 
-    @add_test_categories(['pyapi'])
     def test_run_session_with_error_and_quit_legacy(self):
         """Run non-existing and quit command returns appropriate values"""
 
@@ -64,7 +63,6 @@
         self.dbg.SetOutputFile(devnull)
         self.dbg.SetErrorFile(devnull)
 
-    @add_test_categories(['pyapi'])
     def test_run_session_with_error_and_quit(self):
         """Run non-existing and quit command returns appropriate values"""
 
diff --git a/test/API/python_api/lldbutil/frame/TestFrameUtils.py b/test/API/python_api/lldbutil/frame/TestFrameUtils.py
index 09a179c..9c69bd9 100644
--- a/test/API/python_api/lldbutil/frame/TestFrameUtils.py
+++ b/test/API/python_api/lldbutil/frame/TestFrameUtils.py
@@ -22,7 +22,6 @@
         self.line = line_number('main.c',
                                 "// Find the line number here.")
 
-    @add_test_categories(['pyapi'])
     def test_frame_utils(self):
         """Test utility functions for the frame object."""
         self.build()
diff --git a/test/API/python_api/lldbutil/iter/TestLLDBIterator.py b/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
index 4cd4970..4fdde97 100644
--- a/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
+++ b/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
@@ -23,7 +23,6 @@
             'main.cpp', '// Set break point at this line.')
         self.line2 = line_number('main.cpp', '// And that line.')
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_module(self):
         """Test module_iter works correctly for SBTarget -> SBModule."""
         self.build()
@@ -59,7 +58,6 @@
                 yours[i], mine[i],
                 "UUID+FileSpec of yours[{0}] and mine[{0}] matches".format(i))
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_breakpoint(self):
         """Test breakpoint_iter works correctly for SBTarget -> SBBreakpoint."""
         self.build()
@@ -91,7 +89,6 @@
             self.assertEqual(yours[i], mine[i],
                             "ID of yours[{0}] and mine[{0}] matches".format(i))
 
-    @add_test_categories(['pyapi'])
     def test_lldb_iter_frame(self):
         """Test iterator works correctly for SBProcess->SBThread->SBFrame."""
         self.build()
diff --git a/test/API/python_api/lldbutil/iter/TestRegistersIterator.py b/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
index fbb8bff..6c8c045 100644
--- a/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
+++ b/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
@@ -22,7 +22,6 @@
         self.line1 = line_number(
             'main.cpp', '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_iter_registers(self):
         """Test iterator works correctly for lldbutil.iter_registers()."""
         self.build()
diff --git a/test/API/python_api/lldbutil/process/TestPrintStackTraces.py b/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
index 123b60e..4ac7b7c 100644
--- a/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
+++ b/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
@@ -14,7 +14,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_stack_traces(self):
         """Test SBprocess and SBThread APIs with printing of the stack traces."""
         self.build()
diff --git a/test/API/python_api/module_section/TestModuleAndSection.py b/test/API/python_api/module_section/TestModuleAndSection.py
index 95d4576..3bb26a2 100644
--- a/test/API/python_api/module_section/TestModuleAndSection.py
+++ b/test/API/python_api/module_section/TestModuleAndSection.py
@@ -19,7 +19,6 @@
     # Py3 asserts due to a bug in SWIG.  A fix for this was upstreamed into
     # SWIG 3.0.8.
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
-    @add_test_categories(['pyapi'])
     def test_module_and_section(self):
         """Test module and section APIs."""
         self.build()
@@ -71,7 +70,6 @@
                             symbol_type_to_str(
                                 sym.GetType()))
 
-    @add_test_categories(['pyapi'])
     def test_module_and_section_boundary_condition(self):
         """Test module and section APIs by passing None when it expects a Python string."""
         self.build()
@@ -112,7 +110,6 @@
         if sec1:
             sec1.FindSubSection(None)
 
-    @add_test_categories(['pyapi'])
     def test_module_compile_unit_iter(self):
         """Test module's compile unit iterator APIs."""
         self.build()
@@ -140,7 +137,6 @@
         for cu in exe_module.compile_unit_iter():
             print(cu)
 
-    @add_test_categories(['pyapi'])
     def test_find_compile_units(self):
         """Exercise SBModule.FindCompileUnits() API."""
         d = {'EXE': 'b.out'}
diff --git a/test/API/python_api/name_lookup/TestNameLookup.py b/test/API/python_api/name_lookup/TestNameLookup.py
index 7db8b61..c1629f9 100644
--- a/test/API/python_api/name_lookup/TestNameLookup.py
+++ b/test/API/python_api/name_lookup/TestNameLookup.py
@@ -15,7 +15,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test_target(self):
         """Exercise SBTarget.FindFunctions() with various name masks.
diff --git a/test/API/python_api/process/TestProcessAPI.py b/test/API/python_api/process/TestProcessAPI.py
index 7174ba1..942e261 100644
--- a/test/API/python_api/process/TestProcessAPI.py
+++ b/test/API/python_api/process/TestProcessAPI.py
@@ -23,7 +23,6 @@
             "main.cpp",
             "// Set break point at this line and check variable 'my_char'.")
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::ReadMemory is not instrumented.
     def test_read_memory(self):
         """Test Python SBProcess.ReadMemory() API."""
@@ -122,7 +121,6 @@
             self.fail(
                 "Result from SBProcess.ReadUnsignedFromMemory() does not match our expected output")
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::WriteMemory is not instrumented.
     def test_write_memory(self):
         """Test Python SBProcess.WriteMemory() API."""
@@ -182,7 +180,6 @@
             exe=False,
             startstr=b'a')
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBProcess::WriteMemory is not instrumented.
     def test_access_my_int(self):
         """Test access 'my_int' using Python SBProcess.GetByteOrder() and other APIs."""
@@ -281,7 +278,6 @@
             for i in content:
                 print("byte:", i)
 
-    @add_test_categories(['pyapi'])
     def test_remote_launch(self):
         """Test SBProcess.RemoteLaunch() API with a process not in eStateConnected, and it should fail."""
         self.build()
@@ -305,7 +301,6 @@
             not success,
             "RemoteLaunch() should fail for process state != eStateConnected")
 
-    @add_test_categories(['pyapi'])
     def test_get_num_supported_hardware_watchpoints(self):
         """Test SBProcess.GetNumSupportedHardwareWatchpoints() API with a process."""
         self.build()
@@ -327,7 +322,6 @@
         if self.TraceOn() and error.Success():
             print("Number of supported hardware watchpoints: %d" % num)
 
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     def test_get_process_info(self):
         """Test SBProcess::GetProcessInfo() API with a locally launched process."""
diff --git a/test/API/python_api/process/io/TestProcessIO.py b/test/API/python_api/process/io/TestProcessIO.py
index 3f210bc..312cc28 100644
--- a/test/API/python_api/process/io/TestProcessIO.py
+++ b/test/API/python_api/process/io/TestProcessIO.py
@@ -32,7 +32,6 @@
         self.lines = ["Line 1", "Line 2", "Line 3"]
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # I/O redirection like this is not supported on remote iOS devices yet <rdar://problem/54581135>
     def test_stdin_by_api(self):
@@ -45,7 +44,6 @@
         self.check_process_output(output, output)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     def test_stdin_redirection(self):
         """Exercise SBLaunchInfo::AddOpenFileAction() for STDIN without specifying STDOUT or STDERR."""
@@ -58,7 +56,6 @@
         self.check_process_output(output, output)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stdout_redirection(self):
@@ -73,7 +70,6 @@
         self.check_process_output(output, error)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stderr_redirection(self):
@@ -88,7 +84,6 @@
         self.check_process_output(output, error)
 
     @skipIfWindows  # stdio manipulation unsupported on Windows
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux(bugnumber="llvm.org/pr26437")
     @skipIfDarwinEmbedded # debugserver can't create/write files on the device
     def test_stdout_stderr_redirection(self):
diff --git a/test/API/python_api/sbdata/TestSBData.py b/test/API/python_api/sbdata/TestSBData.py
index 283908f..258ce51 100644
--- a/test/API/python_api/sbdata/TestSBData.py
+++ b/test/API/python_api/sbdata/TestSBData.py
@@ -20,7 +20,6 @@
         # Find the line number to break on inside main.cpp.
         self.line = line_number('main.cpp', '// set breakpoint here')
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBData::SetData is not instrumented.
     def test_byte_order_and_address_byte_size(self):
         """Test the SBData::SetData() to ensure the byte order and address
@@ -41,7 +40,6 @@
         addr = data.GetAddress(error, 0)
         self.assertEqual(addr, 0x8877665544332211);
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBData::SetData is not instrumented.
     def test_with_run_command(self):
         """Test the SBData APIs."""
diff --git a/test/API/python_api/sbenvironment/TestSBEnvironment.py b/test/API/python_api/sbenvironment/TestSBEnvironment.py
index 62c3ac2..99369f8 100644
--- a/test/API/python_api/sbenvironment/TestSBEnvironment.py
+++ b/test/API/python_api/sbenvironment/TestSBEnvironment.py
@@ -30,7 +30,6 @@
 
 
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_platform_environment(self):
         env = self.dbg.GetSelectedPlatform().GetEnvironment()
@@ -38,7 +37,6 @@
         self.assertNotEqual(env.Get("PATH"), None)
 
 
-    @add_test_categories(['pyapi'])
     def test_launch_info(self):
         target = self.dbg.CreateTarget("")
         launch_info = target.GetLaunchInfo()
@@ -67,7 +65,6 @@
         self.assertEqualEntries(launch_info.GetEnvironment(), ["BAR=foo", "X=y"])
 
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_target_environment(self):
         env = self.dbg.GetSelectedTarget().GetEnvironment()
@@ -85,7 +82,6 @@
         env.PutEntry("PATH=#" + path)
         self.assertEqual(target.GetEnvironment().Get("PATH"), path)
 
-    @add_test_categories(['pyapi'])
     def test_creating_and_modifying_environment(self):
         env = lldb.SBEnvironment()
 
diff --git a/test/API/python_api/sbplatform/TestSBPlatform.py b/test/API/python_api/sbplatform/TestSBPlatform.py
index 3fa4c10..b354a6e 100644
--- a/test/API/python_api/sbplatform/TestSBPlatform.py
+++ b/test/API/python_api/sbplatform/TestSBPlatform.py
@@ -8,7 +8,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @skipIfRemote # Remote environment not supported.
     def test_run(self):
         self.build()
diff --git a/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
index a1a3185..26f1791 100644
--- a/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
+++ b/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
@@ -18,7 +18,6 @@
     def test(self):
         self.structured_data_api_test()
 
-    @add_test_categories(['pyapi'])
     def structured_data_api_test(self):
         error = lldb.SBError()
         s = lldb.SBStream()
diff --git a/test/API/python_api/sbvalue_persist/TestSBValuePersist.py b/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
index 94eec2a..8324d23 100644
--- a/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
+++ b/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
@@ -13,7 +13,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
     def test(self):
         """Test SBValue::Persist"""
diff --git a/test/API/python_api/section/TestSectionAPI.py b/test/API/python_api/section/TestSectionAPI.py
index 1513b98..bd8e451 100644
--- a/test/API/python_api/section/TestSectionAPI.py
+++ b/test/API/python_api/section/TestSectionAPI.py
@@ -13,7 +13,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_target_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
diff --git a/test/API/python_api/signals/TestSignalsAPI.py b/test/API/python_api/signals/TestSignalsAPI.py
index 0f59016..6c535d7 100644
--- a/test/API/python_api/signals/TestSignalsAPI.py
+++ b/test/API/python_api/signals/TestSignalsAPI.py
@@ -15,7 +15,6 @@
     mydir = TestBase.compute_mydir(__file__)
     NO_DEBUG_INFO_TESTCASE = True
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows  # Windows doesn't have signals
     def test_ignore_signal(self):
         """Test Python SBUnixSignals.Suppress/Stop/Notify() API."""
diff --git a/test/API/python_api/symbol-context/TestSymbolContext.py b/test/API/python_api/symbol-context/TestSymbolContext.py
index 742ecec..c02e1bf 100644
--- a/test/API/python_api/symbol-context/TestSymbolContext.py
+++ b/test/API/python_api/symbol-context/TestSymbolContext.py
@@ -21,7 +21,6 @@
         self.line = line_number(
             'main.c', '// Find the line number of function "c" here.')
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     @skipIfReproducer # FIXME: Unexpected packet during (passive) replay
     def test(self):
diff --git a/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
index 27d1b60..8188c73 100644
--- a/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
+++ b/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
@@ -14,7 +14,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"])
     def test_lookup_by_address(self):
         """Test lookup by address in a module with multiple compilation units"""
@@ -36,7 +35,6 @@
             self.assertEqual(symbol_name,
                              sc_by_address.GetFunction().GetName())
 
-    @add_test_categories(['pyapi'])
     def test_ranges_in_multiple_compile_unit(self):
         """This test verifies that we correctly handle the case when multiple
         compile unit contains DW_AT_ranges and DW_AT_ranges_base attributes."""
diff --git a/test/API/python_api/target/TestTargetAPI.py b/test/API/python_api/target/TestTargetAPI.py
index 7954f66..c53f600 100644
--- a/test/API/python_api/target/TestTargetAPI.py
+++ b/test/API/python_api/target/TestTargetAPI.py
@@ -35,7 +35,6 @@
     # It does not segfaults now.  But for dwarf, the variable value is None if
     # the inferior process does not exist yet.  The radar has been updated.
     #@unittest232.skip("segmentation fault -- skipping")
-    @add_test_categories(['pyapi'])
     def test_find_global_variables(self):
         """Exercise SBTarget.FindGlobalVariables() API."""
         d = {'EXE': 'b.out'}
@@ -43,7 +42,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_global_variables('b.out')
 
-    @add_test_categories(['pyapi'])
     def test_find_compile_units(self):
         """Exercise SBTarget.FindCompileUnits() API."""
         d = {'EXE': 'b.out'}
@@ -51,7 +49,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_compile_units(self.getBuildArtifact('b.out'))
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     def test_find_functions(self):
         """Exercise SBTarget.FindFunctions() API."""
@@ -60,20 +57,17 @@
         self.setTearDownCleanup(dictionary=d)
         self.find_functions('b.out')
 
-    @add_test_categories(['pyapi'])
     def test_get_description(self):
         """Exercise SBTarget.GetDescription() API."""
         self.build()
         self.get_description()
 
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
     def test_resolve_symbol_context_with_address(self):
         """Exercise SBTarget.ResolveSymbolContextForAddress() API."""
         self.build()
         self.resolve_symbol_context_with_address()
 
-    @add_test_categories(['pyapi'])
     def test_get_platform(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -82,7 +76,6 @@
         platform = target.platform
         self.assertTrue(platform, VALID_PLATFORM)
 
-    @add_test_categories(['pyapi'])
     def test_get_data_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -90,7 +83,6 @@
         target = self.create_simple_target('b.out')
         self.assertEqual(target.data_byte_size, 1)
 
-    @add_test_categories(['pyapi'])
     def test_get_code_byte_size(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -98,7 +90,6 @@
         target = self.create_simple_target('b.out')
         self.assertEqual(target.code_byte_size, 1)
 
-    @add_test_categories(['pyapi'])
     def test_resolve_file_address(self):
         d = {'EXE': 'b.out'}
         self.build(dictionary=d)
@@ -121,7 +112,6 @@
         self.assertIsNotNone(data_section2)
         self.assertEqual(data_section.name, data_section2.name)
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBTarget::ReadMemory is not instrumented.
     def test_read_memory(self):
         d = {'EXE': 'b.out'}
@@ -151,7 +141,6 @@
         self.assertEqual(len(content), 1)
 
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows  # stdio manipulation unsupported on Windows
     @skipIfRemote   # stdio manipulation unsupported on remote iOS devices<rdar://problem/54581135>
     @skipIfReproducer  # stdout not captured by reproducers
@@ -334,7 +323,6 @@
                     substrs=['Target', 'Module', 'a.out', 'Breakpoint'])
 
     @skipIfRemote
-    @add_test_categories(['pyapi'])
     @no_debug_info_test
     @skipIfReproducer # Inferior doesn't run during replay.
     def test_launch_new_process_and_redirect_stdout(self):
@@ -476,6 +464,7 @@
         desc2 = get_description(symbol2)
         self.assertTrue(desc1 and desc2 and desc1 == desc2,
                         "The two addresses should resolve to the same symbol")
+
     def test_default_arch(self):
         """ Test the other two target create methods using LLDB_ARCH_DEFAULT. """
         self.build()
@@ -490,7 +479,6 @@
         self.assertTrue(target3.IsValid())
 
 
-    @add_test_categories(['pyapi'])
     @skipIfWindows
     def test_is_loaded(self):
         """Exercise SBTarget.IsLoaded(SBModule&) API."""
diff --git a/test/API/python_api/thread/TestThreadAPI.py b/test/API/python_api/thread/TestThreadAPI.py
index a369c70..b8416eb 100644
--- a/test/API/python_api/thread/TestThreadAPI.py
+++ b/test/API/python_api/thread/TestThreadAPI.py
@@ -16,19 +16,16 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_get_process(self):
         """Test Python SBThread.GetProcess() API."""
         self.build()
         self.get_process()
 
-    @add_test_categories(['pyapi'])
     def test_get_stop_description(self):
         """Test Python SBThread.GetStopDescription() API."""
         self.build()
         self.get_stop_description()
 
-    @add_test_categories(['pyapi'])
     def test_run_to_address(self):
         """Test Python SBThread.RunToAddress() API."""
         # We build a different executable than the default build() does.
@@ -38,7 +35,6 @@
         self.run_to_address(self.exe_name)
 
     @skipIfAsan # The output looks different under ASAN.
-    @add_test_categories(['pyapi'])
     @expectedFailureAll(oslist=["linux"], archs=['arm'], bugnumber="llvm.org/pr45892")
     @expectedFailureAll(oslist=["windows"])
     def test_step_out_of_malloc_into_function_b(self):
@@ -49,7 +45,6 @@
         self.setTearDownCleanup(dictionary=d)
         self.step_out_of_malloc_into_function_b(self.exe_name)
 
-    @add_test_categories(['pyapi'])
     def test_step_over_3_times(self):
         """Test Python SBThread.StepOver() API."""
         # We build a different executable than the default build() does.
diff --git a/test/API/python_api/type/TestTypeList.py b/test/API/python_api/type/TestTypeList.py
index 9d4f164..f60237b 100644
--- a/test/API/python_api/type/TestTypeList.py
+++ b/test/API/python_api/type/TestTypeList.py
@@ -25,7 +25,6 @@
         self.source = 'main.cpp'
         self.line = line_number(self.source, '// Break at this line')
 
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise SBType and SBTypeList API."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value/TestValueAPI.py b/test/API/python_api/value/TestValueAPI.py
index b38eb2d..543186c 100644
--- a/test/API/python_api/value/TestValueAPI.py
+++ b/test/API/python_api/value/TestValueAPI.py
@@ -24,7 +24,6 @@
         self.line = line_number('main.c', '// Break at this line')
 
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise some SBValue APIs."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value/change_values/TestChangeValueAPI.py b/test/API/python_api/value/change_values/TestChangeValueAPI.py
index b35c18a..ec162f6 100644
--- a/test/API/python_api/value/change_values/TestChangeValueAPI.py
+++ b/test/API/python_api/value/change_values/TestChangeValueAPI.py
@@ -26,7 +26,6 @@
         self.end_line = line_number(
             'main.c', '// Set a breakpoint here at the end')
 
-    @add_test_categories(['pyapi'])
     @expectedFlakeyLinux("llvm.org/pr25652")
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
     def test_change_value(self):
diff --git a/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py b/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
index c778577..ac8f60b 100644
--- a/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
+++ b/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
@@ -8,7 +8,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test(self):
         self.build()
         exe = self.getBuildArtifact("a.out")
diff --git a/test/API/python_api/value/linked_list/TestValueAPILinkedList.py b/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
index f01ce03..afd25bd 100644
--- a/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
+++ b/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
@@ -28,7 +28,6 @@
     # Py3 asserts due to a bug in SWIG.  A fix for this was upstreamed into
     # SWIG 3.0.8.
     @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
-    @add_test_categories(['pyapi'])
     def test(self):
         """Exercise SBValue API linked_list_iter."""
         d = {'EXE': self.exe_name}
diff --git a/test/API/python_api/value_var_update/TestValueVarUpdate.py b/test/API/python_api/value_var_update/TestValueVarUpdate.py
index b425cef..e7d47de 100644
--- a/test/API/python_api/value_var_update/TestValueVarUpdate.py
+++ b/test/API/python_api/value_var_update/TestValueVarUpdate.py
@@ -12,7 +12,6 @@
 
     mydir = TestBase.compute_mydir(__file__)
 
-    @add_test_categories(['pyapi'])
     def test_with_process_launch_api(self):
         """Test SBValue::GetValueDidChange"""
         # Get the full path to our executable to be attached/debugged.
diff --git a/test/API/python_api/watchpoint/TestSetWatchpoint.py b/test/API/python_api/watchpoint/TestSetWatchpoint.py
index 260956b..f135ed6 100644
--- a/test/API/python_api/watchpoint/TestSetWatchpoint.py
+++ b/test/API/python_api/watchpoint/TestSetWatchpoint.py
@@ -25,7 +25,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     # Read-write watchpoints not supported on SystemZ
     @expectedFailureAll(archs=['s390x'])
     def test_watch_val(self):
diff --git a/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py b/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
index 83a11d4..d0fd398 100644
--- a/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
+++ b/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
@@ -25,7 +25,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     # Read-write watchpoints not supported on SystemZ
     @expectedFailureAll(archs=['s390x'])
     def test_set_watch_ignore_count(self):
diff --git a/test/API/python_api/watchpoint/TestWatchpointIter.py b/test/API/python_api/watchpoint/TestWatchpointIter.py
index 17ab024..6ca9999 100644
--- a/test/API/python_api/watchpoint/TestWatchpointIter.py
+++ b/test/API/python_api/watchpoint/TestWatchpointIter.py
@@ -30,7 +30,6 @@
         self.line = line_number(
             self.source, '// Set break point at this line.')
 
-    @add_test_categories(['pyapi'])
     def test_watch_iter(self):
         """Exercise SBTarget.watchpoint_iter() API to iterate on the available watchpoints."""
         self.build()
diff --git a/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py b/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
index 0b59e8d..7df7285 100644
--- a/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
+++ b/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
@@ -28,7 +28,6 @@
         # This is for verifying that watch location works.
         self.violating_func = "do_bad_thing_with_location"
 
-    @add_test_categories(['pyapi'])
     def test_watch_location(self):
         """Exercise SBValue.WatchPointee() API to set a watchpoint."""
         self.build()
diff --git a/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py b/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
index 02632cb..15d9b2a 100644
--- a/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
+++ b/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
@@ -27,7 +27,6 @@
         # This is for verifying that watch location works.
         self.violating_func = "do_bad_thing_with_location"
 
-    @add_test_categories(['pyapi'])
     def test_watch_address(self):
         """Exercise SBTarget.WatchAddress() API to set a watchpoint."""
         self.build()
@@ -99,7 +98,6 @@
 
         # This finishes our test.
 
-    @add_test_categories(['pyapi'])
     # No size constraint on MIPS for watches
     @skipIf(archs=['mips', 'mipsel', 'mips64', 'mips64el'])
     @skipIf(archs=['s390x'])  # Likewise on SystemZ