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