forked from platformio/platformio-core
Fix parsing dependency in a legacy format
This commit is contained in:
@ -355,9 +355,11 @@ class LibraryJsonManifestParser(BaseManifestParser):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse_dependencies(raw):
|
def _parse_dependencies(raw):
|
||||||
|
# compatibility with legacy dependency format
|
||||||
|
if isinstance(raw, dict) and "name" in raw:
|
||||||
|
raw = [raw]
|
||||||
|
|
||||||
if isinstance(raw, dict):
|
if isinstance(raw, dict):
|
||||||
if "name" in raw: # compatibility with dep as dict
|
|
||||||
return [raw]
|
|
||||||
return [dict(name=name, version=version) for name, version in raw.items()]
|
return [dict(name=name, version=version) for name, version in raw.items()]
|
||||||
if isinstance(raw, list):
|
if isinstance(raw, list):
|
||||||
for i, dependency in enumerate(raw):
|
for i, dependency in enumerate(raw):
|
||||||
|
@ -87,21 +87,22 @@ def test_library_json_parser():
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
mp = parser.LibraryJsonManifestParser(contents)
|
raw_data = parser.LibraryJsonManifestParser(contents).as_dict()
|
||||||
|
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
|
||||||
assert not jsondiff.diff(
|
assert not jsondiff.diff(
|
||||||
mp.as_dict(),
|
raw_data,
|
||||||
{
|
{
|
||||||
"keywords": ["sound", "audio", "music", "sd", "card", "playback"],
|
"keywords": ["sound", "audio", "music", "sd", "card", "playback"],
|
||||||
"frameworks": ["arduino"],
|
"frameworks": ["arduino"],
|
||||||
"export": {"exclude": ["audio_samples"]},
|
"export": {"exclude": ["audio_samples"]},
|
||||||
"platforms": ["atmelavr"],
|
"platforms": ["atmelavr"],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
{"name": "deps1", "version": "1.0.0"},
|
|
||||||
{
|
{
|
||||||
"name": "@owner/deps2",
|
"name": "@owner/deps2",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"frameworks": ["arduino", "espidf"],
|
"frameworks": ["arduino", "espidf"],
|
||||||
},
|
},
|
||||||
|
{"name": "deps1", "version": "1.0.0"},
|
||||||
{
|
{
|
||||||
"name": "deps3",
|
"name": "deps3",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -113,7 +114,7 @@ def test_library_json_parser():
|
|||||||
|
|
||||||
# broken dependencies
|
# broken dependencies
|
||||||
with pytest.raises(parser.ManifestParserError):
|
with pytest.raises(parser.ManifestParserError):
|
||||||
mp = parser.LibraryJsonManifestParser({"dependencies": ["deps1", "deps2"]})
|
parser.LibraryJsonManifestParser({"dependencies": ["deps1", "deps2"]})
|
||||||
|
|
||||||
|
|
||||||
def test_module_json_parser():
|
def test_module_json_parser():
|
||||||
@ -172,9 +173,10 @@ sentence=This is Arduino library
|
|||||||
customField=Custom Value
|
customField=Custom Value
|
||||||
depends=First Library (=2.0.0), Second Library (>=1.2.0), Third
|
depends=First Library (=2.0.0), Second Library (>=1.2.0), Third
|
||||||
"""
|
"""
|
||||||
mp = parser.LibraryPropertiesManifestParser(contents)
|
raw_data = parser.LibraryPropertiesManifestParser(contents).as_dict()
|
||||||
|
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
|
||||||
assert not jsondiff.diff(
|
assert not jsondiff.diff(
|
||||||
mp.as_dict(),
|
raw_data,
|
||||||
{
|
{
|
||||||
"name": "TestPackage",
|
"name": "TestPackage",
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
@ -303,6 +305,7 @@ def test_library_json_schema():
|
|||||||
raw_data = parser.ManifestParserFactory.new(
|
raw_data = parser.ManifestParserFactory.new(
|
||||||
contents, parser.ManifestFileType.LIBRARY_JSON
|
contents, parser.ManifestFileType.LIBRARY_JSON
|
||||||
).as_dict()
|
).as_dict()
|
||||||
|
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
|
||||||
|
|
||||||
data = ManifestSchema().load_manifest(raw_data)
|
data = ManifestSchema().load_manifest(raw_data)
|
||||||
|
|
||||||
@ -343,8 +346,8 @@ def test_library_json_schema():
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
{"name": "deps1", "version": "1.0.0"},
|
|
||||||
{"name": "@owner/deps2", "version": "1.0.0", "frameworks": ["arduino"]},
|
{"name": "@owner/deps2", "version": "1.0.0", "frameworks": ["arduino"]},
|
||||||
|
{"name": "deps1", "version": "1.0.0"},
|
||||||
{
|
{
|
||||||
"name": "deps3",
|
"name": "deps3",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -354,6 +357,36 @@ def test_library_json_schema():
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# legacy dependencies format
|
||||||
|
contents = """
|
||||||
|
{
|
||||||
|
"name": "DallasTemperature",
|
||||||
|
"version": "3.8.0",
|
||||||
|
"dependencies":
|
||||||
|
{
|
||||||
|
"name": "OneWire",
|
||||||
|
"authors": "Paul Stoffregen",
|
||||||
|
"frameworks": "arduino"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
raw_data = parser.LibraryJsonManifestParser(contents).as_dict()
|
||||||
|
data = ManifestSchema().load_manifest(raw_data)
|
||||||
|
assert not jsondiff.diff(
|
||||||
|
data,
|
||||||
|
{
|
||||||
|
"name": "DallasTemperature",
|
||||||
|
"version": "3.8.0",
|
||||||
|
"dependencies": [
|
||||||
|
{
|
||||||
|
"name": "OneWire",
|
||||||
|
"authors": ["Paul Stoffregen"],
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_library_properties_schema():
|
def test_library_properties_schema():
|
||||||
contents = """
|
contents = """
|
||||||
@ -371,6 +404,7 @@ depends=First Library (=2.0.0), Second Library (>=1.2.0), Third
|
|||||||
raw_data = parser.ManifestParserFactory.new(
|
raw_data = parser.ManifestParserFactory.new(
|
||||||
contents, parser.ManifestFileType.LIBRARY_PROPERTIES
|
contents, parser.ManifestFileType.LIBRARY_PROPERTIES
|
||||||
).as_dict()
|
).as_dict()
|
||||||
|
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
|
||||||
|
|
||||||
data = ManifestSchema().load_manifest(raw_data)
|
data = ManifestSchema().load_manifest(raw_data)
|
||||||
|
|
||||||
@ -524,6 +558,8 @@ def test_platform_json_schema():
|
|||||||
contents, parser.ManifestFileType.PLATFORM_JSON
|
contents, parser.ManifestFileType.PLATFORM_JSON
|
||||||
).as_dict()
|
).as_dict()
|
||||||
raw_data["frameworks"] = sorted(raw_data["frameworks"])
|
raw_data["frameworks"] = sorted(raw_data["frameworks"])
|
||||||
|
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
|
||||||
|
|
||||||
data = ManifestSchema().load_manifest(raw_data)
|
data = ManifestSchema().load_manifest(raw_data)
|
||||||
|
|
||||||
assert not jsondiff.diff(
|
assert not jsondiff.diff(
|
||||||
@ -547,9 +583,9 @@ def test_platform_json_schema():
|
|||||||
"frameworks": sorted(["arduino", "simba"]),
|
"frameworks": sorted(["arduino", "simba"]),
|
||||||
"version": "1.15.0",
|
"version": "1.15.0",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
{"name": "toolchain-atmelavr", "version": "~1.50400.0"},
|
|
||||||
{"name": "framework-arduinoavr", "version": "~4.2.0"},
|
{"name": "framework-arduinoavr", "version": "~4.2.0"},
|
||||||
{"name": "tool-avrdude", "version": "~1.60300.0"},
|
{"name": "tool-avrdude", "version": "~1.60300.0"},
|
||||||
|
{"name": "toolchain-atmelavr", "version": "~1.50400.0"},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user