Commit 3a544116 authored by Giannis Kepas's avatar Giannis Kepas
Browse files

add assignment 5 tests

parent cecdc01d
Loading
Loading
Loading
Loading
+77 −1
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@
        "jsdom": "^26.1.0",
        "jsdom-global": "^3.0.2",
        "jshint": "^2.13.6",
        "mocha": "^11.7.2"
        "mocha": "^11.7.2",
        "sinon": "^21.0.0"
      }
    },
    "node_modules/@asamuzakjp/css-color": {
@@ -240,6 +241,43 @@
        "node": ">=14"
      }
    },
    "node_modules/@sinonjs/commons": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
      "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
      "license": "BSD-3-Clause",
      "dependencies": {
        "type-detect": "4.0.8"
      }
    },
    "node_modules/@sinonjs/fake-timers": {
      "version": "13.0.5",
      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
      "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
      "license": "BSD-3-Clause",
      "dependencies": {
        "@sinonjs/commons": "^3.0.1"
      }
    },
    "node_modules/@sinonjs/samsam": {
      "version": "8.0.3",
      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz",
      "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==",
      "license": "BSD-3-Clause",
      "dependencies": {
        "@sinonjs/commons": "^3.0.1",
        "type-detect": "^4.1.0"
      }
    },
    "node_modules/@sinonjs/samsam/node_modules/type-detect": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
      "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
      "license": "MIT",
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/agent-base": {
      "version": "7.1.4",
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@@ -1360,6 +1398,35 @@
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/sinon": {
      "version": "21.0.0",
      "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz",
      "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==",
      "license": "BSD-3-Clause",
      "dependencies": {
        "@sinonjs/commons": "^3.0.1",
        "@sinonjs/fake-timers": "^13.0.5",
        "@sinonjs/samsam": "^8.0.1",
        "diff": "^7.0.0",
        "supports-color": "^7.2.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/sinon"
      }
    },
    "node_modules/sinon/node_modules/supports-color": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
      "license": "MIT",
      "dependencies": {
        "has-flag": "^4.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/string_decoder": {
      "version": "0.10.31",
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -1494,6 +1561,15 @@
        "node": ">=18"
      }
    },
    "node_modules/type-detect": {
      "version": "4.0.8",
      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
      "license": "MIT",
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/w3c-xmlserializer": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+3 −2
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
    "jsdom": "^26.1.0",
    "jsdom-global": "^3.0.2",
    "jshint": "^2.13.6",
    "mocha": "^11.7.2"
    "mocha": "^11.7.2",
    "sinon": "^21.0.0"
  }
}

test/assignment-5/test_35.js

deleted100644 → 0
+0 −18
Original line number Diff line number Diff line
import sum from "../solution_35.js";
import assert from "assert";

describe("\n\nSolution_35", () => {
  [
    { cb: () => sum(1), res: 1 },
    { cb: () => sum(1)(2), res: 3 },
    { cb: () => sum(1)(2)(3), res: 6 },
    { cb: () => sum(5)(-1)(2), res: 6 },
    { cb: () => sum(6)(-1)(-2)(-3), res: 0 },
    { cb: () => sum(0)(1)(2)(3)(4)(5), res: 15 },
  ].map(({ cb, res }) => {

    it(`should return ${res} for ${cb}`, () => {
      assert.deepEqual(cb(), res);
    });
  });
});
+15 −14
Original line number Diff line number Diff line
import FormatError from "../solution_36.js";
import assert from "assert";
import sum from '../solution_36.js';
import assert from 'assert';

describe("\n\nSolution_36", () => {
  let err = new FormatError("formatting error");
describe('solution_36', () => {
  describe('sum()', () => {
    [
    { cb: () => err.message, res: "formatting error" },
    { cb: () => err.name, res: "FormatError" },
    { cb: () => err instanceof FormatError, res: true },
    { cb: () => err instanceof SyntaxError, res: true },

      { cb: () => sum(1), res: 1 },
      { cb: () => sum(1)(2), res: 3 },
      { cb: () => sum(1)(2)(3), res: 6 },
      { cb: () => sum(5)(-1)(2), res: 6 },
      { cb: () => sum(6)(-1)(-2)(-3), res: 0 },
      { cb: () => sum(0)(1)(2)(3)(4)(5), res: 15 },
    ].map(({ cb, res }) => {

      it(`should return ${res} for ${cb}`, () => {
        assert.deepEqual(cb(), res);
      });
    });
  });
});
+40 −5
Original line number Diff line number Diff line
import delay from "../solution_37.js";
import assert from "assert";
import delay from '../solution_37.js';
import assert from 'assert';

describe("\n\nSolution_37", () => {
  it(`should be able to accept then`, () => {
    delay(3000).then(() => done());
describe('solution_37', () => {
  describe('delay(ms)', () => {
    it('should return a Promise', () => {
      const result = delay(100);
      assert.strictEqual(typeof result.then, 'function');
    });

    it('should resolve after the specified delay', async () => {
      const start = Date.now();
      await delay(200);
      const elapsed = Date.now() - start;
      assert(elapsed >= 200, `Elapsed: ${elapsed}`);
    });

    it('should resolve with undefined', async () => {
      const value = await delay(50);
      assert.strictEqual(value, undefined);
    });

    it('should work with zero delay', async () => {
      const start = Date.now();
      await delay(0);
      const elapsed = Date.now() - start;
      assert(elapsed < 50, `Elapsed: ${elapsed}`);
    });

    it('should accept then', (done) => {
      delay(10).then(() => done());
    });

    it('should allow chaining with then', (done) => {
      delay(10)
        .then(() => 'next')
        .then((val) => {
          assert.strictEqual(val, 'next');
          done();
        });
    });
  });
});
Loading