1const babel = require('@babel/core'); 2const fs = require('fs'); 3const path = require('path'); 4 5const plugin = require('../../babel'); 6 7const options = { 8 babelrc: false, 9 presets: [ 10 [ 11 require.resolve('metro-react-native-babel-preset'), 12 { 13 useTransformReactJSXExperimental: false, 14 disableImportExportTransform: true, 15 }, 16 ], 17 ], 18 minified: false, 19 plugins: [plugin], 20 compact: false, 21 22 filename: 'unknown', 23 // Snapshot sanity 24 retainLines: true, 25 cwd: __dirname, 26 babelrcRoots: false, 27}; 28 29it(`Doesn't support unknowns`, () => { 30 const sourceCode = ` 31function App() { 32 return <foobar href="#">Link</foobar>; 33}`; 34 const { code } = babel.transform(sourceCode, options); 35 expect(code).toMatchSnapshot(); 36 expect(code).not.toMatch(`@expo/html-elements`); 37}); 38 39it(`Converts basic link`, () => { 40 const sourceCode = ` 41function App() { 42 return <a href="#">Link</a>; 43}`; 44 const { code } = babel.transform(sourceCode, options); 45 expect(code).toMatchSnapshot(); 46 expect(code).toMatch(`import { A } from "@expo/html-elements";`); 47}); 48 49it(`Skips injecting the import if one is already present`, () => { 50 const sourceCode = ` 51import '@expo/html-elements'; 52function App() { 53 return <a href="#">Link</a>; 54}`; 55 const { code } = babel.transform(sourceCode, options); 56 expect(code).toMatchSnapshot(); 57}); 58 59it(`Converts fixture`, () => { 60 const sourceCode = fs.readFileSync(path.join(__dirname, 'fixtures/one.js'), 'utf8'); 61 const { code } = babel.transform(sourceCode, options); 62 expect(code).toMatchSnapshot(); 63}); 64