Skip to content

Commit 3a2d694

Browse files
authored
Merge pull request #179 from bruce6005/313553034
[LAB2] 313553034
2 parents 722cd31 + bf825ca commit 3a2d694

File tree

2 files changed

+138
-1
lines changed

2 files changed

+138
-1
lines changed

lab1/main_test.js

+44
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,50 @@ const assert = require('assert');
33
const { MyClass, Student } = require('./main');
44

55
test("Test MyClass's addStudent", () => {
6+
const Class = new MyClass();
7+
const student = new Student();
8+
const id = Class.addStudent(student);
9+
assert.strictEqual(id, 0);
10+
assert.strictEqual(Class.addStudent({}), -1);
11+
});
12+
13+
test("Test MyClass's getStudentById", () => {
14+
const Class = new MyClass();
15+
const student = new Student();
16+
student.setName("John");
17+
18+
const id = Class.addStudent(student);
19+
const StudentID = Class.getStudentById(id);
20+
21+
assert.strictEqual(StudentID.getName(), "John");
22+
assert.strictEqual(Class.getStudentById(-1), null);
23+
assert.strictEqual(Class.getStudentById(999), null);
24+
25+
});
26+
27+
test("Test Student's setName", () => {
28+
const student = new Student();
29+
student.setName(123);
30+
assert.strictEqual(student.getName(), "");
31+
32+
student.setName("John");
33+
const StudentName = student.getName();
34+
35+
36+
assert.strictEqual(StudentName, "John");
37+
38+
});
39+
40+
test("Test Student's getName", () => {
41+
const student = new Student();
42+
43+
// "" in default
44+
assert.strictEqual(student.getName(), "");
45+
46+
student.setName("John");
47+
const StudentName = student.getName();
48+
assert.strictEqual(StudentName, "John");
49+
=======
650
// TODO
751
throw new Error("Test not implemented");
852
});

lab2/main_test.js

+94-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,99 @@
11
const test = require('node:test');
22
const assert = require('assert');
3+
const fs = require('fs');
4+
5+
// 模擬 fs.readFile
6+
function mockReadFile(path, encoding, callback) {
7+
callback(null, 'Alice\nBob\nCharlie'); // Stub
8+
}
9+
const mockFsRead = test.mock.method(fs, 'readFile', mockReadFile);
10+
11+
const { Application, MailSystem } = require('./main');
12+
13+
test('MailSystem: write()', () => {
14+
const mailSystem = new MailSystem;
15+
assert.strictEqual(mailSystem.write('Alice'), 'Congrats, Alice!');
16+
});
17+
18+
test('MailSystem: send() success case', () => {
19+
function returnHigh() { return 0.9; } // Stub
20+
const mailSystem = new MailSystem();
21+
const mockRandom = test.mock.method(Math, 'random', returnHigh);
22+
assert.strictEqual(mailSystem.send('Alice', 'Congrats, Alice!'), true);
23+
mockRandom.mock.restore();
24+
});
25+
26+
test('MailSystem: send() failure case', () => {
27+
function returnLow() { return 0.1; } // Stub
28+
const mailSystem = new MailSystem();
29+
const mockRandom = test.mock.method(Math, 'random', returnLow);
30+
assert.strictEqual(mailSystem.send('Alice', 'Congrats, Alice!'), false);
31+
mockRandom.mock.restore();
32+
});
33+
34+
test('Application: constructor initializes names', async () => {
35+
const app = new Application();
36+
await new Promise((resolve) => setTimeout(resolve, 10)); // Wait for async init
37+
assert.deepStrictEqual(app.people, ['Alice', 'Bob', 'Charlie']);
38+
assert.deepStrictEqual(app.selected, []);
39+
});
40+
41+
test('Application: getRandomPerson()', () => {
42+
function returnFirst() { return 0; }
43+
const app = new Application();
44+
const mockRandom = test.mock.method(Math, 'random', returnFirst);
45+
assert.strictEqual(app.getRandomPerson(), 'Alice');
46+
mockRandom.mock.restore();
47+
});
48+
49+
test('Application: selectNextPerson()', async () => {
50+
const application = new Application();
51+
await new Promise(resolve => setTimeout(resolve, 50));
52+
53+
function returnApple() {
54+
return 'Apple';
55+
}
56+
const mockrandompersonA = test.mock.method(application, 'getRandomPerson', returnApple);
57+
assert.strictEqual(application.selectNextPerson(), 'Apple');
58+
assert.deepStrictEqual(application.selected, ['Apple']);
59+
mockrandompersonA.mock.restore();
60+
61+
let cnt = 0;
62+
function returnAppleThenBanana() {
63+
return cnt++ === 0 ? 'Apple' : 'Banana';
64+
}
65+
const mockrandompersonAB = test.mock.method(application, 'getRandomPerson', returnAppleThenBanana);
66+
assert.strictEqual(application.selectNextPerson(), 'Banana');
67+
assert.deepStrictEqual(application.selected, ['Apple', 'Banana']);
68+
mockrandompersonAB.mock.restore();
69+
70+
function returnOrange() {
71+
return 'Orange';
72+
}
73+
const mockrandompersonO = test.mock.method(application, 'getRandomPerson', returnOrange);
74+
assert.strictEqual(application.selectNextPerson(), 'Orange');
75+
assert.deepStrictEqual(application.selected, ['Apple', 'Banana', 'Orange']);
76+
mockrandompersonO.mock.restore();
77+
78+
assert.strictEqual(application.selectNextPerson(), null);
79+
});
80+
81+
test('Application: notifySelected()', () => {
82+
const app = new Application();
83+
app.selected = ['Alice', 'Bob'];
84+
85+
const mockWrite = test.mock.method(app.mailSystem, 'write');
86+
const mockSend = test.mock.method(app.mailSystem, 'send');
87+
88+
app.notifySelected();
89+
90+
assert.strictEqual(mockWrite.mock.callCount(), 2);
91+
assert.strictEqual(mockSend.mock.callCount(), 2);
92+
mockWrite.mock.restore();
93+
mockSend.mock.restore();
94+
});
95+
=======
396
const { Application, MailSystem } = require('./main');
497

598
// TODO: write your tests here
6-
// Remember to use Stub, Mock, and Spy when necessary
99+
// Remember to use Stub, Mock, and Spy when necessary

0 commit comments

Comments
 (0)