mirror of
				https://github.com/theoludwig/markdownlint-rule-relative-links.git
				synced 2025-09-09 19:39:29 +02:00 
			
		
		
		
	test: add cases for fragments checking
This commit is contained in:
		| Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 95 B | 
							
								
								
									
										3
									
								
								test/fixtures/invalid/empty-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/empty-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <div id>Content</div> | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/empty-id-fragment/empty-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/empty-id-fragment/empty-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#) | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/ignore-empty-fragment-checking-for-image.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/ignore-empty-fragment-checking-for-image.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
|  | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/ignore-fragment-checking-for-image.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/ignore-fragment-checking-for-image.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
|  | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/ignore-name-fragment-if-not-an-anchor/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/ignore-name-fragment-if-not-an-anchor/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <input name="name-should-be-ignored" id="id-after-name" /> | ||||
| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Invalid](./awesome.md#name-should-be-ignored) | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/ignore-not-an-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/ignore-not-an-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <div data-id="not-an-id-should-be-ignored">Content</div> | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/ignore-not-an-id-fragment/ignore-not-an-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/ignore-not-an-id-fragment/ignore-not-an-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Invalid](./awesome.md#not-an-id-should-be-ignored) | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/non-existing-anchor-name-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/non-existing-anchor-name-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <a name="existing-heading-anchor">Link</a> | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/non-existing-anchor-name-fragment/non-existing-anchor-name-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/non-existing-anchor-name-fragment/non-existing-anchor-name-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#non-existing-anchor-name-fragment) | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/non-existing-element-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/non-existing-element-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <div id="existing-element-id-fragment">Content</div> | ||||
							
								
								
									
										3
									
								
								test/fixtures/invalid/non-existing-element-id-fragment/non-existing-element-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/invalid/non-existing-element-id-fragment/non-existing-element-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#non-existing-element-id-fragment) | ||||
| @@ -1,5 +1,3 @@ | ||||
| # Valid | ||||
|  | ||||
| <a name="existing-heading-anchor" ></a> | ||||
| # Awesome | ||||
|  | ||||
| ## Existing Heading | ||||
|   | ||||
| @@ -1,5 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#non-existing-heading) | ||||
|  | ||||
| [Link fragment](./awesome.md#non-existing-heading-anchor) | ||||
|   | ||||
							
								
								
									
										3
									
								
								test/fixtures/valid/existing-anchor-name-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/valid/existing-anchor-name-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <a name="existing-heading-anchor">Link</a> | ||||
							
								
								
									
										3
									
								
								test/fixtures/valid/existing-anchor-name-fragment/existing-anchor-name-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/valid/existing-anchor-name-fragment/existing-anchor-name-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#existing-heading-anchor) | ||||
							
								
								
									
										3
									
								
								test/fixtures/valid/existing-element-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/valid/existing-element-id-fragment/awesome.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Awesome | ||||
|  | ||||
| <div id="existing-element-id-fragment">Content</div> | ||||
							
								
								
									
										3
									
								
								test/fixtures/valid/existing-element-id-fragment/existing-element-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/valid/existing-element-id-fragment/existing-element-id-fragment.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Invalid | ||||
|  | ||||
| [Link fragment](./awesome.md#existing-element-id-fragment) | ||||
| @@ -1,7 +1,5 @@ | ||||
| # Valid | ||||
|  | ||||
| <a name="existing-heading-anchor" ></a> | ||||
|  | ||||
| ## Existing Heading | ||||
|  | ||||
| ### Repeated Heading | ||||
|   | ||||
| @@ -2,8 +2,6 @@ | ||||
|  | ||||
| [Link fragment](./awesome.md#existing-heading) | ||||
|  | ||||
| [Link fragment](./awesome.md#existing-heading-anchor) | ||||
|  | ||||
| [Link fragment Repeated 0](./awesome.md#repeated-heading) | ||||
|  | ||||
| [Link fragment Repeated 1](./awesome.md#repeated-heading-1) | ||||
|   | ||||
							
								
								
									
										2
									
								
								test/fixtures/valid/existing-image.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/valid/existing-image.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,3 @@ | ||||
| # Valid | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										5
									
								
								test/fixtures/valid/ignore-fragment-checking-in-own-file.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								test/fixtures/valid/ignore-fragment-checking-in-own-file.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # Valid | ||||
|  | ||||
| <div id="existing-element-id-fragment">Content</div> | ||||
|  | ||||
| [Link fragment](#non-existing-element-id-fragment) | ||||
| @@ -23,96 +23,134 @@ const validateMarkdownLint = async (fixtureFile) => { | ||||
| } | ||||
|  | ||||
| test("ensure the rule validates correctly", async (t) => { | ||||
|   await t.test("should be valid", async (t) => { | ||||
|     await t.test("with an existing heading fragment", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/valid/existing-heading-fragment/existing-heading-fragment.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 0) | ||||
|     }) | ||||
|  | ||||
|     await t.test("with an existing file", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/valid/existing-file.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 0) | ||||
|     }) | ||||
|  | ||||
|     await t.test("with an existing image", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/valid/existing-image.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 0) | ||||
|     }) | ||||
|  | ||||
|     await t.test("should ignore absolute paths", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/valid/ignore-absolute-paths.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 0) | ||||
|     }) | ||||
|  | ||||
|     await t.test("should ignore external links", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/valid/ignore-external-links.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 0) | ||||
|     }) | ||||
|   }) | ||||
|  | ||||
|   await t.test("should be invalid", async (t) => { | ||||
|     await t.test("with a non-existing heading fragment", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/invalid/non-existing-heading-fragment/non-existing-heading-fragment.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 2) | ||||
|       for (let i = 0; i < 2; i++) { | ||||
|         assert.deepEqual(lintResults?.[i]?.ruleNames, relativeLinksRule.names) | ||||
|     const testCases = [ | ||||
|       { | ||||
|         name: "with an empty id fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/empty-id-fragment/empty-id-fragment.md", | ||||
|         error: '"./awesome.md#" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a name fragment other than for an anchor", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/ignore-name-fragment-if-not-an-anchor/ignore-name-fragment-if-not-an-anchor.md", | ||||
|         error: | ||||
|           '"./awesome.md#name-should-be-ignored" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing id fragment (data-id !== id)", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/ignore-not-an-id-fragment/ignore-not-an-id-fragment.md", | ||||
|         error: | ||||
|           '"./awesome.md#not-an-id-should-be-ignored" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing anchor name fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/non-existing-anchor-name-fragment/non-existing-anchor-name-fragment.md", | ||||
|         error: | ||||
|           '"./awesome.md#non-existing-anchor-name-fragment" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing element id fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/non-existing-element-id-fragment/non-existing-element-id-fragment.md", | ||||
|         error: | ||||
|           '"./awesome.md#non-existing-element-id-fragment" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing heading fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/non-existing-heading-fragment/non-existing-heading-fragment.md", | ||||
|         error: | ||||
|           '"./awesome.md#non-existing-heading" should have a valid fragment identifier', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a link to an image with a empty fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/ignore-empty-fragment-checking-for-image.md", | ||||
|         error: | ||||
|           '"../image.png#" should not have a fragment identifier as it is an image', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a link to an image with a fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/invalid/ignore-fragment-checking-for-image.md", | ||||
|         error: | ||||
|           '"../image.png#non-existing-fragment" should not have a fragment identifier as it is an image', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing file", | ||||
|         fixturePath: "test/fixtures/invalid/non-existing-file.md", | ||||
|         error: '"./index.test.js" should exist in the file system', | ||||
|       }, | ||||
|       { | ||||
|         name: "with a non-existing image", | ||||
|         fixturePath: "test/fixtures/invalid/non-existing-image.md", | ||||
|         error: '"./image.png" should exist in the file system', | ||||
|       }, | ||||
|     ] | ||||
|  | ||||
|     for (const { name, fixturePath, error } of testCases) { | ||||
|       await t.test(name, async () => { | ||||
|         const lintResults = await validateMarkdownLint(fixturePath) | ||||
|         assert.equal(lintResults?.length, 1) | ||||
|         assert.deepEqual(lintResults?.[0]?.ruleNames, relativeLinksRule.names) | ||||
|         assert.equal( | ||||
|           lintResults?.[i]?.ruleDescription, | ||||
|           lintResults?.[0]?.ruleDescription, | ||||
|           relativeLinksRule.description, | ||||
|         ) | ||||
|       } | ||||
|       assert.equal( | ||||
|         lintResults?.[0]?.errorDetail, | ||||
|         '"./awesome.md#non-existing-heading" should have a valid fragment identifier', | ||||
|       ) | ||||
|       assert.equal( | ||||
|         lintResults?.[1]?.errorDetail, | ||||
|         '"./awesome.md#non-existing-heading-anchor" should have a valid fragment identifier', | ||||
|       ) | ||||
|     }) | ||||
|         assert.equal(lintResults?.[0]?.errorDetail, error) | ||||
|       }) | ||||
|     } | ||||
|   }) | ||||
|  | ||||
|     await t.test("with a non-existing file", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/invalid/non-existing-file.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 1) | ||||
|       assert.deepEqual(lintResults?.[0]?.ruleNames, relativeLinksRule.names) | ||||
|       assert.equal( | ||||
|         lintResults?.[0]?.ruleDescription, | ||||
|         relativeLinksRule.description, | ||||
|       ) | ||||
|       assert.equal( | ||||
|         lintResults?.[0]?.errorDetail, | ||||
|         '"./index.test.js" should exist in the file system', | ||||
|       ) | ||||
|     }) | ||||
|   await t.test("should be valid", async (t) => { | ||||
|     const testCases = [ | ||||
|       { | ||||
|         name: "with an existing anchor name fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/valid/existing-anchor-name-fragment/existing-anchor-name-fragment.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "with an existing element id fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/valid/existing-element-id-fragment/existing-element-id-fragment.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "with an existing heading fragment", | ||||
|         fixturePath: | ||||
|           "test/fixtures/valid/existing-heading-fragment/existing-heading-fragment.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "with an existing file", | ||||
|         fixturePath: "test/fixtures/valid/existing-file.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "with an existing image", | ||||
|         fixturePath: "test/fixtures/valid/existing-image.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "should ignore absolute paths", | ||||
|         fixturePath: "test/fixtures/valid/ignore-absolute-paths.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "should ignore external links", | ||||
|         fixturePath: "test/fixtures/valid/ignore-external-links.md", | ||||
|       }, | ||||
|       { | ||||
|         name: "should ignore checking fragment in own file", | ||||
|         fixturePath: | ||||
|           "test/fixtures/valid/ignore-fragment-checking-in-own-file.md", | ||||
|       }, | ||||
|     ] | ||||
|  | ||||
|     await t.test("with a non-existing image", async () => { | ||||
|       const lintResults = await validateMarkdownLint( | ||||
|         "test/fixtures/invalid/non-existing-image.md", | ||||
|       ) | ||||
|       assert.equal(lintResults?.length, 1) | ||||
|       assert.deepEqual(lintResults?.[0]?.ruleNames, relativeLinksRule.names) | ||||
|       assert.equal( | ||||
|         lintResults?.[0]?.ruleDescription, | ||||
|         relativeLinksRule.description, | ||||
|       ) | ||||
|       assert.equal( | ||||
|         lintResults?.[0]?.errorDetail, | ||||
|         '"./image.png" should exist in the file system', | ||||
|       ) | ||||
|     }) | ||||
|     for (const { name, fixturePath } of testCases) { | ||||
|       await t.test(name, async () => { | ||||
|         const lintResults = await validateMarkdownLint(fixturePath) | ||||
|         assert.equal(lintResults?.length, 0) | ||||
|       }) | ||||
|     } | ||||
|   }) | ||||
| }) | ||||
|   | ||||
| @@ -38,14 +38,16 @@ test("utils", async (t) => { | ||||
|  | ||||
|   await t.test("getMarkdownAnchorHTMLFragments", async () => { | ||||
|     assert.deepStrictEqual( | ||||
|       getMarkdownAnchorHTMLFragments('<a name="anchorName" id="anchorId"></a>'), | ||||
|       getMarkdownAnchorHTMLFragments( | ||||
|         '<a name="anchorName" id="anchorId">Link</a>', | ||||
|       ), | ||||
|       ["#anchorId"], | ||||
|     ) | ||||
|     assert.deepStrictEqual( | ||||
|       getMarkdownAnchorHTMLFragments('<a name="anchorName"></a>'), | ||||
|       getMarkdownAnchorHTMLFragments('<a name="anchorName">Link</a>'), | ||||
|       ["#anchorName"], | ||||
|     ) | ||||
|     assert.deepStrictEqual(getMarkdownAnchorHTMLFragments("<a></a>"), []) | ||||
|     assert.deepStrictEqual(getMarkdownAnchorHTMLFragments("<a>Link</a>"), []) | ||||
|     assert.deepStrictEqual(getMarkdownAnchorHTMLFragments("<a>"), []) | ||||
|   }) | ||||
| }) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user