mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 16:32:18 +01:00 
			
		
		
		
	The Meson test harness handles that for us. With a custom timeout, meson test -t is not useful (which is surprising for users) and interactive debugging sessions may terminate unexepectedly.
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python3
 | |
| # -*- coding: utf-8 -*-
 | |
| #
 | |
| # Copyright © 2018, 2019 Endless Mobile, Inc.
 | |
| # Copyright © 2023 Philip Withnall
 | |
| #
 | |
| # SPDX-License-Identifier: LGPL-2.1-or-later
 | |
| #
 | |
| # This library is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU Lesser General Public
 | |
| # License as published by the Free Software Foundation; either
 | |
| # version 2.1 of the License, or (at your option) any later version.
 | |
| #
 | |
| # This library is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| # Lesser General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU Lesser General Public
 | |
| # License along with this library; if not, write to the Free Software
 | |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | |
| # MA  02110-1301  USA
 | |
| 
 | |
| """Integration tests for the gio utility."""
 | |
| 
 | |
| import platform
 | |
| import subprocess
 | |
| import sys
 | |
| import tempfile
 | |
| import unittest
 | |
| 
 | |
| from pathlib import Path
 | |
| 
 | |
| import taptestrunner
 | |
| import testprogramrunner
 | |
| 
 | |
| 
 | |
| class TestGioTool(testprogramrunner.TestProgramRunner):
 | |
|     """Integration test for running the gio tool.
 | |
| 
 | |
|     This can be run when installed or uninstalled. When uninstalled, it
 | |
|     requires G_TEST_BUILDDIR and G_TEST_SRCDIR to be set.
 | |
| 
 | |
|     The idea with this test harness is to test the gio utility, its
 | |
|     handling of command line arguments, its exit statuses, and its actual
 | |
|     effects on the file system.
 | |
|     """
 | |
| 
 | |
|     PROGRAM_NAME = "gio"
 | |
|     PROGRAM_TYPE = testprogramrunner.ProgramType.NATIVE
 | |
| 
 | |
|     def runGio(self, *args):
 | |
|         return self.runTestProgram(args)
 | |
| 
 | |
|     def test_help(self):
 | |
|         """Test the --help argument and help subcommand."""
 | |
|         result = self.runGio("--help")
 | |
|         result2 = self.runGio("help")
 | |
| 
 | |
|         self.assertEqual(result.out, result2.out)
 | |
|         self.assertEqual(result.err, result2.err)
 | |
| 
 | |
|         self.assertIn("Usage:\n  gio COMMAND", result.out)
 | |
|         self.assertIn("List the contents of locations", result.out)
 | |
| 
 | |
|     def test_no_args(self):
 | |
|         """Test running with no arguments at all."""
 | |
|         with self.assertRaises(subprocess.CalledProcessError):
 | |
|             self.runGio()
 | |
| 
 | |
|     def test_info_non_default_attributes(self):
 | |
|         """Test running `gio info --attributes` with a non-default list."""
 | |
|         with tempfile.NamedTemporaryFile(dir=self.tmpdir.name) as tmpfile:
 | |
|             result = self.runGio(
 | |
|                 "info", "--attributes=standard::content-type", tmpfile.name
 | |
|             )
 | |
|             if sys.platform == "darwin":
 | |
|                 self.assertIn("standard::content-type: public.text", result.out)
 | |
|             else:
 | |
|                 self.assertIn(
 | |
|                     "standard::content-type: application/x-zerosize", result.out
 | |
|                 )
 | |
| 
 | |
| 
 | |
| @unittest.skipIf(platform.system() == "Darwin", "gio launch not supported on darwin")
 | |
| class TestGioLaunchExpandsDesktopEntry(testprogramrunner.TestProgramRunner):
 | |
|     """Integration test for `gio launch` with field code %k in the Exec line.
 | |
| 
 | |
|     This can be run when installed or uninstalled. When uninstalled, it
 | |
|     requires G_TEST_BUILDDIR and G_TEST_SRCDIR to be set.
 | |
| 
 | |
|     The idea with this test harness is to test that the `gio launch` command
 | |
|     expands the `%k` field code in a desktop entry's Exec line to its location,
 | |
|     i.e. its absolute path.
 | |
|     """
 | |
| 
 | |
|     PROGRAM_NAME = "gio"
 | |
|     PROGRAM_TYPE = testprogramrunner.ProgramType.NATIVE
 | |
| 
 | |
|     TEMPLATE = """
 | |
| [Desktop Entry]
 | |
| Type = Application
 | |
| Name = Test
 | |
| Exec = {python} -c 'print("%k")'
 | |
| """
 | |
| 
 | |
|     def setUp(self):
 | |
|         super().setUp()
 | |
| 
 | |
|         self.parent = Path(self.tmpdir.name).resolve()
 | |
| 
 | |
|         self.folder = self.parent / "folder"
 | |
|         self.entry = self.folder / "desktop.entry"
 | |
| 
 | |
|         self.sibling = self.parent / "sibling"
 | |
| 
 | |
|         self.folder.mkdir(exist_ok=True, parents=True)
 | |
|         self.sibling.mkdir(exist_ok=True, parents=True)
 | |
| 
 | |
|         with self.entry.open("w", encoding="utf-8") as fd:
 | |
|             fd.write(self.TEMPLATE.format(python=sys.executable))
 | |
| 
 | |
|     def launchAndCheck(self, entry: Path, cwd: Path = None):
 | |
|         result = self.runTestProgram(["launch", str(entry)], cwd=str(cwd))
 | |
| 
 | |
|         self.assertIn(str(self.entry), result.out)
 | |
| 
 | |
|     def test_absolute_from_folder(self):
 | |
|         """Test with absolute path, with changing working directory to folder."""
 | |
|         self.launchAndCheck(self.entry, cwd=self.folder)
 | |
| 
 | |
|     def test_absolute_from_parent(self):
 | |
|         """Test with absolute path, with changing working directory to parent."""
 | |
|         self.launchAndCheck(self.entry, cwd=self.parent)
 | |
| 
 | |
|     def test_absolute_from_sibling(self):
 | |
|         """Test with absolute path, with changing working directory to sibling."""
 | |
|         self.launchAndCheck(self.entry, cwd=self.sibling)
 | |
| 
 | |
|     def test_relative_from_folder(self):
 | |
|         """Test with relative path, with changing working directory to folder."""
 | |
|         self.launchAndCheck(self.entry.relative_to(self.folder), cwd=self.folder)
 | |
| 
 | |
|     def test_relative_from_parent(self):
 | |
|         """Test with relative path, with changing working directory to parent."""
 | |
|         self.launchAndCheck(self.entry.relative_to(self.parent), cwd=self.parent)
 | |
| 
 | |
|     def test_relative_from_sibling(self):
 | |
|         """Test with relative path, with changing working directory to sibling."""
 | |
|         self.launchAndCheck(
 | |
|             Path("..") / self.entry.relative_to(self.parent), cwd=self.sibling
 | |
|         )
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     unittest.main(testRunner=taptestrunner.TAPTestRunner())
 |