function getLoadableFixture() {
            var data = {},
                model,
                vm,
                pathData,
                nodesByDepth = [
                    [
                        "/foo/subdir1/",
                        "/foo/subdir3/"
                    ],
                    [
                        "/foo/subdir1/subsubdir/"
                    ]
                ];

            model = new ProjectModel.ProjectModel();
            vm = model._viewModel;
            model.projectRoot = {
                fullPath: "/foo/",
                getContents: function (callback) {
                    return callback(null, [
                        {
                            name: "subdir1",
                            isFile: false
                        },
                        {
                            name: "subdir2",
                            isFile: false
                        },
                        {
                            name: "subdir3",
                            isFile: false
                        },
                        {
                            name: "subdir4",
                            isFile: false
                        }
                    ]);
                }
            };

            pathData = {
                "/foo/subdir1/": [
                    {
                        name: "subsubdir",
                        isFile: false
                    }
                ],
                "/foo/subdir1/subsubdir/": [
                    {
                        name: "interior.txt",
                        isFile: true
                    }
                ],
                "/foo/subdir3/": [
                    {
                        name: "higher.txt",
                        isFile: true
                    }
                ],
                "/foo/subdir4/": [
                    {
                        name: "afile.md",
                        isFile: true
                    },
                    {
                        name: "css",
                        isFile: false
                    },
                    {
                        name: "js",
                        isFile: false
                    },
                    {
                        name: "tmpl",
                        isFile: false
                    }
                ],
                "/foo/subdir4/css/": [
                    {
                        name: "styles.css",
                        isFile: true
                    }
                ],
                "/foo/subdir4/js/": [
                    {
                        name: "code.js",
                        isFile: false
                    }
                ],
                "/foo/subdir4/tmpl/": [
                    {
                        name: "index.hbs",
                        isFile: false
                    }
                ]
            };

            vm._treeData = Immutable.fromJS({
                subdir1: {
                    children: null
                },
                subdir2: {
                    children: null
                },
                subdir3: {
                    children: null
                },
                subdir4: {
                    children: null
                },
                "toplevel.txt": {
                    isFile: true
                }
            });

            data.changesFired = 0;
            model.on(ProjectModel.EVENT_CHANGE, function () {
                data.changesFired++;
            });

            model.on(ProjectModel.EVENT_SHOULD_SELECT, function (e, eventData) {
                data.shouldSelectEvents.push(eventData);
            });

            data.gdcCalls = 0;
            spyOn(model, "_getDirectoryContents").andCallFake(function (path) {
                data.gdcCalls++;
                expect(pathData[path]).toBeDefined();
                return new $.Deferred().resolve(pathData[path]).promise();
            });

            data.model = model;
            data.vm = vm;
            data.shouldSelectEvents = [];
            data.pathData = pathData;
            data.nodesByDepth = nodesByDepth;

            return data;
        }
Creates a text fixture with some event trackers that has data that simulates being
loaded.