From d69805b38a1815e7aaadf49bdd019c7cca105ac6 Mon Sep 17 00:00:00 2001
From: Tian Gao <gaogaotiantian@hotmail.com>
Date: Wed, 13 Sep 2023 01:47:35 -0700
Subject: gh-109156: Add tests for de-instrumenting instructions with
 instrumented lines (GH-109157)

---
 Lib/test/test_monitoring.py                             | 17 +++++++++++++++++
 .../2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst      |  1 +
 2 files changed, 18 insertions(+)
 create mode 100644 Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst

diff --git a/Lib/test/test_monitoring.py b/Lib/test/test_monitoring.py
index 575862b..992d3cc 100644
--- a/Lib/test/test_monitoring.py
+++ b/Lib/test/test_monitoring.py
@@ -1152,6 +1152,23 @@ class TestLineAndInstructionEvents(CheckEvents):
             ('instruction', 'func1', 14),
             ('line', 'get_events', 11)])
 
+    def test_turn_off_only_instruction(self):
+        """
+        LINE events should be recorded after INSTRUCTION event is turned off
+        """
+        events = []
+        def line(*args):
+            events.append("line")
+        sys.monitoring.set_events(TEST_TOOL, 0)
+        sys.monitoring.register_callback(TEST_TOOL, E.LINE, line)
+        sys.monitoring.register_callback(TEST_TOOL, E.INSTRUCTION, lambda *args: None)
+        sys.monitoring.set_events(TEST_TOOL, E.LINE | E.INSTRUCTION)
+        sys.monitoring.set_events(TEST_TOOL, E.LINE)
+        events = []
+        a = 0
+        sys.monitoring.set_events(TEST_TOOL, 0)
+        self.assertGreater(len(events), 0)
+
 class TestInstallIncrementallly(MonitoringTestBase, unittest.TestCase):
 
     def check_events(self, func, must_include, tool=TEST_TOOL, recorders=(ExceptionRecorder,)):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst
new file mode 100644
index 0000000..e681482
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst	
@@ -0,0 +1 @@
+Add tests for de-instrumenting instructions while keeping the instrumentation for lines
-- 
cgit v0.12