199451b44SJordan Rupprecht# encoding: utf-8
299451b44SJordan Rupprecht"""
399451b44SJordan RupprechtTest lldb data formatter subsystem.
499451b44SJordan Rupprecht"""
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht
799451b44SJordan Rupprechtimport lldb
899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprechtclass ObjCDataFormatterTestCase(TestBase):
1499451b44SJordan Rupprecht
15*9d5e95d0SJonas Devlieghere   def appkit_tester_impl(self, commands, use_constant_classes):
16*9d5e95d0SJonas Devlieghere      if use_constant_classes:
1799451b44SJordan Rupprecht         self.build()
18*9d5e95d0SJonas Devlieghere      else:
19*9d5e95d0SJonas Devlieghere         disable_constant_classes = {
20*9d5e95d0SJonas Devlieghere            'CC':
21*9d5e95d0SJonas Devlieghere            'xcrun clang', # FIXME: Remove when flags are available upstream.
22*9d5e95d0SJonas Devlieghere            'CFLAGS_EXTRAS':
23*9d5e95d0SJonas Devlieghere            '-fno-constant-nsnumber-literals ' +
24*9d5e95d0SJonas Devlieghere            '-fno-constant-nsarray-literals ' +
25*9d5e95d0SJonas Devlieghere            '-fno-constant-nsdictionary-literals'
26*9d5e95d0SJonas Devlieghere         }
27*9d5e95d0SJonas Devlieghere         self.build(dictionary=disable_constant_classes)
2899451b44SJordan Rupprecht      self.appkit_common_data_formatters_command()
2999451b44SJordan Rupprecht      commands()
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht   def appkit_common_data_formatters_command(self):
3299451b44SJordan Rupprecht      """Test formatters for AppKit classes."""
3399451b44SJordan Rupprecht      self.target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
3499451b44SJordan Rupprecht          self, '// Set break point at this line.',
3599451b44SJordan Rupprecht          lldb.SBFileSpec('main.m', False))
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht      # The stop reason of the thread should be breakpoint.
3899451b44SJordan Rupprecht      self.expect(
3999451b44SJordan Rupprecht          "thread list",
4099451b44SJordan Rupprecht          STOPPED_DUE_TO_BREAKPOINT,
4199451b44SJordan Rupprecht          substrs=['stopped', 'stop reason = breakpoint'])
4299451b44SJordan Rupprecht
4399451b44SJordan Rupprecht      # This is the function to remove the custom formats in order to have a
4499451b44SJordan Rupprecht      # clean slate for the next test case.
4599451b44SJordan Rupprecht      def cleanup():
4699451b44SJordan Rupprecht         self.runCmd('type format clear', check=False)
4799451b44SJordan Rupprecht         self.runCmd('type summary clear', check=False)
4899451b44SJordan Rupprecht         self.runCmd('type synth clear', check=False)
4999451b44SJordan Rupprecht
5099451b44SJordan Rupprecht      # Execute the cleanup function during test case tear down.
5199451b44SJordan Rupprecht      self.addTearDownHook(cleanup)
52