mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| 
								 | 
							
								import { getMarkdownContent, getJavaScriptContent } from '../docs/generate-transformations.ts';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('makefile script tests', () => {
							 | 
						||
| 
								 | 
							
								  // If these tests fail, refer to `./docs/README.md` "Content guidelines" for more information
							 | 
						||
| 
								 | 
							
								  // about editing and building the Transformations docs.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // This test isn't playing well, it passes locally, but continues to fail in Drone.
							 | 
						||
| 
								 | 
							
								  // TODO: Investigate why this test is failing in Drone ONLY.
							 | 
						||
| 
								 | 
							
								  it.skip('should execute without error and match the content written to index.md', () => {
							 | 
						||
| 
								 | 
							
								    // Normalize and compare.
							 | 
						||
| 
								 | 
							
								    expect(contentDoesMatch(getJavaScriptContent(), getMarkdownContent())).toBe(true);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should be able to tell if the content DOES NOT match', () => {
							 | 
						||
| 
								 | 
							
								    const wrongContent = getJavaScriptContent().concat('additional content to mismatch');
							 | 
						||
| 
								 | 
							
								    // Normalize and compare.
							 | 
						||
| 
								 | 
							
								    expect(contentDoesMatch(wrongContent, getMarkdownContent())).toBe(false);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function contentDoesMatch(jsContent: string, mdContent: string): Boolean {
							 | 
						||
| 
								 | 
							
								  return normalizeContent(jsContent) === normalizeContent(mdContent);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								  Normalize content by removing all whitespace (spaces, tabs, newlines, carriage returns,
							 | 
						||
| 
								 | 
							
								  form feeds, and vertical tabs) and special characters.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  NOTE: There are numerous unpredictable formatting oddities when transforming JavaScript to Markdown;
							 | 
						||
| 
								 | 
							
								  almost all of them are irrelevant to the actual content of the file, which is why we strip them out here.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  In JavaScript, the following string table
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  | A | B | C |
							 | 
						||
| 
								 | 
							
								  | - | - | - |
							 | 
						||
| 
								 | 
							
								  | 1 | 3 | 5 |
							 | 
						||
| 
								 | 
							
								  | 2 | 4 | 6 |
							 | 
						||
| 
								 | 
							
								  | 3 | 5 | 7 |
							 | 
						||
| 
								 | 
							
								  | 4 | 6 | 8 |
							 | 
						||
| 
								 | 
							
								  | 5 | 7 | 9 |
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  parses to Markdown as
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  | A   | B   | C   |
							 | 
						||
| 
								 | 
							
								  | --- | --- | --- | <--------- notice the extra hyphens
							 | 
						||
| 
								 | 
							
								  | 1   | 3   | 5   | <--------- notice the extra spaces
							 | 
						||
| 
								 | 
							
								  | 2   | 4   | 6   |
							 | 
						||
| 
								 | 
							
								  | 3   | 5   | 7   |
							 | 
						||
| 
								 | 
							
								  | 4   | 6   | 8   |
							 | 
						||
| 
								 | 
							
								  | 5   | 7   | 9   |
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  This is one of many arbitrary formatting anomalies that we can ignore by normalizing the
							 | 
						||
| 
								 | 
							
								  content before comparing the JavaScript template literals and the final Markdown.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								function normalizeContent(content: string): string {
							 | 
						||
| 
								 | 
							
								  return content.replace(/\s+|[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/g, '').trim();
							 | 
						||
| 
								 | 
							
								}
							 |