Skip to content

Commit

Permalink
Fix hasteImpl path checks on Windows machines
Browse files Browse the repository at this point in the history
Summary:
@public

This fixes facebook/metro#181

Reviewed By: mjesun

Differential Revision: D8880071

fbshipit-source-id: 27e232baa7f39a938af86de810ff5357f777e858
  • Loading branch information
rafeca authored and facebook-github-bot committed Jul 17, 2018
1 parent 679bff2 commit 3ac86c3
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 4 deletions.
93 changes: 93 additions & 0 deletions jest/__tests__/hasteImpl-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/**
* Copyright (c) 2014-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @emails oncall+js_foundation
*/

'use strict';

const path = require('path');

const {getHasteName} = require('../hasteImpl');

function getPath(...parts) {
return path.join(__dirname, '..', '..', ...parts);
}

it('returns the correct haste name for a RN library file', () => {
expect(
getHasteName(
getPath(
'Libraries',
'Components',
'AccessibilityInfo',
'AccessibilityInfo.js',
),
),
).toEqual('AccessibilityInfo');
});

it('returns the correct haste name for a file with a platform suffix', () => {
for (const platform of ['android', 'ios', 'native', 'web', 'windows']) {
expect(
getHasteName(
getPath(
'Libraries',
'Components',
'AccessibilityInfo',
`AccessibilityInfo.${platform}.js`,
),
),
).toEqual('AccessibilityInfo');
}
});

it('returns the correct haste name for a file with a flow suffix', () => {
expect(
getHasteName(
getPath(
'Libraries',
'Components',
'AccessibilityInfo',
'AccessibilityInfo.ios.js.flow',
),
),
).toEqual('AccessibilityInfo');
});

it('does not calculate the haste name for a file that is not JS', () => {
expect(
getHasteName(
getPath(
'Libraries',
'Components',
'AccessibilityInfo',
'AccessibilityInfo.txt',
),
),
).toBe(undefined);
});

it('does not calculate the haste name for a file outside of RN', () => {
expect(
getHasteName(getPath('..', 'Libraries', 'AccessibilityInfo.txt')),
).toBe(undefined);
});

it('does not calculate the haste name for a blacklisted file', () => {
expect(
getHasteName(
getPath(
'Libraries',
'Components',
'__mocks__',
'AccessibilityInfo',
'AccessibilityInfo.js',
),
),
).toBe(undefined);
});
8 changes: 4 additions & 4 deletions jest/hasteImpl.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ const ROOTS = [
];

const BLACKLISTED_PATTERNS /*: Array<RegExp> */ = [
/.*\/__(mocks|tests)__\/.*/,
/^Libraries\/Animated\/src\/polyfills\/.*/,
/^Libraries\/Renderer\/fb\/.*/,
/.*[\\\/]__(mocks|tests)__[\\\/].*/,
/^Libraries[\\\/]Animated[\\\/]src[\\\/]polyfills[\\\/].*/,
/^Libraries[\\\/]Renderer[\\\/]fb[\\\/].*/,
];

const WHITELISTED_PREFIXES /*: Array<string> */ = [
Expand All @@ -32,7 +32,7 @@ const WHITELISTED_PREFIXES /*: Array<string> */ = [

const NAME_REDUCERS /*: Array<[RegExp, string]> */ = [
// extract basename
[/^(?:.*\/)?([a-zA-Z0-9$_.-]+)$/, '$1'],
[/^(?:.*[\\\/])?([a-zA-Z0-9$_.-]+)$/, '$1'],
// strip .js/.js.flow suffix
[/^(.*)\.js(\.flow)?$/, '$1'],
// strip .android/.ios/.native/.web suffix
Expand Down

0 comments on commit 3ac86c3

Please sign in to comment.