forked from platformio/platformio-core
ManifestParser: normalize example names
This commit is contained in:
@ -42,7 +42,7 @@ class ExportModel(DataModel):
|
|||||||
|
|
||||||
|
|
||||||
class ExampleModel(DataModel):
|
class ExampleModel(DataModel):
|
||||||
name = DataField(max_length=100, regex=r"^[a-zA-Z\d\-\_/\. ]+$", required=True)
|
name = DataField(max_length=100, regex=r"^[a-zA-Z\d\-\_/]+$", required=True)
|
||||||
base = DataField(required=True)
|
base = DataField(required=True)
|
||||||
files = DataField(type=ListOfType(DataField()))
|
files = DataField(type=ListOfType(DataField()))
|
||||||
|
|
||||||
|
@ -208,12 +208,20 @@ class BaseManifestParser(object):
|
|||||||
if not matched_files:
|
if not matched_files:
|
||||||
continue
|
continue
|
||||||
result[root] = dict(
|
result[root] = dict(
|
||||||
name=os.path.relpath(root, examples_dir),
|
name="Examples"
|
||||||
|
if root == examples_dir
|
||||||
|
else os.path.relpath(root, examples_dir),
|
||||||
base=os.path.relpath(root, package_dir),
|
base=os.path.relpath(root, package_dir),
|
||||||
files=matched_files,
|
files=matched_files,
|
||||||
)
|
)
|
||||||
|
|
||||||
return list(result.values()) or None
|
result = list(result.values())
|
||||||
|
|
||||||
|
# normalize example names
|
||||||
|
for item in result:
|
||||||
|
item["name"] = re.sub(r"[^a-z\d\d\-\_/]+", "_", item["name"], flags=re.I)
|
||||||
|
|
||||||
|
return result or None
|
||||||
|
|
||||||
|
|
||||||
class LibraryJsonManifestParser(BaseManifestParser):
|
class LibraryJsonManifestParser(BaseManifestParser):
|
||||||
|
@ -438,8 +438,9 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
pio_dir.mkdir("src").join("main.cpp").write("")
|
pio_dir.mkdir("src").join("main.cpp").write("")
|
||||||
|
|
||||||
# wiring examples
|
# wiring examples
|
||||||
examples_dir.mkdir("SomeSketchIno").join("SomeSketchIno.ino").write("")
|
arduino_dir = examples_dir.mkdir("1. General")
|
||||||
examples_dir.mkdir("SomeSketchPde").join("SomeSketchPde.pde").write("")
|
arduino_dir.mkdir("SomeSketchIno").join("SomeSketchIno.ino").write("")
|
||||||
|
arduino_dir.mkdir("SomeSketchPde").join("SomeSketchPde.pde").write("")
|
||||||
|
|
||||||
# custom examples
|
# custom examples
|
||||||
demo_dir = examples_dir.mkdir("demo")
|
demo_dir = examples_dir.mkdir("demo")
|
||||||
@ -455,6 +456,10 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
pio_dir.mkdir("include").join("world.h").write("")
|
pio_dir.mkdir("include").join("world.h").write("")
|
||||||
pio_dir.mkdir("src").join("world.c").write("")
|
pio_dir.mkdir("src").join("world.c").write("")
|
||||||
|
|
||||||
|
# example files in root
|
||||||
|
examples_dir.join("root.c").write("")
|
||||||
|
examples_dir.join("root.h").write("")
|
||||||
|
|
||||||
# invalid example
|
# invalid example
|
||||||
examples_dir.mkdir("invalid-example").join("hello.json")
|
examples_dir.mkdir("invalid-example").join("hello.json")
|
||||||
|
|
||||||
@ -462,7 +467,7 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
|
|
||||||
data = parser.ManifestParserFactory.new_from_dir(str(package_dir)).as_dict()
|
data = parser.ManifestParserFactory.new_from_dir(str(package_dir)).as_dict()
|
||||||
assert isinstance(data["examples"], list)
|
assert isinstance(data["examples"], list)
|
||||||
assert len(data["examples"]) == 5
|
assert len(data["examples"]) == 6
|
||||||
|
|
||||||
def _sort_examples(items):
|
def _sort_examples(items):
|
||||||
for i, item in enumerate(items):
|
for i, item in enumerate(items):
|
||||||
@ -471,7 +476,7 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
|
|
||||||
data["examples"] = _sort_examples(data["examples"])
|
data["examples"] = _sort_examples(data["examples"])
|
||||||
model = ManifestModel(**data)
|
model = ManifestModel(**data)
|
||||||
assert model.examples[0].name == "PlatformIO/hello"
|
assert model.examples[3].name == "PlatformIO/hello"
|
||||||
assert model == ManifestModel(
|
assert model == ManifestModel(
|
||||||
**{
|
**{
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -484,13 +489,13 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
"files": ["platformio.ini", "include/main.h", "src/main.cpp"],
|
"files": ["platformio.ini", "include/main.h", "src/main.cpp"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "SomeSketchIno",
|
"name": "1_General/SomeSketchIno",
|
||||||
"base": "examples/SomeSketchIno",
|
"base": "examples/1. General/SomeSketchIno",
|
||||||
"files": ["SomeSketchIno.ino"],
|
"files": ["SomeSketchIno.ino"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "SomeSketchPde",
|
"name": "1_General/SomeSketchPde",
|
||||||
"base": "examples/SomeSketchPde",
|
"base": "examples/1. General/SomeSketchPde",
|
||||||
"files": ["SomeSketchPde.pde"],
|
"files": ["SomeSketchPde.pde"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -509,6 +514,11 @@ def test_examples_from_dir(tmpdir_factory):
|
|||||||
"extra.py",
|
"extra.py",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Examples",
|
||||||
|
"base": "examples",
|
||||||
|
"files": ["root.c", "root.h"],
|
||||||
|
},
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user