1#!/usr/bin/env node 2 3const fs = require('fs'); 4const path = require('path'); 5 6function capitalize(string) { 7 return string.charAt(0).toUpperCase() + string.slice(1); 8} 9 10function convertToUpperCamelCase(string) { 11 return string 12 .split('-') 13 .map(word => capitalize(word)) 14 .join(''); 15} 16 17function regexFile(regex, replace, filePath) { 18 const file = fs.readFileSync(filePath, 'utf8'); 19 fs.writeFileSync(filePath, file.replace(regex, replace)); 20} 21 22const testFixturesDir = path.join(__dirname, '../TestFixtures'); 23const testFiles = fs.readdirSync(testFixturesDir); 24 25const tests = {}; 26for (const fileName of testFiles) { 27 const name = convertToUpperCamelCase(fileName.split('.')[0]); 28 const jsonString = fs.readFileSync(path.join(testFixturesDir, fileName), 'utf8'); 29 const json = JSON.parse(jsonString); 30 tests[name] = json; 31} 32 33// EXStructuredHeadersTestFixtures.h 34const generatedConstantHeaders = `// GENERATED CONSTANTS BEGIN 35 36${Object.keys(tests) 37 .map(name => `FOUNDATION_EXPORT NSString * const EXStructuredHeaders${name}Tests;`) 38 .join('\n')} 39 40// GENERATED CONSTANTS END`; 41regexFile( 42 /\/\/ GENERATED CONSTANTS BEGIN\n[\s\S]*\n\/\/ GENERATED CONSTANTS END/, 43 generatedConstantHeaders, 44 path.join(__dirname, '../EXStructuredHeadersTestFixtures.h') 45); 46 47// EXStructuredHeadersTestFixtures.m 48const generatedConstantsImpl = `// GENERATED CONSTANTS BEGIN 49 50${Object.entries(tests) 51 .map( 52 ([name, json]) => 53 `NSString * const EXStructuredHeaders${name}Tests = @${JSON.stringify(JSON.stringify(json))};` 54 ) 55 .join('\n\n')} 56 57// GENERATED CONSTANTS END`; 58regexFile( 59 /\/\/ GENERATED CONSTANTS BEGIN\n[\s\S]*\n\/\/ GENERATED CONSTANTS END/, 60 generatedConstantsImpl, 61 path.join(__dirname, '../EXStructuredHeadersTestFixtures.m') 62); 63 64// EXStructuredHeadersParserTests.m' 65const generatedXCTests = `// GENERATED TESTS BEGIN 66 67${Object.keys(tests) 68 .map( 69 name => `- (void)test${name} 70{ 71 [self runTests:EXStructuredHeaders${name}Tests]; 72}` 73 ) 74 .join('\n\n')} 75 76@end`; 77regexFile( 78 /\/\/ GENERATED TESTS BEGIN\n[\s\S]*\n@end/, 79 generatedXCTests, 80 path.join(__dirname, '../EXStructuredHeadersParserTests.m') 81); 82