""" Test if the reproducer correctly detects whether the file system is case sensitive. """ import lldb import tempfile from lldbsuite.test import lldbtest_config from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class ReproducerFileSystemSensitivityTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) NO_DEBUG_INFO_TESTCASE = True @skipIfNetBSD @skipIfWindows @skipIfRemote @skipIfiOSSimulator @skipIfReproducer def test_reproducer_attach(self): # The reproducer output path. Note that this is on purpose a lower-case # file name. See the case-sensitivity check below. reproducer = self.getBuildArtifact('test.reproducer') try: shutil.rmtree(reproducer) except OSError: pass # Use Popen because pexpect is overkill and spawnSubprocess is # asynchronous. capture = subprocess.Popen([ lldbtest_config.lldbExec, '-b', '--no-lldbinit', '--no-use-colors'] + sum(map(lambda x: ['-O', x], self.setUpCommands()), []) + ['--capture', '--capture-path', reproducer, '-o', 'reproducer generate' ], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) outs, _ = capture.communicate() outs = outs.decode('utf-8') self.assertIn('Reproducer written', outs) # Read in the YAML file. We only care about a single value, so no # need to parse the full file. with open(os.path.join(reproducer, "files.yaml"), 'r') as file: files_yaml = file.read() # Detect the file system case sensitivity by checking if we can # find the reproducer path after converting it to upper case (the # file name is lower case before conversion, so this only works # on case insensitive file systems). case_sensitive = "false" if os.path.exists(reproducer.upper()) else "true" self.assertIn("'case-sensitive': '" + case_sensitive + "'", files_yaml)