+| module | description | stable version |
+devel version | status |
+| gstreamer |
+core library and elements |
+1.28.5 |
+1.29.2 |
+active |
+| gst-plugins-good |
+a set of good-quality plug-ins under our preferred license, LGPL |
+1.28.5 | 1.29.2 | active |
+| gst-plugins-ugly |
+a set of good-quality plug-ins that might pose distribution problems |
+1.28.5 | 1.29.2 | active |
+| gst-plugins-bad |
+a set of plug-ins that need more quality, testing or documentation |
+1.28.5 | 1.29.2 | active |
+| qt-gstreamer |
+QtGStreamer |
+
+ N/A
+ |
+
+ N/A
+ |
+abandoned |
+
+
+"""
+
+
+class TestParseModuleListing:
+ """The parse is a pure function over the page content (6.1)."""
+
+ def test_parses_every_module_row(self, aws_stack):
+ modules = aws_stack.plugin_importer.parse_module_listing(
+ MODULE_LISTING_PAGE)
+ assert [m["name"] for m in modules] == [
+ "gstreamer", "gst-plugins-good", "gst-plugins-ugly",
+ "gst-plugins-bad", "qt-gstreamer",
+ ]
+
+ def test_entries_carry_description_repo_url_and_classification(
+ self, aws_stack):
+ modules = aws_stack.plugin_importer.parse_module_listing(
+ MODULE_LISTING_PAGE)
+ by_name = {m["name"]: m for m in modules}
+
+ good = by_name["gst-plugins-good"]
+ assert good["description"].startswith("a set of good-quality")
+ # Published repository location fed into the import path (6.2)
+ assert good["repoUrl"] == \
+ "https://gitlab.freedesktop.org/gstreamer/gst-plugins-good.git"
+ # Classification via classify_plugin_set (15.1)
+ assert good["classification"] == "good"
+ assert by_name["gst-plugins-bad"]["classification"] == "bad"
+ assert by_name["gst-plugins-ugly"]["classification"] == "ugly"
+ assert by_name["gstreamer"]["classification"] == "unclassified"
+
+ def test_layout_tables_are_ignored(self, aws_stack):
+ modules = aws_stack.plugin_importer.parse_module_listing(
+ MODULE_LISTING_PAGE)
+ names = [m["name"] for m in modules]
+ assert "Home" not in names
+ assert "Features" not in names
+
+ @pytest.mark.parametrize("page", [
+ "",
+ "