diff --git a/src/llvm-project/lldb/test/API/python_api/breakpoint/TestBreakpointAPI.py b/src/llvm-project/lldb/test/API/python_api/breakpoint/TestBreakpointAPI.py
index 80324ee..bd02b76 100644
--- a/src/llvm-project/lldb/test/API/python_api/breakpoint/TestBreakpointAPI.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/class_members/TestSBTypeClassMembers.py b/src/llvm-project/lldb/test/API/python_api/class_members/TestSBTypeClassMembers.py
index 091bb1b..061556a 100644
--- a/src/llvm-project/lldb/test/API/python_api/class_members/TestSBTypeClassMembers.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/class_members/main.mm b/src/llvm-project/lldb/test/API/python_api/class_members/main.mm
index b84f4d3..723cb61 100644
--- a/src/llvm-project/lldb/test/API/python_api/class_members/main.mm
+++ b/src/llvm-project/lldb/test/API/python_api/class_members/main.mm
@@ -1,4 +1,4 @@
-#import <Foundation/Foundation.h>
+#import <objc/NSObject.h>
 
 class Base {
 public:
diff --git a/src/llvm-project/lldb/test/API/python_api/debugger/Makefile b/src/llvm-project/lldb/test/API/python_api/debugger/Makefile
new file mode 100644
index 0000000..bfad5f3
--- /dev/null
+++ b/src/llvm-project/lldb/test/API/python_api/debugger/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/src/llvm-project/lldb/test/API/python_api/debugger/TestDebuggerAPI.py b/src/llvm-project/lldb/test/API/python_api/debugger/TestDebuggerAPI.py
index 32202acb..f9fe64d 100644
--- a/src/llvm-project/lldb/test/API/python_api/debugger/TestDebuggerAPI.py
+++ b/src/llvm-project/lldb/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,9 +36,59 @@
         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()
         self.assertFalse(target.IsValid())
         self.dbg.DeleteTarget(target)
+
+    def test_debugger_internal_variables(self):
+        """Ensure that SBDebugger reachs the same instance of properties
+           regardless CommandInterpreter's context initialization"""
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+
+        # Create a target by the debugger.
+        target = self.dbg.CreateTarget(exe)
+        self.assertTrue(target, VALID_TARGET)
+
+        property_name = "target.process.memory-cache-line-size"
+
+        def get_cache_line_size():
+            value_list = lldb.SBStringList()
+            value_list = self.dbg.GetInternalVariableValue(property_name,
+                                                           self.dbg.GetInstanceName())
+
+            self.assertEqual(value_list.GetSize(), 1)
+            try:
+                return int(value_list.GetStringAtIndex(0))
+            except ValueError as error:
+                self.fail("Value is not a number: " + error)
+
+        # Get global property value while there are no processes.
+        global_cache_line_size = get_cache_line_size()
+
+        # Run a process via SB interface. CommandInterpreter's execution context
+        # remains empty.
+        error = lldb.SBError()
+        launch_info = lldb.SBLaunchInfo(None)
+        launch_info.SetLaunchFlags(lldb.eLaunchFlagStopAtEntry)
+        process = target.Launch(launch_info, error)
+        self.assertTrue(process, PROCESS_IS_VALID)
+
+        # This should change the value of a process's local property.
+        new_cache_line_size = global_cache_line_size + 512
+        error = self.dbg.SetInternalVariable(property_name,
+                                             str(new_cache_line_size),
+                                             self.dbg.GetInstanceName())
+        self.assertTrue(error.Success(),
+                        property_name + " value was changed successfully")
+
+        # Check that it was set actually.
+        self.assertEqual(get_cache_line_size(), new_cache_line_size)
+
+        # Run any command to initialize CommandInterpreter's execution context.
+        self.runCmd("target list")
+
+        # Test the local property again, is it set to new_cache_line_size?
+        self.assertEqual(get_cache_line_size(), new_cache_line_size)
diff --git a/src/llvm-project/lldb/test/API/python_api/debugger/main.cpp b/src/llvm-project/lldb/test/API/python_api/debugger/main.cpp
new file mode 100644
index 0000000..4b4ca68
--- /dev/null
+++ b/src/llvm-project/lldb/test/API/python_api/debugger/main.cpp
@@ -0,0 +1,9 @@
+// This simple program is to test the lldb Python API SBDebugger.
+
+int func(int val) {
+    return val - 1;
+}
+
+int main (int argc, char const *argv[]) {
+    return func(argc);
+}
diff --git a/src/llvm-project/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py b/src/llvm-project/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
index 65c4dac..d69e13f 100644
--- a/src/llvm-project/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py b/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
index 49992f4..d6e0b32 100644
--- a/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassembleRawData.py
+++ b/src/llvm-project/lldb/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.
@@ -33,6 +32,12 @@
         elif re.match("powerpc64le", arch):
             target = self.dbg.CreateTargetWithFileAndTargetTriple("", "powerpc64le")
             raw_bytes = bytearray([0x00, 0x00, 0x80, 0x38])
+        elif arch == "aarch64":
+            target = self.dbg.CreateTargetWithFileAndTargetTriple("", "aarch64")
+            raw_bytes = bytearray([0x60, 0x0c, 0x80, 0x52])
+        elif arch == "arm":
+            target = self.dbg.CreateTargetWithFileAndTargetTriple("", "arm")
+            raw_bytes = bytearray([0x63, 0x30, 0xa0, 0xe3])
         else:
             target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64")
             raw_bytes = bytearray([0x48, 0x89, 0xe5])
@@ -47,13 +52,19 @@
             print("Raw bytes:    ", [hex(x) for x in raw_bytes])
             print("Disassembled%s" % str(inst))
         if re.match("mips", arch):
-            self.assertTrue(inst.GetMnemonic(target) == "move")
-            self.assertTrue(inst.GetOperands(target) ==
+            self.assertEqual(inst.GetMnemonic(target), "move")
+            self.assertEqual(inst.GetOperands(target),
                             '$' + "fp, " + '$' + "sp")
         elif re.match("powerpc64le", arch):
-            self.assertTrue(inst.GetMnemonic(target) == "li")
-            self.assertTrue(inst.GetOperands(target) == "4, 0")
+            self.assertEqual(inst.GetMnemonic(target), "li")
+            self.assertEqual(inst.GetOperands(target), "4, 0")
+        elif arch == "aarch64":
+            self.assertEqual(inst.GetMnemonic(target), "mov")
+            self.assertEqual(inst.GetOperands(target), "w0, #0x63")
+        elif arch == "arm":
+            self.assertEqual(inst.GetMnemonic(target), "mov")
+            self.assertEqual(inst.GetOperands(target), "r3, #99")
         else:
-            self.assertTrue(inst.GetMnemonic(target) == "movq")
-            self.assertTrue(inst.GetOperands(target) ==
+            self.assertEqual(inst.GetMnemonic(target), "movq")
+            self.assertEqual(inst.GetOperands(target),
                             '%' + "rsp, " + '%' + "rbp")
diff --git a/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py b/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
index fd5c9ec..9260b72 100644
--- a/src/llvm-project/lldb/test/API/python_api/disassemble-raw-data/TestDisassemble_VST1_64.py
+++ b/src/llvm-project/lldb/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.
@@ -76,4 +75,4 @@
             print("Raw bytes:    ", [hex(x) for x in raw_bytes])
             print("Disassembled%s" % str(inst))
 
-        self.assertTrue(inst.GetMnemonic(target) == "vst1.64")
+        self.assertEqual(inst.GetMnemonic(target), "vst1.64")
diff --git a/src/llvm-project/lldb/test/API/python_api/event/TestEvents.py b/src/llvm-project/lldb/test/API/python_api/event/TestEvents.py
index 238e9eb..95cf5b2 100644
--- a/src/llvm-project/lldb/test/API/python_api/event/TestEvents.py
+++ b/src/llvm-project/lldb/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")
@@ -62,8 +61,8 @@
                                 False,     # Stop at entry
                                 error)     # error
 
-        self.assertTrue(
-            process.GetState() == lldb.eStateStopped,
+        self.assertEqual(
+            process.GetState(), lldb.eStateStopped,
             PROCESS_STOPPED)
 
         # Create an empty event object.
@@ -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")
@@ -315,5 +312,5 @@
         my_thread.join()
 
         # The final judgement. :-)
-        self.assertTrue(self.state == 'stopped',
+        self.assertEqual(self.state, 'stopped',
                         "Both expected state changed events received")
diff --git a/src/llvm-project/lldb/test/API/python_api/file_handle/TestFileHandle.py b/src/llvm-project/lldb/test/API/python_api/file_handle/TestFileHandle.py
index bbcb112..286b3ee 100644
--- a/src/llvm-project/lldb/test/API/python_api/file_handle/TestFileHandle.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py b/src/llvm-project/lldb/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
index 4042052..727c114 100644
--- a/src/llvm-project/lldb/test/API/python_api/findvalue_duplist/TestSBFrameFindValue.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/formatters/TestFormattersSBAPI.py b/src/llvm-project/lldb/test/API/python_api/formatters/TestFormattersSBAPI.py
index f01d7c4..ac135b9 100644
--- a/src/llvm-project/lldb/test/API/python_api/formatters/TestFormattersSBAPI.py
+++ b/src/llvm-project/lldb/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()
@@ -128,8 +127,8 @@
         filter = lldb.SBTypeFilter(0)
         filter.AppendExpressionPath("A")
         filter.AppendExpressionPath("D")
-        self.assertTrue(
-            filter.GetNumberOfExpressionPaths() == 2,
+        self.assertEqual(
+            filter.GetNumberOfExpressionPaths(), 2,
             "filter with two items does not have two items")
 
         category.AddTypeFilter(lldb.SBTypeNameSpecifier("JustAStruct"), filter)
@@ -180,11 +179,11 @@
             foo_var.GetDeclaration().IsValid(),
             'foo declaration is invalid')
 
-        self.assertTrue(
-            foo_var.GetNumChildren() == 2,
+        self.assertEqual(
+            foo_var.GetNumChildren(), 2,
             'synthetic value has wrong number of child items (synth)')
-        self.assertTrue(
-            foo_var.GetChildMemberWithName('X').GetValueAsUnsigned() == 1,
+        self.assertEqual(
+            foo_var.GetChildMemberWithName('X').GetValueAsUnsigned(), 1,
             'foo_synth.X has wrong value (synth)')
         self.assertFalse(
             foo_var.GetChildMemberWithName('B').IsValid(),
@@ -210,14 +209,14 @@
         ).GetSelectedThread().GetSelectedFrame().FindVariable('foo')
         self.assertTrue(foo_var.IsValid(), 'could not find foo')
 
-        self.assertTrue(
-            foo_var.GetNumChildren() == 2,
+        self.assertEqual(
+            foo_var.GetNumChildren(), 2,
             'synthetic value has wrong number of child items (filter)')
-        self.assertTrue(
-            foo_var.GetChildMemberWithName('X').GetValueAsUnsigned() == 0,
+        self.assertEqual(
+            foo_var.GetChildMemberWithName('X').GetValueAsUnsigned(), 0,
             'foo_synth.X has wrong value (filter)')
-        self.assertTrue(
-            foo_var.GetChildMemberWithName('A').GetValueAsUnsigned() == 1,
+        self.assertEqual(
+            foo_var.GetChildMemberWithName('A').GetValueAsUnsigned(), 1,
             'foo_synth.A has wrong value (filter)')
 
         self.assertTrue(filter.ReplaceExpressionPathAtIndex(
@@ -240,20 +239,20 @@
         foo_var = self.dbg.GetSelectedTarget().GetProcess(
         ).GetSelectedThread().GetSelectedFrame().FindVariable('foo')
         self.assertTrue(foo_var.IsValid(), 'could not find foo')
-        self.assertTrue(
-            foo_var.GetChildMemberWithName('C').GetValueAsUnsigned() == ord('e'),
+        self.assertEqual(
+            foo_var.GetChildMemberWithName('C').GetValueAsUnsigned(), ord('e'),
             'foo_synth.C has wrong value (filter)')
 
         chosen = self.dbg.GetFilterForType(
             lldb.SBTypeNameSpecifier("JustAStruct"))
-        self.assertTrue(
-            chosen.count == 2,
+        self.assertEqual(
+            chosen.count, 2,
             "wrong filter found for JustAStruct")
-        self.assertTrue(
-            chosen.GetExpressionPathAtIndex(0) == 'C',
+        self.assertEqual(
+            chosen.GetExpressionPathAtIndex(0), 'C',
             "wrong item at index 0 for JustAStruct")
-        self.assertTrue(
-            chosen.GetExpressionPathAtIndex(1) == 'F',
+        self.assertEqual(
+            chosen.GetExpressionPathAtIndex(1), 'F',
             "wrong item at index 1 for JustAStruct")
 
         self.assertFalse(
@@ -420,8 +419,8 @@
         self.assertTrue(
             summary.IsValid(),
             "no summary found for foo* when one was in place")
-        self.assertTrue(
-            summary.GetData() == "hello static world",
+        self.assertEqual(
+            summary.GetData(), "hello static world",
             "wrong summary found for foo*")
 
         self.expect("frame variable e1", substrs=["I am an empty Empty1 {}"])
@@ -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'})
@@ -475,8 +473,8 @@
         int_vector = frame.FindVariable("int_vector")
         if self.TraceOn():
             print(int_vector)
-        self.assertTrue(
-            int_vector.GetNumChildren() == 0,
+        self.assertEqual(
+            int_vector.GetNumChildren(), 0,
             'synthetic vector is empty')
 
         self.runCmd('settings set target.enable-synthetic-value false')
@@ -495,6 +493,6 @@
         int_vector = frame.FindVariable("int_vector")
         if self.TraceOn():
             print(int_vector)
-        self.assertTrue(
-            int_vector.GetNumChildren() == 0,
+        self.assertEqual(
+            int_vector.GetNumChildren(), 0,
             'synthetic vector is still empty')
diff --git a/src/llvm-project/lldb/test/API/python_api/frame/TestFrames.py b/src/llvm-project/lldb/test/API/python_api/frame/TestFrames.py
index 1ec66a3..f02257a 100644
--- a/src/llvm-project/lldb/test/API/python_api/frame/TestFrames.py
+++ b/src/llvm-project/lldb/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()
@@ -38,7 +37,7 @@
             None, None, self.get_process_working_directory())
 
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
 
         # Keeps track of the number of times 'a' is called where it is within a
@@ -88,25 +87,26 @@
                 # instruction as PC.
                 if self.getArchitecture() in ['arm', 'armv7', 'armv7k']:
                     pc_value_int &= ~1
-                self.assertTrue(
-                    pc_value_int == frame.GetPC(),
+                self.assertEqual(
+                    pc_value_int, frame.GetPC(),
                     "PC gotten as a value should equal frame's GetPC")
                 sp_value = gpr_reg_set.GetChildMemberWithName("sp")
                 self.assertTrue(
                     sp_value, "We should have a valid Stack Pointer.")
-                self.assertTrue(int(sp_value.GetValue(), 0) == frame.GetSP(
-                ), "SP gotten as a value should equal frame's GetSP")
+                self.assertEqual(
+                    int(sp_value.GetValue(), 0), frame.GetSP(),
+                    "SP gotten as a value should equal frame's GetSP")
 
             print("---", file=session)
             process.Continue()
 
         # At this point, the inferior process should have exited.
-        self.assertTrue(
-            process.GetState() == lldb.eStateExited,
+        self.assertEqual(
+            process.GetState(), lldb.eStateExited,
             PROCESS_EXITED)
 
         # Expect to find 'a' on the call stacks two times.
-        self.assertTrue(callsOfA == 2,
+        self.assertEqual(callsOfA, 2,
                         "Expect to find 'a' on the call stacks two times")
         # By design, the 'a' call frame has the following arg vals:
         #     o a((int)val=1, (char)ch='A')
@@ -119,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()
@@ -141,7 +140,7 @@
             None, None, self.get_process_working_directory())
 
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
 
         thread = lldbutil.get_stopped_thread(
@@ -161,7 +160,6 @@
 
         frame.EvaluateExpression(None)
 
-    @add_test_categories(['pyapi'])
     def test_frame_api_IsEqual(self):
         """Exercise SBFrame API IsEqual."""
         self.build()
@@ -183,7 +181,7 @@
             None, None, self.get_process_working_directory())
 
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
 
         thread = lldbutil.get_stopped_thread(
diff --git a/src/llvm-project/lldb/test/API/python_api/frame/inlines/TestInlinedFrame.py b/src/llvm-project/lldb/test/API/python_api/frame/inlines/TestInlinedFrame.py
index eb40b4c..aa8c9c3 100644
--- a/src/llvm-project/lldb/test/API/python_api/frame/inlines/TestInlinedFrame.py
+++ b/src/llvm-project/lldb/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()
@@ -47,7 +46,7 @@
             None, None, self.get_process_working_directory())
 
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
 
         import lldbsuite.test.lldbutil as lldbutil
@@ -70,7 +69,7 @@
         frame0 = thread.GetFrameAtIndex(0)
         if frame0.IsInlined():
             filename = frame0.GetLineEntry().GetFileSpec().GetFilename()
-            self.assertTrue(filename == self.source)
+            self.assertEqual(filename, self.source)
             self.expect(
                 stack_traces1, "First stop at %s:%d" %
                 (self.source, self.first_stop), exe=False, substrs=[
@@ -79,7 +78,7 @@
 
             # Expect to break again for the second time.
             process.Continue()
-            self.assertTrue(process.GetState() == lldb.eStateStopped,
+            self.assertEqual(process.GetState(), lldb.eStateStopped,
                             PROCESS_STOPPED)
             stack_traces2 = lldbutil.print_stacktraces(
                 process, string_buffer=True)
diff --git a/src/llvm-project/lldb/test/API/python_api/function_symbol/TestDisasmAPI.py b/src/llvm-project/lldb/test/API/python_api/function_symbol/TestDisasmAPI.py
index 01d26da..c884241 100644
--- a/src/llvm-project/lldb/test/API/python_api/function_symbol/TestDisasmAPI.py
+++ b/src/llvm-project/lldb/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."""
@@ -53,7 +52,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Frame #0 should be on self.line1.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -61,7 +60,7 @@
             "There should be a thread stopped due to breakpoint condition")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.line1)
+        self.assertEqual(lineEntry.GetLine(), self.line1)
 
         address1 = lineEntry.GetStartAddress()
         self.trace("address1:", address1)
@@ -76,7 +75,7 @@
 
         # Continue the inferior, the breakpoint 2 should be hit.
         process.Continue()
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -84,7 +83,7 @@
             "There should be a thread stopped due to breakpoint condition")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.line2)
+        self.assertEqual(lineEntry.GetLine(), self.line2)
 
         # Verify that the symbol and the function has the same address range
         # per function 'a'.
diff --git a/src/llvm-project/lldb/test/API/python_api/function_symbol/TestSymbolAPI.py b/src/llvm-project/lldb/test/API/python_api/function_symbol/TestSymbolAPI.py
index c5bcb15..14b01d5 100644
--- a/src/llvm-project/lldb/test/API/python_api/function_symbol/TestSymbolAPI.py
+++ b/src/llvm-project/lldb/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."""
@@ -53,7 +52,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Frame #0 should be on self.line1.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -62,7 +61,7 @@
         frame0 = thread.GetFrameAtIndex(0)
         symbol_line1 = frame0.GetSymbol()
         # We should have a symbol type of code.
-        self.assertTrue(symbol_line1.GetType() == lldb.eSymbolTypeCode)
+        self.assertEqual(symbol_line1.GetType(), lldb.eSymbolTypeCode)
         addr_line1 = symbol_line1.GetStartAddress()
         # And a section type of code, too.
         self.assertTrue(addr_line1.GetSection().GetSectionType()
@@ -70,7 +69,7 @@
 
         # Continue the inferior, the breakpoint 2 should be hit.
         process.Continue()
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -79,7 +78,7 @@
         frame0 = thread.GetFrameAtIndex(0)
         symbol_line2 = frame0.GetSymbol()
         # We should have a symbol type of code.
-        self.assertTrue(symbol_line2.GetType() == lldb.eSymbolTypeCode)
+        self.assertEqual(symbol_line2.GetType(), lldb.eSymbolTypeCode)
         addr_line2 = symbol_line2.GetStartAddress()
         # And a section type of code, too.
         self.assertTrue(addr_line2.GetSection().GetSectionType()
diff --git a/src/llvm-project/lldb/test/API/python_api/hello_world/TestHelloWorld.py b/src/llvm-project/lldb/test/API/python_api/hello_world/TestHelloWorld.py
index ea8b9a7..0f616f4 100644
--- a/src/llvm-project/lldb/test/API/python_api/hello_world/TestHelloWorld.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/interpreter/TestCommandInterpreterAPI.py b/src/llvm-project/lldb/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
index a920ce8..151d445 100644
--- a/src/llvm-project/lldb/test/API/python_api/interpreter/TestCommandInterpreterAPI.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py b/src/llvm-project/lldb/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
index 9f30f6a..2db7fdd 100644
--- a/src/llvm-project/lldb/test/API/python_api/interpreter/TestRunCommandInterpreterAPI.py
+++ b/src/llvm-project/lldb/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"""
 
@@ -75,3 +73,40 @@
         self.assertGreater(n_errors, 0)
         self.assertTrue(quit_requested)
         self.assertFalse(has_crashed)
+
+class SBCommandInterpreterRunOptionsCase(TestBase):
+
+    NO_DEBUG_INFO_TESTCASE = True
+    mydir = TestBase.compute_mydir(__file__)
+
+    def test_command_interpreter_run_options(self):
+        """Test SBCommandInterpreterRunOptions default values, getters & setters """
+
+        opts = lldb.SBCommandInterpreterRunOptions()
+
+        # Check getters with default values
+        self.assertEqual(opts.GetStopOnContinue(), False)
+        self.assertEqual(opts.GetStopOnError(), False)
+        self.assertEqual(opts.GetStopOnCrash(), False)
+        self.assertEqual(opts.GetEchoCommands(), True)
+        self.assertEqual(opts.GetPrintResults(), True)
+        self.assertEqual(opts.GetPrintErrors(), True)
+        self.assertEqual(opts.GetAddToHistory(), True)
+
+        # Invert values
+        opts.SetStopOnContinue(not opts.GetStopOnContinue())
+        opts.SetStopOnError(not opts.GetStopOnError())
+        opts.SetStopOnCrash(not opts.GetStopOnCrash())
+        opts.SetEchoCommands(not opts.GetEchoCommands())
+        opts.SetPrintResults(not opts.GetPrintResults())
+        opts.SetPrintErrors(not opts.GetPrintErrors())
+        opts.SetAddToHistory(not opts.GetAddToHistory())
+
+        # Check the value changed
+        self.assertEqual(opts.GetStopOnContinue(), True)
+        self.assertEqual(opts.GetStopOnError(), True)
+        self.assertEqual(opts.GetStopOnCrash(), True)
+        self.assertEqual(opts.GetEchoCommands(), False)
+        self.assertEqual(opts.GetPrintResults(), False)
+        self.assertEqual(opts.GetPrintErrors(), False)
+        self.assertEqual(opts.GetAddToHistory(), False)
diff --git a/src/llvm-project/lldb/test/API/python_api/lldbutil/frame/TestFrameUtils.py b/src/llvm-project/lldb/test/API/python_api/lldbutil/frame/TestFrameUtils.py
index ec8d1f8..9c69bd9 100644
--- a/src/llvm-project/lldb/test/API/python_api/lldbutil/frame/TestFrameUtils.py
+++ b/src/llvm-project/lldb/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()
@@ -40,7 +39,7 @@
 
         if not process:
             self.fail("SBTarget.LaunchProcess() failed")
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
 
         import lldbsuite.test.lldbutil as lldbutil
diff --git a/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestLLDBIterator.py b/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
index 050ec87..4fdde97 100644
--- a/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestLLDBIterator.py
+++ b/src/llvm-project/lldb/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()
@@ -50,16 +49,15 @@
         for m in target.module_iter():
             mine.append(m)
 
-        self.assertTrue(len(yours) == len(mine))
+        self.assertEqual(len(yours), len(mine))
         for i in range(len(yours)):
             if self.TraceOn():
                 print("yours[%d]='%s'" % (i, get_description(yours[i])))
                 print("mine[%d]='%s'" % (i, get_description(mine[i])))
-            self.assertTrue(
-                yours[i] == mine[i],
+            self.assertEqual(
+                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()
@@ -73,7 +71,7 @@
         breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line2)
         self.assertTrue(breakpoint, VALID_BREAKPOINT)
 
-        self.assertTrue(target.GetNumBreakpoints() == 2)
+        self.assertEqual(target.GetNumBreakpoints(), 2)
 
         from lldbsuite.test.lldbutil import get_description
         yours = []
@@ -83,15 +81,14 @@
         for b in target.breakpoint_iter():
             mine.append(b)
 
-        self.assertTrue(len(yours) == len(mine))
+        self.assertEqual(len(yours), len(mine))
         for i in range(len(yours)):
             if self.TraceOn():
                 print("yours[%d]='%s'" % (i, get_description(yours[i])))
                 print("mine[%d]='%s'" % (i, get_description(mine[i])))
-            self.assertTrue(yours[i] == mine[i],
+            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()
@@ -119,7 +116,7 @@
             if thread.GetStopReason() == lldb.eStopReasonBreakpoint:
                 stopped_due_to_breakpoint = True
             for frame in thread:
-                self.assertTrue(frame.GetThread().GetThreadID() == ID)
+                self.assertEqual(frame.GetThread().GetThreadID(), ID)
                 if self.TraceOn():
                     print(frame)
 
diff --git a/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestRegistersIterator.py b/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
index fbb8bff..6c8c045 100644
--- a/src/llvm-project/lldb/test/API/python_api/lldbutil/iter/TestRegistersIterator.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/lldbutil/process/TestPrintStackTraces.py b/src/llvm-project/lldb/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
index 123b60e..4ac7b7c 100644
--- a/src/llvm-project/lldb/test/API/python_api/lldbutil/process/TestPrintStackTraces.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/module_section/TestModuleAndSection.py b/src/llvm-project/lldb/test/API/python_api/module_section/TestModuleAndSection.py
index 95d4576..3bb26a2 100644
--- a/src/llvm-project/lldb/test/API/python_api/module_section/TestModuleAndSection.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/name_lookup/TestNameLookup.py b/src/llvm-project/lldb/test/API/python_api/name_lookup/TestNameLookup.py
index 7db8b61..c1629f9 100644
--- a/src/llvm-project/lldb/test/API/python_api/name_lookup/TestNameLookup.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/objc_type/Makefile b/src/llvm-project/lldb/test/API/python_api/objc_type/Makefile
index 8b322ff..5f07431 100644
--- a/src/llvm-project/lldb/test/API/python_api/objc_type/Makefile
+++ b/src/llvm-project/lldb/test/API/python_api/objc_type/Makefile
@@ -1,8 +1,5 @@
 OBJC_SOURCES := main.m
-
 CFLAGS_EXTRAS := -w
+LD_EXTRAS := -lobjc
 
-
-
-LD_EXTRAS := -framework Foundation
 include Makefile.rules
diff --git a/src/llvm-project/lldb/test/API/python_api/objc_type/TestObjCType.py b/src/llvm-project/lldb/test/API/python_api/objc_type/TestObjCType.py
index 8599b8a..aa64244 100644
--- a/src/llvm-project/lldb/test/API/python_api/objc_type/TestObjCType.py
+++ b/src/llvm-project/lldb/test/API/python_api/objc_type/TestObjCType.py
@@ -49,12 +49,12 @@
         aBar = self.frame().FindVariable("aBar")
         aBarType = aBar.GetType()
         self.assertTrue(aBarType.IsValid(), "Bar should be a valid data type")
-        self.assertTrue(
-            aBarType.GetName() == "Bar *",
+        self.assertEqual(
+            aBarType.GetName(), "Bar *",
             "Bar has the right name")
 
-        self.assertTrue(
-            aBarType.GetNumberOfDirectBaseClasses() == 1,
+        self.assertEqual(
+            aBarType.GetNumberOfDirectBaseClasses(), 1,
             "Bar has a superclass")
         aFooType = aBarType.GetDirectBaseClassAtIndex(0)
 
@@ -64,6 +64,6 @@
         self.assertEquals(aBarType.GetNumberOfFields(), 1, "Bar has a field")
         aBarField = aBarType.GetFieldAtIndex(0)
 
-        self.assertTrue(
-            aBarField.GetName() == "_iVar",
+        self.assertEqual(
+            aBarField.GetName(), "_iVar",
             "The field has the right name")
diff --git a/src/llvm-project/lldb/test/API/python_api/objc_type/main.m b/src/llvm-project/lldb/test/API/python_api/objc_type/main.m
index 941442f..6075622 100644
--- a/src/llvm-project/lldb/test/API/python_api/objc_type/main.m
+++ b/src/llvm-project/lldb/test/API/python_api/objc_type/main.m
@@ -1,4 +1,4 @@
-#import <Foundation/Foundation.h>
+#import <objc/NSObject.h>
 
 @interface Foo: NSObject
 {}
diff --git a/src/llvm-project/lldb/test/API/python_api/process/TestProcessAPI.py b/src/llvm-project/lldb/test/API/python_api/process/TestProcessAPI.py
index 7174ba1..790d794 100644
--- a/src/llvm-project/lldb/test/API/python_api/process/TestProcessAPI.py
+++ b/src/llvm-project/lldb/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."""
@@ -362,6 +356,8 @@
         self.assertNotEqual(
             process_info.GetProcessID(), lldb.LLDB_INVALID_PROCESS_ID,
             "Process ID is valid")
+        triple = process_info.GetTriple()
+        self.assertIsNotNone(triple, "Process has a triple")
 
         # Additional process info varies by platform, so just check that
         # whatever info was retrieved is consistent and nothing blows up.
@@ -402,3 +398,58 @@
                 "Process effective group ID is invalid")
 
         process_info.GetParentProcessID()
+
+    def test_allocate_deallocate_memory(self):
+        """Test Python SBProcess.AllocateMemory() and SBProcess.DeallocateMemory() APIs."""
+        self.build()
+        (target, process, main_thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(
+            self, "// Set break point at this line", lldb.SBFileSpec("main.cpp"))
+
+        # Allocate a block of memory in the target process
+        error = lldb.SBError()
+        addr = process.AllocateMemory(16384, lldb.ePermissionsReadable, error)
+        if not error.Success() or addr == lldb.LLDB_INVALID_ADDRESS:
+            self.fail("SBProcess.AllocateMemory() failed")
+
+        # Now use WriteMemory() API to write 'a' into the allocated
+        # memory. Note that the debugger can do this even though the
+        # block is not set writable.
+        result = process.WriteMemory(addr, 'a', error)
+        if not error.Success() or result != 1:
+            self.fail("SBProcess.WriteMemory() failed")
+
+        # Read from the memory location.  This time it should be 'a'.
+        # Due to the typemap magic (see lldb.swig), we pass in 1 to ReadMemory and
+        # expect to get a Python string as the result object!
+        content = process.ReadMemory(addr, 1, error)
+        if not error.Success():
+            self.fail("SBProcess.ReadMemory() failed")
+        if self.TraceOn():
+            print("memory content:", content)
+
+        self.expect(
+            content,
+            "Result from SBProcess.ReadMemory() matches our expected output: 'a'",
+            exe=False,
+            startstr=b'a')
+
+        # Verify that the process itself can read the allocated memory
+        frame = main_thread.GetFrameAtIndex(0)
+        val = frame.EvaluateExpression(
+            "test_read(reinterpret_cast<char *>({:#x}))".format(addr))
+        self.expect(val.GetValue(),
+                    "Result of test_read() matches expected output 'a'",
+                    exe=False,
+                    startstr="'a'")
+
+        # Verify that the process cannot write into the block
+        val = frame.EvaluateExpression(
+            "test_write(reinterpret_cast<char *>({:#x}), 'b')".format(addr))
+        if val.GetError().Success():
+            self.fail(
+                "test_write() to allocated memory without write permission unexpectedly succeeded")
+
+        # Deallocate the memory
+        error = process.DeallocateMemory(addr)
+        if not error.Success():
+            self.fail("SBProcess.DeallocateMemory() failed")
diff --git a/src/llvm-project/lldb/test/API/python_api/process/io/TestProcessIO.py b/src/llvm-project/lldb/test/API/python_api/process/io/TestProcessIO.py
index 4646c9d..312cc28 100644
--- a/src/llvm-project/lldb/test/API/python_api/process/io/TestProcessIO.py
+++ b/src/llvm-project/lldb/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):
@@ -201,7 +196,7 @@
         threads = lldbutil.get_threads_stopped_at_breakpoint(
             self.process, self.breakpoint)
 
-        self.assertTrue(len(threads) == 1)
+        self.assertEqual(len(threads), 1)
         self.thread = threads[0]
         self.frame = self.thread.frames[0]
         self.assertTrue(self.frame, "Frame 0 is valid.")
@@ -217,7 +212,7 @@
         # Let process continue so it will exit
         self.process.Continue()
         state = self.process.GetState()
-        self.assertTrue(state == lldb.eStateExited, PROCESS_IS_VALID)
+        self.assertEqual(state, lldb.eStateExited, PROCESS_IS_VALID)
 
     def check_process_output(self, output, error):
             # Since we launched the process without specifying stdin/out/err,
diff --git a/src/llvm-project/lldb/test/API/python_api/process/main.cpp b/src/llvm-project/lldb/test/API/python_api/process/main.cpp
index f3cc7e1..07cde05 100644
--- a/src/llvm-project/lldb/test/API/python_api/process/main.cpp
+++ b/src/llvm-project/lldb/test/API/python_api/process/main.cpp
@@ -21,3 +21,13 @@
     return 0; // Set break point at this line and check variable 'my_char'.
               // Use lldb Python API to set memory content for my_int and check the result.
 }
+
+char test_read (char *ptr)
+{
+    return *ptr;
+}
+
+void test_write (char *ptr, char c)
+{
+    *ptr = c;
+}
diff --git a/src/llvm-project/lldb/test/API/python_api/process/read-mem-cstring/TestReadMemCString.py b/src/llvm-project/lldb/test/API/python_api/process/read-mem-cstring/TestReadMemCString.py
index f18b8e3..0e5aa0b 100644
--- a/src/llvm-project/lldb/test/API/python_api/process/read-mem-cstring/TestReadMemCString.py
+++ b/src/llvm-project/lldb/test/API/python_api/process/read-mem-cstring/TestReadMemCString.py
@@ -48,11 +48,11 @@
         # None object.
         empty_str = process.ReadCStringFromMemory(empty_str_addr, 2048, err)
         self.assertTrue(err.Success())
-        self.assertTrue(empty_str == "")
+        self.assertEqual(empty_str, "")
 
         one_letter_string = process.ReadCStringFromMemory(one_letter_str_addr, 2048, err)
         self.assertTrue(err.Success())
-        self.assertTrue(one_letter_string == "1")
+        self.assertEqual(one_letter_string, "1")
 
         invalid_memory_string = process.ReadCStringFromMemory(invalid_memory_str_addr, 2048, err)
         self.assertTrue(err.Fail())
diff --git a/src/llvm-project/lldb/test/API/python_api/sbdata/TestSBData.py b/src/llvm-project/lldb/test/API/python_api/sbdata/TestSBData.py
index ee04968..258ce51 100644
--- a/src/llvm-project/lldb/test/API/python_api/sbdata/TestSBData.py
+++ b/src/llvm-project/lldb/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
@@ -30,18 +29,17 @@
         data = lldb.SBData()
         data.SetData(error, addr_data, lldb.eByteOrderBig, 4)
         addr = data.GetAddress(error, 0)
-        self.assertTrue(addr == 0x11223344);
+        self.assertEqual(addr, 0x11223344);
         data.SetData(error, addr_data, lldb.eByteOrderBig, 8)
         addr = data.GetAddress(error, 0)
-        self.assertTrue(addr == 0x1122334455667788);
+        self.assertEqual(addr, 0x1122334455667788);
         data.SetData(error, addr_data, lldb.eByteOrderLittle, 4)
         addr = data.GetAddress(error, 0)
-        self.assertTrue(addr == 0x44332211);
+        self.assertEqual(addr, 0x44332211);
         data.SetData(error, addr_data, lldb.eByteOrderLittle, 8)
         addr = data.GetAddress(error, 0)
-        self.assertTrue(addr == 0x8877665544332211);
+        self.assertEqual(addr, 0x8877665544332211);
 
-    @add_test_categories(['pyapi'])
     @skipIfReproducer # SBData::SetData is not instrumented.
     def test_with_run_command(self):
         """Test the SBData APIs."""
@@ -146,8 +144,8 @@
         self.assertTrue(new_foobar.IsValid())
         data = new_foobar.GetData()
 
-        self.assertTrue(data.uint32[0] == 8, 'then foo[1].a == 8')
-        self.assertTrue(data.uint32[1] == 7, 'then foo[1].b == 7')
+        self.assertEqual(data.uint32[0], 8, 'then foo[1].a == 8')
+        self.assertEqual(data.uint32[1], 7, 'then foo[1].b == 7')
         # exploiting that sizeof(uint32) == sizeof(float)
         self.assertTrue(fabs(data.float[2] - 3.14) < 1, 'foo[1].c == 3.14')
 
@@ -218,7 +216,7 @@
         new_object = barfoo.CreateValueFromData(
             "new_object", data, barfoo.GetType().GetBasicType(
                 lldb.eBasicTypeInt))
-        self.assertTrue(new_object.GetValue() == "1", 'new_object == 1')
+        self.assertEqual(new_object.GetValue(), "1", 'new_object == 1')
 
         if data.GetByteOrder() == lldb.eByteOrderBig:
             data.SetData(
@@ -262,12 +260,12 @@
         hello_str = "hello!"
         data2 = lldb.SBData.CreateDataFromCString(
             process.GetByteOrder(), process.GetAddressByteSize(), hello_str)
-        self.assertTrue(len(data2.uint8) == len(hello_str))
-        self.assertTrue(data2.uint8[0] == 104, 'h == 104')
-        self.assertTrue(data2.uint8[1] == 101, 'e == 101')
-        self.assertTrue(data2.uint8[2] == 108, 'l == 108')
+        self.assertEqual(len(data2.uint8), len(hello_str))
+        self.assertEqual(data2.uint8[0], 104, 'h == 104')
+        self.assertEqual(data2.uint8[1], 101, 'e == 101')
+        self.assertEqual(data2.uint8[2], 108, 'l == 108')
         self.assert_data(data2.GetUnsignedInt8, 3, 108)  # l
-        self.assertTrue(data2.uint8[4] == 111, 'o == 111')
+        self.assertEqual(data2.uint8[4], 111, 'o == 111')
         self.assert_data(data2.GetUnsignedInt8, 5, 33)  # !
 
         uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]]
@@ -415,7 +413,7 @@
         data2 = lldb.SBData()
 
         data2.SetDataFromCString(hello_str)
-        self.assertTrue(len(data2.uint8) == len(hello_str))
+        self.assertEqual(len(data2.uint8), len(hello_str))
         self.assert_data(data2.GetUnsignedInt8, 0, 104)
         self.assert_data(data2.GetUnsignedInt8, 1, 101)
         self.assert_data(data2.GetUnsignedInt8, 2, 108)
@@ -430,20 +428,20 @@
         self.assert_data(data2.GetUnsignedInt64, 24, 4)
         self.assert_data(data2.GetUnsignedInt64, 32, 5)
 
-        self.assertTrue(
-            data2.uint64[0] == 1,
+        self.assertEqual(
+            data2.uint64[0], 1,
             'read_data_helper failure: set data2[0] = 1')
-        self.assertTrue(
-            data2.uint64[1] == 2,
+        self.assertEqual(
+            data2.uint64[1], 2,
             'read_data_helper failure: set data2[1] = 2')
-        self.assertTrue(
-            data2.uint64[2] == 3,
+        self.assertEqual(
+            data2.uint64[2], 3,
             'read_data_helper failure: set data2[2] = 3')
-        self.assertTrue(
-            data2.uint64[3] == 4,
+        self.assertEqual(
+            data2.uint64[3], 4,
             'read_data_helper failure: set data2[3] = 4')
-        self.assertTrue(
-            data2.uint64[4] == 5,
+        self.assertEqual(
+            data2.uint64[4], 5,
             'read_data_helper failure: set data2[4] = 5')
 
         self.assertTrue(
@@ -468,20 +466,20 @@
         self.assert_data(data2.GetUnsignedInt32, 12, 4)
         self.assert_data(data2.GetUnsignedInt32, 16, 5)
 
-        self.assertTrue(
-            data2.uint32[0] == 1,
+        self.assertEqual(
+            data2.uint32[0], 1,
             'read_data_helper failure: set 32-bit data2[0] = 1')
-        self.assertTrue(
-            data2.uint32[1] == 2,
+        self.assertEqual(
+            data2.uint32[1], 2,
             'read_data_helper failure: set 32-bit data2[1] = 2')
-        self.assertTrue(
-            data2.uint32[2] == 3,
+        self.assertEqual(
+            data2.uint32[2], 3,
             'read_data_helper failure: set 32-bit data2[2] = 3')
-        self.assertTrue(
-            data2.uint32[3] == 4,
+        self.assertEqual(
+            data2.uint32[3], 4,
             'read_data_helper failure: set 32-bit data2[3] = 4')
-        self.assertTrue(
-            data2.uint32[4] == 5,
+        self.assertEqual(
+            data2.uint32[4], 5,
             'read_data_helper failure: set 32-bit data2[4] = 5')
 
         data2.SetDataFromDoubleArray([3.14, 6.28, 2.71])
diff --git a/src/llvm-project/lldb/test/API/python_api/sbenvironment/TestSBEnvironment.py b/src/llvm-project/lldb/test/API/python_api/sbenvironment/TestSBEnvironment.py
index 62c3ac2..99369f8 100644
--- a/src/llvm-project/lldb/test/API/python_api/sbenvironment/TestSBEnvironment.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/sbplatform/TestSBPlatform.py b/src/llvm-project/lldb/test/API/python_api/sbplatform/TestSBPlatform.py
index 3fa4c10..b354a6e 100644
--- a/src/llvm-project/lldb/test/API/python_api/sbplatform/TestSBPlatform.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/src/llvm-project/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
index a1a3185..26f1791 100644
--- a/src/llvm-project/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/sbvalue_persist/TestSBValuePersist.py b/src/llvm-project/lldb/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
index 410c6c9..8324d23 100644
--- a/src/llvm-project/lldb/test/API/python_api/sbvalue_persist/TestSBValuePersist.py
+++ b/src/llvm-project/lldb/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"""
@@ -57,11 +56,11 @@
         self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
         self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
 
-        self.assertTrue(
-            fooPersist.GetValueAsUnsigned(0) == 10,
+        self.assertEqual(
+            fooPersist.GetValueAsUnsigned(0), 10,
             "fooPersist != 10")
-        self.assertTrue(
-            barPersist.GetPointeeData().sint32[0] == 4,
+        self.assertEqual(
+            barPersist.GetPointeeData().sint32[0], 4,
             "barPersist != 4")
         self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
 
@@ -71,11 +70,11 @@
         self.assertTrue(barPersist.IsValid(), "barPersist is not valid")
         self.assertTrue(bazPersist.IsValid(), "bazPersist is not valid")
 
-        self.assertTrue(
-            fooPersist.GetValueAsUnsigned(0) == 10,
+        self.assertEqual(
+            fooPersist.GetValueAsUnsigned(0), 10,
             "fooPersist != 10")
-        self.assertTrue(
-            barPersist.GetPointeeData().sint32[0] == 4,
+        self.assertEqual(
+            barPersist.GetPointeeData().sint32[0], 4,
             "barPersist != 4")
         self.assertEquals(bazPersist.GetSummary(), '"85"', "bazPersist != 85")
 
diff --git a/src/llvm-project/lldb/test/API/python_api/section/TestSectionAPI.py b/src/llvm-project/lldb/test/API/python_api/section/TestSectionAPI.py
index 1513b98..bd8e451 100644
--- a/src/llvm-project/lldb/test/API/python_api/section/TestSectionAPI.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/signals/TestSignalsAPI.py b/src/llvm-project/lldb/test/API/python_api/signals/TestSignalsAPI.py
index 602fee4..6c535d7 100644
--- a/src/llvm-project/lldb/test/API/python_api/signals/TestSignalsAPI.py
+++ b/src/llvm-project/lldb/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."""
@@ -48,9 +47,9 @@
         unix_signals.SetShouldNotify(sigint, False)
 
         process.Continue()
-        self.assertTrue(
-            process.state == lldb.eStateExited,
+        self.assertEqual(
+            process.state, lldb.eStateExited,
             "The process should have exited")
-        self.assertTrue(
-            process.GetExitStatus() == 0,
+        self.assertEqual(
+            process.GetExitStatus(), 0,
             "The process should have returned 0")
diff --git a/src/llvm-project/lldb/test/API/python_api/symbol-context/TestSymbolContext.py b/src/llvm-project/lldb/test/API/python_api/symbol-context/TestSymbolContext.py
index cbe4eff..c02e1bf 100644
--- a/src/llvm-project/lldb/test/API/python_api/symbol-context/TestSymbolContext.py
+++ b/src/llvm-project/lldb/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):
@@ -49,7 +48,7 @@
         self.assertTrue(thread.IsValid(),
                         "There should be a thread stopped due to breakpoint")
         frame0 = thread.GetFrameAtIndex(0)
-        self.assertTrue(frame0.GetLineEntry().GetLine() == self.line)
+        self.assertEqual(frame0.GetLineEntry().GetLine(), self.line)
 
         # Now get the SBSymbolContext from this frame.  We want everything. :-)
         context = frame0.GetSymbolContext(lldb.eSymbolContextEverything)
@@ -81,7 +80,7 @@
                     "The line entry should have the correct filename",
                     exe=False,
                     substrs=['main.c'])
-        self.assertTrue(lineEntry.GetLine() == self.line,
+        self.assertEqual(lineEntry.GetLine(), self.line,
                         "The line entry's line number should match ")
 
         symbol = context.GetSymbol()
diff --git a/src/llvm-project/lldb/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/src/llvm-project/lldb/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
index 27d1b60..8188c73 100644
--- a/src/llvm-project/lldb/test/API/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/target/TestTargetAPI.py b/src/llvm-project/lldb/test/API/python_api/target/TestTargetAPI.py
index 12c9d9d..c53f600 100644
--- a/src/llvm-project/lldb/test/API/python_api/target/TestTargetAPI.py
+++ b/src/llvm-project/lldb/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
@@ -244,11 +233,11 @@
         # Make sure we hit our breakpoint:
         thread_list = lldbutil.get_threads_stopped_at_breakpoint(
             process, breakpoint)
-        self.assertTrue(len(thread_list) == 1)
+        self.assertEqual(len(thread_list), 1)
 
         value_list = target.FindGlobalVariables(
             'my_global_var_of_char_type', 3)
-        self.assertTrue(value_list.GetSize() == 1)
+        self.assertEqual(value_list.GetSize(), 1)
         my_global_var = value_list.GetValueAtIndex(0)
         self.DebugSBValue(my_global_var)
         self.assertTrue(my_global_var)
@@ -267,9 +256,9 @@
                 if os.path.normpath(m.GetFileSpec().GetDirectory()) == self.getBuildDir() and m.GetFileSpec().GetFilename() == exe_name:
                     value_list = m.FindGlobalVariables(
                         target, 'my_global_var_of_char_type', 3)
-                    self.assertTrue(value_list.GetSize() == 1)
-                    self.assertTrue(
-                        value_list.GetValueAtIndex(0).GetValue() == "'X'")
+                    self.assertEqual(value_list.GetSize(), 1)
+                    self.assertEqual(
+                        value_list.GetValueAtIndex(0).GetValue(), "'X'")
                     break
 
     def find_compile_units(self, exe):
@@ -283,8 +272,8 @@
         list = target.FindCompileUnits(lldb.SBFileSpec(source_name, False))
         # Executable has been built just from one source file 'main.c',
         # so we may check only the first element of list.
-        self.assertTrue(
-            list[0].GetCompileUnit().GetFileSpec().GetFilename() == source_name)
+        self.assertEqual(
+            list[0].GetCompileUnit().GetFileSpec().GetFilename(), source_name)
 
     def find_functions(self, exe_name):
         """Exercise SBTaget.FindFunctions() API."""
@@ -296,15 +285,15 @@
 
         # Try it with a null name:
         list = target.FindFunctions(None, lldb.eFunctionNameTypeAuto)
-        self.assertTrue(list.GetSize() == 0)
+        self.assertEqual(list.GetSize(), 0)
 
         list = target.FindFunctions('c', lldb.eFunctionNameTypeAuto)
-        self.assertTrue(list.GetSize() == 1)
+        self.assertEqual(list.GetSize(), 1)
 
         for sc in list:
-            self.assertTrue(
-                sc.GetModule().GetFileSpec().GetFilename() == exe_name)
-            self.assertTrue(sc.GetSymbol().GetName() == 'c')
+            self.assertEqual(
+                sc.GetModule().GetFileSpec().GetFilename(), exe_name)
+            self.assertEqual(sc.GetSymbol().GetName(), 'c')
 
     def get_description(self):
         """Exercise SBTaget.GetDescription() API."""
@@ -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):
@@ -422,7 +410,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Frame #0 should be on self.line1.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -431,13 +419,13 @@
         #self.runCmd("process status")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.line1)
+        self.assertEqual(lineEntry.GetLine(), self.line1)
 
         address1 = lineEntry.GetStartAddress()
 
         # Continue the inferior, the breakpoint 2 should be hit.
         process.Continue()
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -446,7 +434,7 @@
         #self.runCmd("process status")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.line2)
+        self.assertEqual(lineEntry.GetLine(), self.line2)
 
         address2 = lineEntry.GetStartAddress()
 
@@ -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()
@@ -489,3 +478,27 @@
         target3 = self.dbg.CreateTargetWithFileAndTargetTriple(exe, target.GetTriple())
         self.assertTrue(target3.IsValid())
 
+
+    @skipIfWindows
+    def test_is_loaded(self):
+        """Exercise SBTarget.IsLoaded(SBModule&) API."""
+        d = {'EXE': 'b.out'}
+        self.build(dictionary=d)
+        self.setTearDownCleanup(dictionary=d)
+        target = self.create_simple_target('b.out')
+
+        self.assertFalse(target.IsLoaded(lldb.SBModule()))
+
+        num_modules = target.GetNumModules()
+        for i in range(num_modules):
+            module = target.GetModuleAtIndex(i)
+            self.assertFalse(target.IsLoaded(module), "Target that isn't "
+                             "running shouldn't have any module loaded.")
+
+        process = target.LaunchSimple(None, None,
+                                      self.get_process_working_directory())
+
+        for i in range(num_modules):
+            module = target.GetModuleAtIndex(i)
+            self.assertTrue(target.IsLoaded(module), "Running the target should "
+                            "have loaded its modules.")
diff --git a/src/llvm-project/lldb/test/API/python_api/thread/TestThreadAPI.py b/src/llvm-project/lldb/test/API/python_api/thread/TestThreadAPI.py
index c97be6c..b8416eb 100644
--- a/src/llvm-project/lldb/test/API/python_api/thread/TestThreadAPI.py
+++ b/src/llvm-project/lldb/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.
@@ -99,8 +94,7 @@
 
         proc_of_thread = thread.GetProcess()
         self.trace("proc_of_thread:", proc_of_thread)
-        self.assertTrue(proc_of_thread.GetProcessID()
-                        == process.GetProcessID())
+        self.assertEqual(proc_of_thread.GetProcessID(), process.GetProcessID())
 
     def get_stop_description(self):
         """Test Python SBThread.GetStopDescription() API."""
@@ -180,8 +174,8 @@
 
         thread.StepOut()
         self.runCmd("thread backtrace")
-        self.assertTrue(
-            thread.GetFrameAtIndex(0).GetLineEntry().GetLine() == self.step_out_of_malloc,
+        self.assertEqual(
+            thread.GetFrameAtIndex(0).GetLineEntry().GetLine(), self.step_out_of_malloc,
             "step out of malloc into function b is successful")
 
     def step_over_3_times(self, exe_name):
@@ -203,7 +197,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Frame #0 should be on self.step_out_of_malloc.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
             thread.IsValid(),
@@ -211,7 +205,7 @@
         self.runCmd("thread backtrace")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.step_out_of_malloc)
+        self.assertEqual(lineEntry.GetLine(), self.step_out_of_malloc)
 
         thread.StepOver()
         thread.StepOver()
@@ -222,13 +216,13 @@
         # main2.cpp.
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(thread.GetStopReason() == lldb.eStopReasonPlanComplete)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonPlanComplete)
         # Expected failure with clang as the compiler.
         # rdar://problem/9223880
         #
         # Which has been fixed on the lldb by compensating for inaccurate line
         # table information with r140416.
-        self.assertTrue(lineEntry.GetLine() == self.after_3_step_overs)
+        self.assertEqual(lineEntry.GetLine(), self.after_3_step_overs)
 
     def run_to_address(self, exe_name):
         """Test Python SBThread.RunToAddress() API."""
@@ -249,7 +243,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Frame #0 should be on self.step_out_of_malloc.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
             thread.IsValid(),
@@ -257,7 +251,7 @@
         self.runCmd("thread backtrace")
         frame0 = thread.GetFrameAtIndex(0)
         lineEntry = frame0.GetLineEntry()
-        self.assertTrue(lineEntry.GetLine() == self.step_out_of_malloc)
+        self.assertEqual(lineEntry.GetLine(), self.step_out_of_malloc)
 
         # Get the start/end addresses for this line entry.
         start_addr = lineEntry.GetStartAddress().GetLoadAddress(target)
diff --git a/src/llvm-project/lldb/test/API/python_api/type/TestTypeList.py b/src/llvm-project/lldb/test/API/python_api/type/TestTypeList.py
index 359dfe8..f60237b 100644
--- a/src/llvm-project/lldb/test/API/python_api/type/TestTypeList.py
+++ b/src/llvm-project/lldb/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}
@@ -47,7 +46,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Get Frame #0.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -113,13 +112,13 @@
         self.DebugSBType(task_head_type)
         self.assertTrue(task_head_type.IsPointerType())
 
-        self.assertTrue(task_head_type == task_pointer_type)
+        self.assertEqual(task_head_type, task_pointer_type)
 
         # Get the pointee type of 'task_head'.
         task_head_pointee_type = task_head_type.GetPointeeType()
         self.DebugSBType(task_head_pointee_type)
 
-        self.assertTrue(task_type == task_head_pointee_type)
+        self.assertEqual(task_type, task_head_pointee_type)
 
         # We'll now get the child member 'id' from 'task_head'.
         id = task_head.GetChildMemberWithName('id')
@@ -130,7 +129,7 @@
         # SBType.GetBasicType() takes an enum 'BasicType'
         # (lldb-enumerations.h).
         int_type = id_type.GetBasicType(lldb.eBasicTypeInt)
-        self.assertTrue(id_type == int_type)
+        self.assertEqual(id_type, int_type)
 
         # Find 'myint_arr' and check the array element type.
         myint_arr = frame0.FindVariable('myint_arr')
@@ -143,7 +142,7 @@
         self.DebugSBType(myint_arr_element_type)
         myint_type = target.FindFirstType('myint')
         self.DebugSBType(myint_type)
-        self.assertTrue(myint_arr_element_type == myint_type)
+        self.assertEqual(myint_arr_element_type, myint_type)
 
         # Test enum methods. Requires DW_AT_enum_class which was added in Dwarf 4.
         if configuration.dwarf_version >= 4:
diff --git a/src/llvm-project/lldb/test/API/python_api/value/TestValueAPI.py b/src/llvm-project/lldb/test/API/python_api/value/TestValueAPI.py
index bf8cbe3..543186c 100644
--- a/src/llvm-project/lldb/test/API/python_api/value/TestValueAPI.py
+++ b/src/llvm-project/lldb/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}
@@ -46,7 +45,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Get Frame #0.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -79,14 +78,14 @@
         list = target.FindGlobalVariables('weekdays', 1)
         weekdays = list.GetValueAtIndex(0)
         self.assertTrue(weekdays, VALID_VARIABLE)
-        self.assertTrue(weekdays.GetNumChildren() == 5, VALID_VARIABLE)
+        self.assertEqual(weekdays.GetNumChildren(), 5, VALID_VARIABLE)
         self.DebugSBValue(weekdays)
 
         # Get global variable 'g_table'.
         list = target.FindGlobalVariables('g_table', 1)
         g_table = list.GetValueAtIndex(0)
         self.assertTrue(g_table, VALID_VARIABLE)
-        self.assertTrue(g_table.GetNumChildren() == 2, VALID_VARIABLE)
+        self.assertEqual(g_table.GetNumChildren(), 2, VALID_VARIABLE)
         self.DebugSBValue(g_table)
 
         fmt = lldbutil.BasicFormatter()
@@ -126,9 +125,9 @@
         # Verify the SBValue::GetByteSize() API is working correctly.
         arch = self.getArchitecture()
         if arch == 'i386':
-            self.assertTrue(value.GetByteSize() == 4)
+            self.assertEqual(value.GetByteSize(), 4)
         elif arch == 'x86_64':
-            self.assertTrue(value.GetByteSize() == 8)
+            self.assertEqual(value.GetByteSize(), 8)
 
         # Get child at index 5 => 'Friday'.
         child = value.GetChildAtIndex(5, lldb.eNoDynamicValues, True)
@@ -176,11 +175,11 @@
         ]:
             self.assertTrue(v)
 
-        self.assertTrue(
-            frame0.FindVariable('uinthex').GetValueAsUnsigned() == 3768803088,
+        self.assertEqual(
+            frame0.FindVariable('uinthex').GetValueAsUnsigned(), 3768803088,
             'unsigned uinthex == 3768803088')
-        self.assertTrue(
-            frame0.FindVariable('sinthex').GetValueAsUnsigned() == 3768803088,
+        self.assertEqual(
+            frame0.FindVariable('sinthex').GetValueAsUnsigned(), 3768803088,
             'unsigned sinthex == 3768803088')
 
         self.assertTrue(
diff --git a/src/llvm-project/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py b/src/llvm-project/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
index 64391eb..ec162f6 100644
--- a/src/llvm-project/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
+++ b/src/llvm-project/lldb/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):
@@ -82,8 +81,8 @@
         self.assertTrue(result, "Setting val returned True.")
         actual_value = val_value.GetValueAsSigned(error, 0)
         self.assertTrue(error.Success(), "Got a changed value from val")
-        self.assertTrue(
-            actual_value == 12345,
+        self.assertEqual(
+            actual_value, 12345,
             "Got the right changed value from val")
 
         # Now check that we can set a structure element:
@@ -163,8 +162,8 @@
         self.assertTrue(result, "Setting sp returned true.")
         actual_value = sp_value.GetValueAsUnsigned(error, 0)
         self.assertTrue(error.Success(), "Got a changed value for sp")
-        self.assertTrue(
-            actual_value == 1,
+        self.assertEqual(
+            actual_value, 1,
             "Got the right changed value for sp.")
 
         # Boundary condition test the SBValue.CreateValueFromExpression() API.
diff --git a/src/llvm-project/lldb/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py b/src/llvm-project/lldb/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
index c778577..ac8f60b 100644
--- a/src/llvm-project/lldb/test/API/python_api/value/empty_class/TestValueAPIEmptyClass.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/value/linked_list/TestValueAPILinkedList.py b/src/llvm-project/lldb/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
index b45186a..afd25bd 100644
--- a/src/llvm-project/lldb/test/API/python_api/value/linked_list/TestValueAPILinkedList.py
+++ b/src/llvm-project/lldb/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}
@@ -50,7 +49,7 @@
         self.assertTrue(process, PROCESS_IS_VALID)
 
         # Get Frame #0.
-        self.assertTrue(process.GetState() == lldb.eStateStopped)
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
         self.assertTrue(
@@ -80,7 +79,7 @@
         # Sanity checks that the we visited all the items (no more, no less).
         if self.TraceOn():
             print("visited IDs:", list)
-        self.assertTrue(visitedIDs == list)
+        self.assertEqual(visitedIDs, list)
 
         # Let's exercise the linked_list_iter() API again, this time supplying
         # our end of list test function.
@@ -111,7 +110,7 @@
         # Sanity checks that the we visited all the items (no more, no less).
         if self.TraceOn():
             print("visited IDs:", list)
-        self.assertTrue(visitedIDs == list)
+        self.assertEqual(visitedIDs, list)
 
         # Get variable 'empty_task_head'.
         empty_task_head = frame0.FindVariable('empty_task_head')
@@ -125,7 +124,7 @@
                 print(cvf.format(t))
             list.append(int(t.GetChildMemberWithName("id").GetValue()))
 
-        self.assertTrue(len(list) == 0)
+        self.assertEqual(len(list), 0)
 
         # Get variable 'task_evil'.
         task_evil = frame0.FindVariable('task_evil')
@@ -139,4 +138,4 @@
                 print(cvf.format(t))
             list.append(int(t.GetChildMemberWithName("id").GetValue()))
 
-        self.assertTrue(len(list) == 3)
+        self.assertEqual(len(list), 3)
diff --git a/src/llvm-project/lldb/test/API/python_api/value_var_update/TestValueVarUpdate.py b/src/llvm-project/lldb/test/API/python_api/value_var_update/TestValueVarUpdate.py
index b425cef..e7d47de 100644
--- a/src/llvm-project/lldb/test/API/python_api/value_var_update/TestValueVarUpdate.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/watchpoint/TestSetWatchpoint.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/TestSetWatchpoint.py
index 49ecf7a..f135ed6 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/TestSetWatchpoint.py
+++ b/src/llvm-project/lldb/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):
@@ -49,7 +48,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
@@ -98,8 +97,8 @@
         process.Continue()
 
         # At this point, the inferior process should have exited.
-        self.assertTrue(
-            process.GetState() == lldb.eStateExited,
+        self.assertEqual(
+            process.GetState(), lldb.eStateExited,
             PROCESS_EXITED)
 
         self.dbg.DeleteTarget(target)
diff --git a/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
index 83a11d4..d0fd398 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIgnoreCount.py
+++ b/src/llvm-project/lldb/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/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIter.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIter.py
index 44df96b..6ca9999 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/TestWatchpointIter.py
+++ b/src/llvm-project/lldb/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()
@@ -52,7 +51,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
@@ -71,7 +70,7 @@
             self.HideStdout()
 
         # There should be only 1 watchpoint location under the target.
-        self.assertTrue(target.GetNumWatchpoints() == 1)
+        self.assertEqual(target.GetNumWatchpoints(), 1)
         self.assertTrue(watchpoint.IsEnabled())
         watch_id = watchpoint.GetID()
         self.assertTrue(watch_id != 0)
@@ -105,7 +104,7 @@
         # Now disable the 'rw' watchpoint.  The program won't stop when it reads
         # 'global' next.
         watchpoint.SetEnabled(False)
-        self.assertTrue(watchpoint.GetHardwareIndex() == -1)
+        self.assertEqual(watchpoint.GetHardwareIndex(), -1)
         self.assertFalse(watchpoint.IsEnabled())
 
         # Continue.  The program does not stop again when the variable is being
@@ -113,13 +112,13 @@
         process.Continue()
 
         # At this point, the inferior process should have exited.
-        self.assertTrue(
-            process.GetState() == lldb.eStateExited,
+        self.assertEqual(
+            process.GetState(), lldb.eStateExited,
             PROCESS_EXITED)
 
         # Verify some vital statistics and exercise the iterator API.
         for watchpoint in target.watchpoint_iter():
             self.assertTrue(watchpoint)
-            self.assertTrue(watchpoint.GetWatchSize() == 4)
-            self.assertTrue(watchpoint.GetHitCount() == 1)
+            self.assertEqual(watchpoint.GetWatchSize(), 4)
+            self.assertEqual(watchpoint.GetHitCount(), 1)
             print(watchpoint)
diff --git a/src/llvm-project/lldb/test/API/python_api/watchpoint/condition/TestWatchpointConditionAPI.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
index 7334734..847f678 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
+++ b/src/llvm-project/lldb/test/API/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
@@ -54,7 +54,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
@@ -92,4 +92,4 @@
         self.DebugSBValue(value)
 
         # Verify that the condition is met.
-        self.assertTrue(value.GetValueAsUnsigned() == 5)
+        self.assertEqual(value.GetValueAsUnsigned(), 5)
diff --git a/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
index 9cbc396..7df7285 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
+++ b/src/llvm-project/lldb/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()
@@ -50,7 +49,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
diff --git a/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py b/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
index 53e794d..15d9b2a 100644
--- a/src/llvm-project/lldb/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
+++ b/src/llvm-project/lldb/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()
@@ -49,7 +48,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
@@ -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
@@ -124,7 +122,7 @@
 
         # We should be stopped due to the breakpoint.  Get frame #0.
         process = target.GetProcess()
-        self.assertTrue(process.GetState() == lldb.eStateStopped,
+        self.assertEqual(process.GetState(), lldb.eStateStopped,
                         PROCESS_STOPPED)
         thread = lldbutil.get_stopped_thread(
             process, lldb.eStopReasonBreakpoint)
