[
    {
        "title": "empty module",
        "input": {
            "fileName": "test/extractor-fixtures/cjs/empty.js"
        },
        "expected": [
            {
                "source": "test/extractor-fixtures/cjs/empty.js",
                "dependencies": []
            }
        ]
    },
    {
        "title": "root_one unfiltered",
        "input": {
            "fileName": "test/extractor-fixtures/cjs/root_two.js"
        },
        "expected": [{
            "source": "test/extractor-fixtures/cjs/root_two.js",
            "dependencies": [
                {
                    "module": "./shared",
                    "resolved": "test/extractor-fixtures/cjs/shared.js",
                    "moduleSystem": "cjs",
                    "coreModule": false,
                    "followable": true,
                    "valid": true
                },
                {
                    "module": "./somedata.json",
                    "resolved": "test/extractor-fixtures/cjs/somedata.json",
                    "moduleSystem": "cjs",
                    "coreModule": false,
                    "followable": false,
                    "valid": true
                },
                {
                    "module": "./two_only_one",
                    "resolved": "test/extractor-fixtures/cjs/two_only_one.js",
                    "moduleSystem": "cjs",
                    "coreModule": false,
                    "followable": true,
                    "valid": true
                },
                {
                    "module": "http",
                    "resolved": "http",
                    "moduleSystem": "cjs",
                    "coreModule": true,
                    "followable": false,
                    "valid": true
                }
            ]
        },
        {
            "source": "test/extractor-fixtures/cjs/shared.js",
            "dependencies": [
                {
                    "module": "path",
                    "resolved": "path",
                    "moduleSystem": "cjs",
                    "coreModule": true,
                    "followable": false,
                    "valid": true
                }
            ]
        },
        {
            "source": "test/extractor-fixtures/cjs/two_only_one.js",
            "dependencies": [
                {
                    "module": "./sub/dir",
                    "resolved": "test/extractor-fixtures/cjs/sub/dir.js",
                    "moduleSystem": "cjs",
                    "coreModule": false,
                    "followable": true,
                    "valid": true
                }
            ]
        },
        {
            "source": "test/extractor-fixtures/cjs/sub/dir.js",
            "dependencies": [
                {
                    "module": "./depindir",
                    "resolved": "test/extractor-fixtures/cjs/sub/depindir.js",
                    "moduleSystem": "cjs",
                    "coreModule": false,
                    "followable": true,
                    "valid": true
                },
                {
                    "module": "path",
                    "resolved": "path",
                    "moduleSystem": "cjs",
                    "coreModule": true,
                    "followable": false,
                    "valid": true
                }
            ]
        },
        {
            "source": "test/extractor-fixtures/cjs/sub/depindir.js",
            "dependencies": [
                {
                    "module": "path",
                    "resolved": "path",
                    "moduleSystem": "cjs",
                    "coreModule": true,
                    "followable": false,
                    "valid": true
                }
            ]
        }]
    },
    {
        "title": "root_one node_modules filtered out",
        "input": {
            "fileName": "test/extractor-fixtures/cjs/root_one.js",
            "options": {
                "exclude": "node_modules"
            }
        },
        "expected": [
            {
                "source": "test/extractor-fixtures/cjs/root_one.js",
                "dependencies": [
                    {
                        "module": "./one_only_one",
                        "resolved": "test/extractor-fixtures/cjs/one_only_one.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    },
                    {
                        "module": "./one_only_two",
                        "resolved": "test/extractor-fixtures/cjs/one_only_two.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    },
                    {
                        "module": "./shared",
                        "resolved": "test/extractor-fixtures/cjs/shared.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    },
                    {
                        "module": "./sub/dir",
                        "resolved": "test/extractor-fixtures/cjs/sub/dir.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    },
                    {
                        "module": "fs",
                        "resolved": "fs",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/one_only_one.js",
                "dependencies": [
                    {
                        "module": "path",
                        "resolved": "path",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/one_only_two.js",
                "dependencies": [
                    {
                        "module": "path",
                        "resolved": "path",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/shared.js",
                "dependencies": [
                    {
                        "module": "path",
                        "resolved": "path",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/sub/dir.js",
                "dependencies": [
                    {
                        "module": "./depindir",
                        "resolved": "test/extractor-fixtures/cjs/sub/depindir.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    },
                    {
                        "module": "path",
                        "resolved": "path",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/sub/depindir.js",
                "dependencies": [
                    {
                        "module": "path",
                        "resolved": "path",
                        "moduleSystem": "cjs",
                        "coreModule": true,
                        "followable": false,
                    "valid": true
                    }
                ]
            }
        ]
    },
    {
        "title": "circular dependency (one step)",
        "input": {
            "fileName": "test/extractor-fixtures/cjs/circular.js"
        },
        "expected": [
            {
                "source": "test/extractor-fixtures/cjs/circular.js",
                "dependencies": [
                    {
                        "module": "./ralucric",
                        "resolved": "test/extractor-fixtures/cjs/ralucric.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/ralucric.js",
                "dependencies": [
                    {
                        "module": "./circular",
                        "resolved": "test/extractor-fixtures/cjs/circular.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    }
                ]
            }
        ]
    },
    {
        "title": "circular dependency (more steps)",
        "input": {
            "fileName": "test/extractor-fixtures/cjs/circle-one.js"
        },
        "expected": [
            {
                "source": "test/extractor-fixtures/cjs/circle-one.js",
                "dependencies": [
                    {
                        "module": "./circle-two",
                        "resolved": "test/extractor-fixtures/cjs/circle-two.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/circle-two.js",
                "dependencies": [
                    {
                        "module": "./circle-three",
                        "resolved": "test/extractor-fixtures/cjs/circle-three.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    }
                ]
            },
            {
                "source": "test/extractor-fixtures/cjs/circle-three.js",
                "dependencies": [
                    {
                        "module": "./circle-one",
                        "resolved": "test/extractor-fixtures/cjs/circle-one.js",
                        "moduleSystem": "cjs",
                        "coreModule": false,
                        "followable": true,
                    "valid": true
                    }
                ]
            }
        ]
    }
]
