diff --git a/eng/tools/typespec-validation/src/rules/folder-structure.ts b/eng/tools/typespec-validation/src/rules/folder-structure.ts index 47ec3ed5fa99..da18b9e626c3 100644 --- a/eng/tools/typespec-validation/src/rules/folder-structure.ts +++ b/eng/tools/typespec-validation/src/rules/folder-structure.ts @@ -31,8 +31,8 @@ export class FolderStructureRule implements Rule { } }); - // Verify top level folder is lower case - let folderStruct = relativePath.split("/"); + // Verify top level folder is lower case and remove empty entries when splitting by slash + let folderStruct = relativePath.split("/").filter(Boolean); if (folderStruct[1].match(/[A-Z]/g)) { success = false; errorOutput += `Invalid folder name. Folders under specification/ must be lower case.\n`; diff --git a/eng/tools/typespec-validation/test/folder-structure.test.ts b/eng/tools/typespec-validation/test/folder-structure.test.ts index 7914803ab378..e9c430db0d28 100644 --- a/eng/tools/typespec-validation/test/folder-structure.test.ts +++ b/eng/tools/typespec-validation/test/folder-structure.test.ts @@ -28,6 +28,22 @@ describe("folder-structure", function () { assert(result.errorOutput.includes("must be lower case")); }); + it("should succeed if package folder has trailing slash", async function () { + let host = new TsvTestHost(); + host.globby = async () => { + return ["/foo/bar/tspconfig.yaml"]; + }; + host.normalizePath = () => { + return "/gitroot"; + }; + + const result = await new FolderStructureRule().execute( + host, + "/gitroot/specification/foo/Foo/Foo/", + ); + assert(result.success); + }); + it("should fail if package folder is more than 3 levels deep", async function () { let host = new TsvTestHost(); host.globby = async () => {