Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: build/macosx/python.toml
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
import unittest
from io import StringIO
from unittest.mock import patch
import catalog
import mozunit
DIST_XML_DIRECT_TITLE = b"""<?xml version="1.0"?>
<installer-script>
<title>Command Line Tools for Xcode</title>
</installer-script>"""
DIST_XML_LOCALIZED_TITLE = b"""<?xml version="1.0"?>
<installer-script>
<strings>"TOOL_TITLE" = "Localized SDK Title";</strings>
<title>TOOL_TITLE</title>
</installer-script>"""
PRODUCT_INFO_XML = b"""<?xml version="1.0"?>
<installer-script>
<pkg-ref id="com.apple.pkg.CLTools_Executables">CLTools_Executables.pkg</pkg-ref>
<pkg-ref id="com.apple.pkg.CLTools_SDK">CLTools_SDK.pkg</pkg-ref>
</installer-script>"""
class TestShowProducts(unittest.TestCase):
SERVER_METADATA = {
"localization": {"English": {"title": "Command Line Tools"}},
"CFBundleShortVersionString": "14.2",
}
def _make_product_with_server_metadata(self, metadata_url_fragment="MOS_SDK"):
return {
"001-11111": {
"Packages": [
{
}
],
}
}
def test_server_metadata_url_prints_key_title_version(self):
products = self._make_product_with_server_metadata()
with patch("catalog.get_plist_at", return_value=self.SERVER_METADATA):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products)
self.assertEqual(
mock_out.getvalue().strip(), "001-11111 Command Line Tools 14.2"
)
def test_filter_matches_package_metadata_url(self):
products = self._make_product_with_server_metadata("MOS_SDK")
with patch("catalog.get_plist_at", return_value=self.SERVER_METADATA):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products, filter="MOS_SDK")
self.assertEqual(
mock_out.getvalue().strip(), "001-11111 Command Line Tools 14.2"
)
def test_filter_excludes_non_matching_products(self):
products = self._make_product_with_server_metadata("OTHER")
with patch("catalog.get_plist_at", return_value=self.SERVER_METADATA):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products, filter="MOS_SDK")
self.assertEqual(mock_out.getvalue(), "")
def test_filter_excludes_product_with_no_packages(self):
products = {
"001-22222": {
"Packages": [],
}
}
with patch("catalog.get_plist_at", return_value=self.SERVER_METADATA):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products, filter="MOS_SDK")
self.assertEqual(mock_out.getvalue(), "")
def test_distributions_direct_title(self):
products = {
"002-33333": {
"Packages": [],
}
}
with patch("catalog.get_content_at", return_value=DIST_XML_DIRECT_TITLE):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products)
self.assertEqual(
mock_out.getvalue().strip(), "002-33333 Command Line Tools for Xcode"
)
def test_distributions_localized_title(self):
products = {
"002-44444": {
"Packages": [],
}
}
with patch("catalog.get_content_at", return_value=DIST_XML_LOCALIZED_TITLE):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products)
self.assertEqual(mock_out.getvalue().strip(), "002-44444 Localized SDK Title")
def test_no_metadata_produces_no_output(self):
products = {"003-55555": {"Packages": []}}
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_products(products)
self.assertEqual(mock_out.getvalue(), "")
class TestShowProductInfo(unittest.TestCase):
PRODUCT = {
"Packages": [
{
"Digest": "abc123",
"Size": 1024,
},
{
"Digest": "def456",
"Size": 2048,
},
],
}
def test_lists_all_package_ids_and_urls(self):
with patch("catalog.get_content_at", return_value=PRODUCT_INFO_XML):
with patch("sys.stdout", new_callable=StringIO) as mock_out:
catalog.show_product_info(self.PRODUCT)
lines = mock_out.getvalue().splitlines()
self.assertIn(
lines,
)
self.assertIn(
lines,
)
def test_package_id_filter_calls_show_package_content(self):
with patch("catalog.get_content_at", return_value=PRODUCT_INFO_XML):
with patch("catalog.show_package_content") as mock_show:
catalog.show_product_info(self.PRODUCT, "com.apple.pkg.CLTools_SDK")
mock_show.assert_called_once_with(
)
def test_package_id_filter_excludes_other_packages(self):
with patch("catalog.get_content_at", return_value=PRODUCT_INFO_XML):
with patch("catalog.show_package_content") as mock_show:
catalog.show_product_info(
self.PRODUCT, "com.apple.pkg.CLTools_Executables"
)
mock_show.assert_called_once_with(
)
if __name__ == "__main__":
mozunit.main()