Fix parsing dependency in a legacy format

This commit is contained in:
Ivan Kravets
2020-02-05 15:43:39 +02:00
parent 365c3eaf4b
commit 390f1935d6
2 changed files with 48 additions and 10 deletions

View File

@ -355,9 +355,11 @@ class LibraryJsonManifestParser(BaseManifestParser):
@staticmethod
def _parse_dependencies(raw):
# compatibility with legacy dependency format
if isinstance(raw, dict) and "name" in raw:
raw = [raw]
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()]
if isinstance(raw, list):
for i, dependency in enumerate(raw):

View File

@ -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(
mp.as_dict(),
raw_data,
{
"keywords": ["sound", "audio", "music", "sd", "card", "playback"],
"frameworks": ["arduino"],
"export": {"exclude": ["audio_samples"]},
"platforms": ["atmelavr"],
"dependencies": [
{"name": "deps1", "version": "1.0.0"},
{
"name": "@owner/deps2",
"version": "1.0.0",
"frameworks": ["arduino", "espidf"],
},
{"name": "deps1", "version": "1.0.0"},
{
"name": "deps3",
"version": "1.0.0",
@ -113,7 +114,7 @@ def test_library_json_parser():
# broken dependencies
with pytest.raises(parser.ManifestParserError):
mp = parser.LibraryJsonManifestParser({"dependencies": ["deps1", "deps2"]})
parser.LibraryJsonManifestParser({"dependencies": ["deps1", "deps2"]})
def test_module_json_parser():
@ -172,9 +173,10 @@ sentence=This is Arduino library
customField=Custom Value
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(
mp.as_dict(),
raw_data,
{
"name": "TestPackage",
"version": "1.2.3",
@ -303,6 +305,7 @@ def test_library_json_schema():
raw_data = parser.ManifestParserFactory.new(
contents, parser.ManifestFileType.LIBRARY_JSON
).as_dict()
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
data = ManifestSchema().load_manifest(raw_data)
@ -343,8 +346,8 @@ def test_library_json_schema():
},
],
"dependencies": [
{"name": "deps1", "version": "1.0.0"},
{"name": "@owner/deps2", "version": "1.0.0", "frameworks": ["arduino"]},
{"name": "deps1", "version": "1.0.0"},
{
"name": "deps3",
"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():
contents = """
@ -371,6 +404,7 @@ depends=First Library (=2.0.0), Second Library (>=1.2.0), Third
raw_data = parser.ManifestParserFactory.new(
contents, parser.ManifestFileType.LIBRARY_PROPERTIES
).as_dict()
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
data = ManifestSchema().load_manifest(raw_data)
@ -524,6 +558,8 @@ def test_platform_json_schema():
contents, parser.ManifestFileType.PLATFORM_JSON
).as_dict()
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)
assert not jsondiff.diff(
@ -547,9 +583,9 @@ def test_platform_json_schema():
"frameworks": sorted(["arduino", "simba"]),
"version": "1.15.0",
"dependencies": [
{"name": "toolchain-atmelavr", "version": "~1.50400.0"},
{"name": "framework-arduinoavr", "version": "~4.2.0"},
{"name": "tool-avrdude", "version": "~1.60300.0"},
{"name": "toolchain-atmelavr", "version": "~1.50400.0"},
],
},
)