newtests/ls_command/test.js (299 lines of code) (raw):

/* * @flow */ import type {Suite} from "flow-dev-tools/src/test/Suite"; const {suite, test} = require('flow-dev-tools/src/test/Tester'); const files = [ 'other/explicitly_included.js', 'src/implicitly_included.js', 'src/explicitly_ignored.js', 'other/implicitly_ignored.js', 'src/explicit_lib.js', 'src/flow-typed/implicit_lib.js', ]; module.exports = (suite(({addFile, flowCmd, removeFile}) => [ test('No --all flag and implicit root', [ flowCmd(['ls']) .stderr( ` Could not find a .flowconfig in . or any of its parent directories. See "flow init --help" for more info `, ) .sortedStdout('') .because("Assumes current directory is root, and there's no .flowconfig"), flowCmd(['ls', '--strip-root', 'src']) .stderr('') .sortedStdout( ` .flowconfig explicit_lib.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('Infers root and only shows included files in src directory'), flowCmd(['ls', '--strip-root', 'src', 'other']) .stderr('') .sortedStdout( ` ../other/explicitly_included.js .flowconfig explicit_lib.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('Infers root and will show included files in both directories'), flowCmd(['ls', '--strip-root', 'other', 'src']) .stderr( ` Could not find a .flowconfig in other or any of its parent directories. See "flow init --help" for more info `, ) .sortedStdout('') .because('Infers root from first arg, which is not a flow root'), flowCmd(['ls', '--strip-root', 'src/doesNotExist.js']) .sortedStdout('') .sortedStdout('') .because("Won't show files that don't exist") ]), test('Explicit root will not filter out files in other/',[ flowCmd([ 'ls', '--strip-root', '--root', 'src', ]) .stderr('') .sortedStdout( ` ../other/explicitly_included.js .flowconfig explicit_lib.js flow-typed/implicit_lib.js implicitly_included.js `, ), ]), test('--all should all libs, included files, and explicitly ignored files', [ flowCmd([ 'ls', '--strip-root', '--all', '--root', 'src', ]) .stderr('') .sortedStdout( ` ../other/explicitly_included.js .flowconfig explicit_lib.js explicitly_ignored.js flow-typed/implicit_lib.js implicitly_included.js `, ), ]), test('Implicit/Explicit Included/Ignored/Lib should be correct', [ flowCmd([ 'ls', '--strip-root', '--root', 'src', '--all', '--explain', ].concat(files)) // Explicitly list out files .stderr('') .sortedStdout( ` ExplicitLib explicit_lib.js ExplicitlyIgnored explicitly_ignored.js ExplicitlyIncluded ../other/explicitly_included.js ImplicitLib flow-typed/implicit_lib.js ImplicitlyIgnored ../other/implicitly_ignored.js ImplicitlyIncluded implicitly_included.js `, ), ]), test('JSON output without --explain should be an array', [ flowCmd([ 'ls', '--json', '--strip-root', '--root', 'src', '--all', ].concat(files).concat(['src/.flowconfig'])) .stderr('') .stdout( ` [ "../other/explicitly_included.js", "../other/implicitly_ignored.js", ".flowconfig", "explicit_lib.js", "explicitly_ignored.js", "flow-typed/implicit_lib.js", "implicitly_included.js" ] `, ), ]), test('JSON output with --explain should be JSON object',[ flowCmd([ 'ls', '--json', '--strip-root', '--root', 'src', '--all', '--explain' ].concat(files).concat(['src/.flowconfig'])) .stderr('') .stdout( ` { "../other/explicitly_included.js": { "explanation": "ExplicitlyIncluded" }, "../other/implicitly_ignored.js": { "explanation": "ImplicitlyIgnored" }, ".flowconfig": { "explanation": "ConfigFile" }, "explicit_lib.js": { "explanation": "ExplicitLib" }, "explicitly_ignored.js": { "explanation": "ExplicitlyIgnored" }, "flow-typed/implicit_lib.js": { "explanation": "ImplicitLib" }, "implicitly_included.js": { "explanation": "ImplicitlyIncluded" } } `, ), ]), test('Listing files over stdin', [ addFile('stdin_file.txt'), flowCmd(['ls', '--strip-root', '--root', 'src', '--all', '--input-file', '-'], 'stdin_file.txt') .stderr('') .sortedStdout( ` ../other/explicitly_included.js .flowconfig explicit_lib.js explicitly_ignored.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('Same as if we passed src/ and other/explicitly_include.js from the command line'), flowCmd(['ls', '--strip-root', '--root', 'src', '--all', '--input-file', '-', 'other/implicitly_ignored.js'], 'stdin_file.txt') .stderr('') .sortedStdout( ` ../other/explicitly_included.js ../other/implicitly_ignored.js .flowconfig explicit_lib.js explicitly_ignored.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('flow ls will combine command line with the input file'), ]), test('Input file on disk', [ addFile('stdin_file.txt'), flowCmd(['ls', '--strip-root', '--root', 'src', '--all', '--input-file', 'stdin_file.txt']) .stderr('') .sortedStdout( ` ../other/explicitly_included.js .flowconfig explicit_lib.js explicitly_ignored.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('Same as if we passed src/ and other/explicitly_include.js from the command line'), flowCmd(['ls', '--strip-root', '--root', 'src', '--all', '--input-file', 'stdin_file.txt', 'other/implicitly_ignored.js']) .stderr('') .sortedStdout( ` ../other/explicitly_included.js ../other/implicitly_ignored.js .flowconfig explicit_lib.js explicitly_ignored.js flow-typed/implicit_lib.js implicitly_included.js `, ) .because('flow ls will combine command line with the input file'), ]), test('Non-existent files and directories', [ flowCmd(['ls', '--strip-root', 'src/foobar']) .stderr( ` Could not find file or directory src/foobar; canceling search for .flowconfig. See "flow init --help" for more info `, ) .because('We try to use foobar to infer the root, so we complain when it doesnt exist'), flowCmd(['ls', '--strip-root', '--root', 'src', 'src/foobar', 'src/implicitly_included.js']) .stderr(``) .stdout( ` implicitly_included.js `, ) .because('We just filter out non-existent files'), flowCmd(['ls', '--strip-root', '--imaginary', '--root', 'src', 'src/foobar', 'src/implicitly_included.js', 'src/flow-typed/baz.js']) .stderr(``) .stdout( ` foobar implicitly_included.js flow-typed/baz.js `, ) .because('With --imaginary we include non-existent files. Non-existent files are never considered to be libs.'), flowCmd(['ls', '--strip-root', '--explain', '--imaginary', '--root', 'src', 'src/foobar', 'src/baz', 'src/implicitly_included.js', 'src/flow-typed/baz']) .stderr(``) .stdout( ` ImplicitlyIncluded foobar ImplicitlyIncluded baz ImplicitlyIncluded implicitly_included.js ImplicitlyIncluded flow-typed/baz `, ) .because('--explain should work with --imaginary as expected. Non-existent files are never considered to be libs.'), flowCmd(['ls', '--all', '--strip-root', '--root', 'src', 'src/foobar', 'src/implicitly_included.js']) .stderr(``) .stdout( ` implicitly_included.js `, ) .because('We just filter out non-existent files. --all does not imply --imaginary'), flowCmd(['ls', '--all', '--imaginary', '--strip-root', '--explain', '--root', 'src', 'foobar', 'src/foobar', 'src/implicitly_included.js']) .stderr(``) .stdout( ` ImplicitlyIgnored ../foobar ImplicitlyIncluded foobar ImplicitlyIncluded implicitly_included.js `, ) .because('../foobar is implicitly ignored and only listed with the --all flag'), ]), ]).beforeEach(({addFile, addFiles, removeFile}) => [ addFile('src/_flowconfig', 'src/.flowconfig') .addFiles(...files) .removeFile('.flowconfig') ]): Suite);