eff
Version:
An extensible effect monad based on the freer monad
72 lines (56 loc) • 8.39 kB
JavaScript
;
var _ava = _interopRequireDefault(require("ava"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _index = require("./index.js");
var _testUtils = require("./testUtils.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Note: These tests are used to ensure that the examples in the README always work
_ava.default.cb("Real file system", function (t) {
var a = "Hello, World! I'm reading!";
var b = a.toUpperCase();
(0, _testUtils.tempDirectory)(function (err, directory) {
t.is(null, err);
_fs.default.mkdir(_path.default.join(directory, "/home/me"), {
recursive: true
}, function (err) {
t.is(null, err);
_fs.default.writeFile(_path.default.join(directory, "/home/me", "./a.txt"), a, {}, function (err) {
t.is(null, err); // Below this line comes mostly from the README
var upperCase = function upperCase(str) {
return str.toUpperCase();
};
var application = _index.FileSystem.readFile("./a.txt").map(upperCase).chain(_index.FileSystem.writeFile("./b.txt"));
(0, _index.run)([_index.FileSystem.interpretLocalFileSystem(_path.default.join(directory, "/home/me"))])(function () {
_fs.default.readFile(_path.default.join(directory, "/home/me", "./b.txt"), "utf8", function (err, bFile) {
t.is(null, err);
t.is(bFile, b);
t.end();
});
})(application);
});
});
});
});
_ava.default.cb("Mock file system", function (t) {
var a = "hello, world";
var b = a.toUpperCase(); // Below this line comes mostly from the README
var upperCase = function upperCase(str) {
return str.toUpperCase();
};
var application = _index.FileSystem.readFile("./a.txt").map(upperCase).chain(_index.FileSystem.writeFile("./b.txt"));
var fileSystem = {
"/home/me/a.txt": "hello, world"
};
(0, _index.run)([_index.FileSystem.interpretMockFileSystem({
fileSystemRoot: "/home/me",
startingFileSystem: fileSystem,
onUpdate: function onUpdate(newFileSystem) {
fileSystem = newFileSystem;
}
})])(function () {
t.is(fileSystem["/home/me/b.txt"], b);
t.end();
})(application);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvcmVhZG1lLnRlc3QuanMiXSwibmFtZXMiOlsidGVzdCIsImNiIiwidCIsImEiLCJiIiwidG9VcHBlckNhc2UiLCJlcnIiLCJkaXJlY3RvcnkiLCJpcyIsImZzIiwibWtkaXIiLCJwYXRoIiwiam9pbiIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZSIsInVwcGVyQ2FzZSIsInN0ciIsImFwcGxpY2F0aW9uIiwiRmlsZVN5c3RlbSIsInJlYWRGaWxlIiwibWFwIiwiY2hhaW4iLCJpbnRlcnByZXRMb2NhbEZpbGVTeXN0ZW0iLCJiRmlsZSIsImVuZCIsImZpbGVTeXN0ZW0iLCJpbnRlcnByZXRNb2NrRmlsZVN5c3RlbSIsImZpbGVTeXN0ZW1Sb290Iiwic3RhcnRpbmdGaWxlU3lzdGVtIiwib25VcGRhdGUiLCJuZXdGaWxlU3lzdGVtIl0sIm1hcHBpbmdzIjoiOztBQUVBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7O0FBRUE7QUFFQUEsYUFBS0MsRUFBTCxDQUFRLGtCQUFSLEVBQTRCLFVBQUFDLENBQUMsRUFBSTtBQUNoQyxNQUFNQyxDQUFDLEdBQUcsNEJBQVY7QUFDQSxNQUFNQyxDQUFDLEdBQUdELENBQUMsQ0FBQ0UsV0FBRixFQUFWO0FBRUEsZ0NBQWMsVUFBQ0MsR0FBRCxFQUFNQyxTQUFOLEVBQW9CO0FBQ2pDTCxJQUFBQSxDQUFDLENBQUNNLEVBQUYsQ0FBSyxJQUFMLEVBQVdGLEdBQVg7O0FBRUFHLGdCQUFHQyxLQUFILENBQVNDLGNBQUtDLElBQUwsQ0FBVUwsU0FBVixFQUFxQixVQUFyQixDQUFULEVBQTJDO0FBQUVNLE1BQUFBLFNBQVMsRUFBRTtBQUFiLEtBQTNDLEVBQWdFLFVBQUFQLEdBQUcsRUFBSTtBQUN0RUosTUFBQUEsQ0FBQyxDQUFDTSxFQUFGLENBQUssSUFBTCxFQUFXRixHQUFYOztBQUVBRyxrQkFBR0ssU0FBSCxDQUFhSCxjQUFLQyxJQUFMLENBQVVMLFNBQVYsRUFBcUIsVUFBckIsRUFBaUMsU0FBakMsQ0FBYixFQUEwREosQ0FBMUQsRUFBNkQsRUFBN0QsRUFBaUUsVUFBQUcsR0FBRyxFQUFJO0FBQ3ZFSixRQUFBQSxDQUFDLENBQUNNLEVBQUYsQ0FBSyxJQUFMLEVBQVdGLEdBQVgsRUFEdUUsQ0FHdkU7O0FBRUEsWUFBTVMsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQUMsR0FBRztBQUFBLGlCQUFJQSxHQUFHLENBQUNYLFdBQUosRUFBSjtBQUFBLFNBQXJCOztBQUVBLFlBQU1ZLFdBQVcsR0FBR0Msa0JBQVdDLFFBQVgsQ0FBb0IsU0FBcEIsRUFDbEJDLEdBRGtCLENBQ2RMLFNBRGMsRUFFbEJNLEtBRmtCLENBRVpILGtCQUFXSixTQUFYLENBQXFCLFNBQXJCLENBRlksQ0FBcEI7O0FBSUEsd0JBQUksQ0FDSEksa0JBQVdJLHdCQUFYLENBQW9DWCxjQUFLQyxJQUFMLENBQVVMLFNBQVYsRUFBcUIsVUFBckIsQ0FBcEMsQ0FERyxDQUFKLEVBRUcsWUFBTTtBQUNSRSxzQkFBR1UsUUFBSCxDQUNDUixjQUFLQyxJQUFMLENBQVVMLFNBQVYsRUFBcUIsVUFBckIsRUFBaUMsU0FBakMsQ0FERCxFQUVDLE1BRkQsRUFHQyxVQUFDRCxHQUFELEVBQU1pQixLQUFOLEVBQWdCO0FBQ2ZyQixZQUFBQSxDQUFDLENBQUNNLEVBQUYsQ0FBSyxJQUFMLEVBQVdGLEdBQVg7QUFFQUosWUFBQUEsQ0FBQyxDQUFDTSxFQUFGLENBQUtlLEtBQUwsRUFBWW5CLENBQVo7QUFDQUYsWUFBQUEsQ0FBQyxDQUFDc0IsR0FBRjtBQUNBLFdBUkY7QUFVQSxTQWJELEVBYUdQLFdBYkg7QUFjQSxPQXpCRDtBQTBCQSxLQTdCRDtBQThCQSxHQWpDRDtBQWtDQSxDQXRDRDs7QUF3Q0FqQixhQUFLQyxFQUFMLENBQVEsa0JBQVIsRUFBNEIsVUFBQUMsQ0FBQyxFQUFJO0FBQ2hDLE1BQU1DLENBQUMsR0FBRyxjQUFWO0FBQ0EsTUFBTUMsQ0FBQyxHQUFHRCxDQUFDLENBQUNFLFdBQUYsRUFBVixDQUZnQyxDQUloQzs7QUFFQSxNQUFNVSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFBQyxHQUFHO0FBQUEsV0FBSUEsR0FBRyxDQUFDWCxXQUFKLEVBQUo7QUFBQSxHQUFyQjs7QUFFQSxNQUFNWSxXQUFXLEdBQUdDLGtCQUFXQyxRQUFYLENBQW9CLFNBQXBCLEVBQ2xCQyxHQURrQixDQUNkTCxTQURjLEVBRWxCTSxLQUZrQixDQUVaSCxrQkFBV0osU0FBWCxDQUFxQixTQUFyQixDQUZZLENBQXBCOztBQUlBLE1BQUlXLFVBQWdDLEdBQUc7QUFBRSxzQkFBa0I7QUFBcEIsR0FBdkM7QUFFQSxrQkFBSSxDQUNIUCxrQkFBV1EsdUJBQVgsQ0FBbUM7QUFDbENDLElBQUFBLGNBQWMsRUFBRSxVQURrQjtBQUVsQ0MsSUFBQUEsa0JBQWtCLEVBQUVILFVBRmM7QUFHbENJLElBQUFBLFFBQVEsRUFBRSxrQkFBQUMsYUFBYSxFQUFJO0FBQzFCTCxNQUFBQSxVQUFVLEdBQUdLLGFBQWI7QUFDQTtBQUxpQyxHQUFuQyxDQURHLENBQUosRUFRRyxZQUFNO0FBQ1I1QixJQUFBQSxDQUFDLENBQUNNLEVBQUYsQ0FBS2lCLFVBQVUsQ0FBQyxnQkFBRCxDQUFmLEVBQW1DckIsQ0FBbkM7QUFDQUYsSUFBQUEsQ0FBQyxDQUFDc0IsR0FBRjtBQUNBLEdBWEQsRUFXR1AsV0FYSDtBQVlBLENBMUJEIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IHRlc3QgZnJvbSBcImF2YVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgRmlsZVN5c3RlbSwgcnVuIH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7IHRlbXBEaXJlY3RvcnkgfSBmcm9tIFwiLi90ZXN0VXRpbHMuanNcIjtcblxuLy8gTm90ZTogVGhlc2UgdGVzdHMgYXJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV4YW1wbGVzIGluIHRoZSBSRUFETUUgYWx3YXlzIHdvcmtcblxudGVzdC5jYihcIlJlYWwgZmlsZSBzeXN0ZW1cIiwgdCA9PiB7XG5cdGNvbnN0IGEgPSBcIkhlbGxvLCBXb3JsZCEgSSdtIHJlYWRpbmchXCI7XG5cdGNvbnN0IGIgPSBhLnRvVXBwZXJDYXNlKCk7XG5cblx0dGVtcERpcmVjdG9yeSgoZXJyLCBkaXJlY3RvcnkpID0+IHtcblx0XHR0LmlzKG51bGwsIGVycik7XG5cblx0XHRmcy5ta2RpcihwYXRoLmpvaW4oZGlyZWN0b3J5LCBcIi9ob21lL21lXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9LCBlcnIgPT4ge1xuXHRcdFx0dC5pcyhudWxsLCBlcnIpO1xuXG5cdFx0XHRmcy53cml0ZUZpbGUocGF0aC5qb2luKGRpcmVjdG9yeSwgXCIvaG9tZS9tZVwiLCBcIi4vYS50eHRcIiksIGEsIHt9LCBlcnIgPT4ge1xuXHRcdFx0XHR0LmlzKG51bGwsIGVycik7XG5cblx0XHRcdFx0Ly8gQmVsb3cgdGhpcyBsaW5lIGNvbWVzIG1vc3RseSBmcm9tIHRoZSBSRUFETUVcblxuXHRcdFx0XHRjb25zdCB1cHBlckNhc2UgPSBzdHIgPT4gc3RyLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRcdFx0Y29uc3QgYXBwbGljYXRpb24gPSBGaWxlU3lzdGVtLnJlYWRGaWxlKFwiLi9hLnR4dFwiKVxuXHRcdFx0XHRcdC5tYXAodXBwZXJDYXNlKVxuXHRcdFx0XHRcdC5jaGFpbihGaWxlU3lzdGVtLndyaXRlRmlsZShcIi4vYi50eHRcIikpO1xuXG5cdFx0XHRcdHJ1bihbXG5cdFx0XHRcdFx0RmlsZVN5c3RlbS5pbnRlcnByZXRMb2NhbEZpbGVTeXN0ZW0ocGF0aC5qb2luKGRpcmVjdG9yeSwgXCIvaG9tZS9tZVwiKSksXG5cdFx0XHRcdF0pKCgpID0+IHtcblx0XHRcdFx0XHRmcy5yZWFkRmlsZShcblx0XHRcdFx0XHRcdHBhdGguam9pbihkaXJlY3RvcnksIFwiL2hvbWUvbWVcIiwgXCIuL2IudHh0XCIpLFxuXHRcdFx0XHRcdFx0XCJ1dGY4XCIsXG5cdFx0XHRcdFx0XHQoZXJyLCBiRmlsZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0LmlzKG51bGwsIGVycik7XG5cblx0XHRcdFx0XHRcdFx0dC5pcyhiRmlsZSwgYik7XG5cdFx0XHRcdFx0XHRcdHQuZW5kKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pKGFwcGxpY2F0aW9uKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn0pO1xuXG50ZXN0LmNiKFwiTW9jayBmaWxlIHN5c3RlbVwiLCB0ID0+IHtcblx0Y29uc3QgYSA9IFwiaGVsbG8sIHdvcmxkXCI7XG5cdGNvbnN0IGIgPSBhLnRvVXBwZXJDYXNlKCk7XG5cblx0Ly8gQmVsb3cgdGhpcyBsaW5lIGNvbWVzIG1vc3RseSBmcm9tIHRoZSBSRUFETUVcblxuXHRjb25zdCB1cHBlckNhc2UgPSBzdHIgPT4gc3RyLnRvVXBwZXJDYXNlKCk7XG5cblx0Y29uc3QgYXBwbGljYXRpb24gPSBGaWxlU3lzdGVtLnJlYWRGaWxlKFwiLi9hLnR4dFwiKVxuXHRcdC5tYXAodXBwZXJDYXNlKVxuXHRcdC5jaGFpbihGaWxlU3lzdGVtLndyaXRlRmlsZShcIi4vYi50eHRcIikpO1xuXG5cdGxldCBmaWxlU3lzdGVtOiB7IFtzdHJpbmddOiBzdHJpbmcgfSA9IHsgXCIvaG9tZS9tZS9hLnR4dFwiOiBcImhlbGxvLCB3b3JsZFwiIH07XG5cblx0cnVuKFtcblx0XHRGaWxlU3lzdGVtLmludGVycHJldE1vY2tGaWxlU3lzdGVtKHtcblx0XHRcdGZpbGVTeXN0ZW1Sb290OiBcIi9ob21lL21lXCIsXG5cdFx0XHRzdGFydGluZ0ZpbGVTeXN0ZW06IGZpbGVTeXN0ZW0sXG5cdFx0XHRvblVwZGF0ZTogbmV3RmlsZVN5c3RlbSA9PiB7XG5cdFx0XHRcdGZpbGVTeXN0ZW0gPSBuZXdGaWxlU3lzdGVtO1xuXHRcdFx0fSxcblx0XHR9KSxcblx0XSkoKCkgPT4ge1xuXHRcdHQuaXMoZmlsZVN5c3RlbVtcIi9ob21lL21lL2IudHh0XCJdLCBiKTtcblx0XHR0LmVuZCgpO1xuXHR9KShhcHBsaWNhdGlvbik7XG59KTtcbiJdfQ==