@cheatron/native 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -4
- package/dist/{src/handle.d.ts → handle.d.ts} +4 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/{src/handle.js → handle.js} +3 -3
- package/dist/handle.js.map +1 -0
- package/dist/{src/index.d.ts → index.d.ts} +8 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +7 -2
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js.map +1 -0
- package/dist/module.d.ts +38 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +106 -0
- package/dist/module.js.map +1 -0
- package/dist/msvcrt-ext.d.ts +20 -0
- package/dist/msvcrt-ext.d.ts.map +1 -0
- package/dist/msvcrt-ext.js +120 -0
- package/dist/msvcrt-ext.js.map +1 -0
- package/dist/native-fn.d.ts +73 -0
- package/dist/native-fn.d.ts.map +1 -0
- package/dist/native-fn.js +214 -0
- package/dist/native-fn.js.map +1 -0
- package/dist/pattern.d.ts +36 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +79 -0
- package/dist/pattern.js.map +1 -0
- package/dist/process.d.ts +104 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +402 -0
- package/dist/process.js.map +1 -0
- package/dist/scan-result.d.ts +54 -0
- package/dist/scan-result.d.ts.map +1 -0
- package/dist/scan-result.js +128 -0
- package/dist/scan-result.js.map +1 -0
- package/dist/scanner.d.ts +22 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +116 -0
- package/dist/scanner.js.map +1 -0
- package/dist/thread.d.ts.map +1 -0
- package/dist/{src/thread.js → thread.js} +1 -1
- package/dist/thread.js.map +1 -0
- package/package.json +3 -2
- package/dist/eslint.config.d.ts +0 -3
- package/dist/eslint.config.d.ts.map +0 -1
- package/dist/eslint.config.js +0 -26
- package/dist/eslint.config.js.map +0 -1
- package/dist/src/handle.d.ts.map +0 -1
- package/dist/src/handle.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js.map +0 -1
- package/dist/src/module.d.ts +0 -22
- package/dist/src/module.d.ts.map +0 -1
- package/dist/src/module.js +0 -55
- package/dist/src/module.js.map +0 -1
- package/dist/src/process.d.ts +0 -30
- package/dist/src/process.d.ts.map +0 -1
- package/dist/src/process.js +0 -104
- package/dist/src/process.js.map +0 -1
- package/dist/src/thread.d.ts.map +0 -1
- package/dist/src/thread.js.map +0 -1
- package/dist/tests/integration/memory.test.d.ts +0 -2
- package/dist/tests/integration/memory.test.d.ts.map +0 -1
- package/dist/tests/integration/memory.test.js +0 -82
- package/dist/tests/integration/memory.test.js.map +0 -1
- package/dist/tests/integration/thread.test.d.ts +0 -2
- package/dist/tests/integration/thread.test.d.ts.map +0 -1
- package/dist/tests/integration/thread.test.js +0 -37
- package/dist/tests/integration/thread.test.js.map +0 -1
- package/dist/tests/setup.d.ts +0 -2
- package/dist/tests/setup.d.ts.map +0 -1
- package/dist/tests/setup.js +0 -3
- package/dist/tests/setup.js.map +0 -1
- package/dist/tests/unit/kernel32.test.d.ts +0 -2
- package/dist/tests/unit/kernel32.test.d.ts.map +0 -1
- package/dist/tests/unit/kernel32.test.js +0 -28
- package/dist/tests/unit/kernel32.test.js.map +0 -1
- package/dist/tests/unit/logger.test.d.ts +0 -2
- package/dist/tests/unit/logger.test.d.ts.map +0 -1
- package/dist/tests/unit/logger.test.js +0 -29
- package/dist/tests/unit/logger.test.js.map +0 -1
- package/dist/tests/unit/msvcrt.test.d.ts +0 -2
- package/dist/tests/unit/msvcrt.test.d.ts.map +0 -1
- package/dist/tests/unit/msvcrt.test.js +0 -22
- package/dist/tests/unit/msvcrt.test.js.map +0 -1
- package/dist/tests/unit/process.test.d.ts +0 -2
- package/dist/tests/unit/process.test.d.ts.map +0 -1
- package/dist/tests/unit/process.test.js +0 -27
- package/dist/tests/unit/process.test.js.map +0 -1
- package/dist/tests/unit/thread.test.d.ts +0 -2
- package/dist/tests/unit/thread.test.d.ts.map +0 -1
- package/dist/tests/unit/thread.test.js +0 -35
- package/dist/tests/unit/thread.test.js.map +0 -1
- package/dist/tests/unit/thread_creation.test.d.ts +0 -2
- package/dist/tests/unit/thread_creation.test.d.ts.map +0 -1
- package/dist/tests/unit/thread_creation.test.js +0 -31
- package/dist/tests/unit/thread_creation.test.js.map +0 -1
- /package/dist/{src/logger.d.ts → logger.d.ts} +0 -0
- /package/dist/{src/logger.js → logger.js} +0 -0
- /package/dist/{src/thread.d.ts → thread.d.ts} +0 -0
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { Thread, CONTEXT_SIZE, ThreadAccess } from '@cheatron/native';
|
|
3
|
-
describe('Thread Integration Tests', () => {
|
|
4
|
-
it('should open the current thread by ID', () => {
|
|
5
|
-
const tid = Thread.currentId();
|
|
6
|
-
const thread = Thread.open(tid);
|
|
7
|
-
expect(thread.isValid()).toBe(true);
|
|
8
|
-
expect(thread.handle).toBeDefined();
|
|
9
|
-
expect(thread.handle).not.toBeNull();
|
|
10
|
-
thread.close();
|
|
11
|
-
expect(thread.isValid()).toBe(false);
|
|
12
|
-
});
|
|
13
|
-
it('should open thread with specific access rights', () => {
|
|
14
|
-
const tid = Thread.currentId();
|
|
15
|
-
const thread = Thread.open(tid, ThreadAccess.QUERY_INFORMATION);
|
|
16
|
-
expect(thread.isValid()).toBe(true);
|
|
17
|
-
thread.close();
|
|
18
|
-
});
|
|
19
|
-
it('should have matching current thread ID across calls', () => {
|
|
20
|
-
const id1 = Thread.currentId();
|
|
21
|
-
const id2 = Thread.currentId();
|
|
22
|
-
expect(id1).toBe(id2);
|
|
23
|
-
});
|
|
24
|
-
it('should have correct CONTEXT_SIZE for x64', () => {
|
|
25
|
-
// x64 CONTEXT is 1232 bytes (0x4D0)
|
|
26
|
-
expect(CONTEXT_SIZE).toBe(1232);
|
|
27
|
-
});
|
|
28
|
-
it('should have GetThreadContext available', () => {
|
|
29
|
-
// Verify the API is loaded - actual usage requires a suspended *other* thread
|
|
30
|
-
const tid = Thread.currentId();
|
|
31
|
-
const thread = Thread.open(tid, ThreadAccess.GET_CONTEXT | ThreadAccess.SUSPEND_RESUME);
|
|
32
|
-
expect(thread.isValid()).toBe(true);
|
|
33
|
-
expect(typeof thread.getContext).toBe('function');
|
|
34
|
-
thread.close();
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=thread.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread.test.js","sourceRoot":"","sources":["../../../tests/integration/thread.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAErC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,oCAAoC;QACpC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,8EAA8E;QAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,GAAG,EACH,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,cAAc,CACvD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/tests/setup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../tests/setup.ts"],"names":[],"mappings":""}
|
package/dist/tests/setup.js
DELETED
package/dist/tests/setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../tests/setup.ts"],"names":[],"mappings":";AAAA,uBAAuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kernel32.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/kernel32.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { Kernel32Impl } from '@cheatron/native';
|
|
3
|
-
describe('Kernel32 Windows Tests', () => {
|
|
4
|
-
it('should load Kernel32 and have all required exports', () => {
|
|
5
|
-
expect(Kernel32Impl).toBeDefined();
|
|
6
|
-
// Process
|
|
7
|
-
expect(typeof Kernel32Impl.GetCurrentProcess).toBe('function');
|
|
8
|
-
expect(typeof Kernel32Impl.GetCurrentProcessId).toBe('function');
|
|
9
|
-
expect(typeof Kernel32Impl.OpenProcess).toBe('function');
|
|
10
|
-
expect(typeof Kernel32Impl.CloseHandle).toBe('function');
|
|
11
|
-
// Memory
|
|
12
|
-
expect(typeof Kernel32Impl.ReadProcessMemory).toBe('function');
|
|
13
|
-
expect(typeof Kernel32Impl.WriteProcessMemory).toBe('function');
|
|
14
|
-
expect(typeof Kernel32Impl.VirtualQuery).toBe('function');
|
|
15
|
-
expect(typeof Kernel32Impl.VirtualQueryEx).toBe('function');
|
|
16
|
-
// Thread
|
|
17
|
-
expect(typeof Kernel32Impl.GetCurrentThread).toBe('function');
|
|
18
|
-
expect(typeof Kernel32Impl.GetCurrentThreadId).toBe('function');
|
|
19
|
-
expect(typeof Kernel32Impl.OpenThread).toBe('function');
|
|
20
|
-
expect(typeof Kernel32Impl.SuspendThread).toBe('function');
|
|
21
|
-
expect(typeof Kernel32Impl.ResumeThread).toBe('function');
|
|
22
|
-
});
|
|
23
|
-
it('should return a valid handle from GetCurrentProcess', () => {
|
|
24
|
-
const handle = Kernel32Impl.GetCurrentProcess();
|
|
25
|
-
expect(handle).toBeDefined();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=kernel32.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kernel32.test.js","sourceRoot":"","sources":["../../../tests/unit/kernel32.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAEnC,UAAU;QACV,MAAM,CAAC,OAAO,YAAY,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,YAAY,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzD,SAAS;QACT,MAAM,CAAC,OAAO,YAAY,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,YAAY,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5D,SAAS;QACT,MAAM,CAAC,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,YAAY,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/logger.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect } from 'bun:test';
|
|
2
|
-
import { log } from '@cheatron/native';
|
|
3
|
-
describe('Logger Wrapper Tests', () => {
|
|
4
|
-
test('should expose all log levels', () => {
|
|
5
|
-
expect(typeof log.fatal).toBe('function');
|
|
6
|
-
expect(typeof log.error).toBe('function');
|
|
7
|
-
expect(typeof log.warn).toBe('function');
|
|
8
|
-
expect(typeof log.info).toBe('function');
|
|
9
|
-
expect(typeof log.debug).toBe('function');
|
|
10
|
-
expect(typeof log.trace).toBe('function');
|
|
11
|
-
});
|
|
12
|
-
test('should expose child logger factory', () => {
|
|
13
|
-
expect(typeof log.child).toBe('function');
|
|
14
|
-
});
|
|
15
|
-
test('should execute log methods without error', () => {
|
|
16
|
-
// These should just run without throwing
|
|
17
|
-
log.info('Test', 'Info message');
|
|
18
|
-
log.debug('Test', 'Debug message', { some: 'data' });
|
|
19
|
-
log.error('Test', 'Error message');
|
|
20
|
-
});
|
|
21
|
-
test('should create child logger', () => {
|
|
22
|
-
const child = log.child('ChildTest');
|
|
23
|
-
expect(child).toBeDefined();
|
|
24
|
-
expect(typeof child.info).toBe('function');
|
|
25
|
-
// Should run without error
|
|
26
|
-
child.info('Child info message');
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=logger.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../tests/unit/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,yCAAyC;QACzC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,2BAA2B;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msvcrt.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/msvcrt.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { MsvcrtImpl as msvcrt, Module } from '@cheatron/native';
|
|
3
|
-
describe('MSVCRT Tests', () => {
|
|
4
|
-
it('should load msvcrt.dll via Module helper', () => {
|
|
5
|
-
const module = Module.crt;
|
|
6
|
-
expect(module.handle).not.toBeNull();
|
|
7
|
-
expect(module.name).toBe('msvcrt.dll');
|
|
8
|
-
});
|
|
9
|
-
it('should allocate and free memory using CRT', () => {
|
|
10
|
-
const size = 1024;
|
|
11
|
-
const ptr = msvcrt.malloc(size);
|
|
12
|
-
expect(ptr).not.toBeNull();
|
|
13
|
-
msvcrt.free(ptr);
|
|
14
|
-
});
|
|
15
|
-
it('should memcpy correctly', () => {
|
|
16
|
-
const src = Buffer.from('Hello CRT!');
|
|
17
|
-
const dest = Buffer.alloc(src.length);
|
|
18
|
-
msvcrt.memcpy(dest, src, src.length);
|
|
19
|
-
expect(dest.toString()).toBe('Hello CRT!');
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
//# sourceMappingURL=msvcrt.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msvcrt.test.js","sourceRoot":"","sources":["../../../tests/unit/msvcrt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEhE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,CAAC,MAAM,CACX,IAAyB,EACzB,GAAwB,EACxB,GAAG,CAAC,MAAM,CACX,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/process.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { Process, CurrentProcess, currentProcess } from '@cheatron/native';
|
|
3
|
-
describe('Process Windows Tests', () => {
|
|
4
|
-
describe('CurrentProcess', () => {
|
|
5
|
-
it('should be a singleton instance and valid', () => {
|
|
6
|
-
expect(currentProcess).toBeInstanceOf(CurrentProcess);
|
|
7
|
-
expect(currentProcess.isValid()).toBe(true);
|
|
8
|
-
expect(Process.current()).toBe(currentProcess);
|
|
9
|
-
});
|
|
10
|
-
it('should not be closed by default', () => {
|
|
11
|
-
expect(currentProcess.handle).toBeDefined();
|
|
12
|
-
});
|
|
13
|
-
it('should have a valid pid', () => {
|
|
14
|
-
expect(currentProcess.pid).toBeGreaterThan(0);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('Process Logic', () => {
|
|
18
|
-
it('should handle lifecycle of a manual handle', () => {
|
|
19
|
-
const proc = new Process(1234n, undefined, false);
|
|
20
|
-
expect(proc.isValid()).toBe(true);
|
|
21
|
-
proc.close();
|
|
22
|
-
expect(proc.isValid()).toBe(false);
|
|
23
|
-
expect(proc.handle).toBeNull();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
//# sourceMappingURL=process.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process.test.js","sourceRoot":"","sources":["../../../tests/unit/process.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE3E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/thread.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { Thread, CurrentThread, currentThread } from '@cheatron/native';
|
|
3
|
-
describe('Thread Tests', () => {
|
|
4
|
-
describe('CurrentThread', () => {
|
|
5
|
-
it('should be a singleton instance and valid', () => {
|
|
6
|
-
expect(currentThread).toBeInstanceOf(CurrentThread);
|
|
7
|
-
expect(currentThread).toBeInstanceOf(Thread);
|
|
8
|
-
expect(currentThread.isValid()).toBe(true);
|
|
9
|
-
expect(Thread.current()).toBe(currentThread);
|
|
10
|
-
});
|
|
11
|
-
it('should have a valid handle', () => {
|
|
12
|
-
expect(currentThread.handle).toBeDefined();
|
|
13
|
-
});
|
|
14
|
-
it('should return a valid thread ID', () => {
|
|
15
|
-
const id = Thread.currentId();
|
|
16
|
-
expect(typeof id).toBe('number');
|
|
17
|
-
expect(id).toBeGreaterThan(0);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
describe('Thread Logic', () => {
|
|
21
|
-
it('should handle lifecycle of a manual handle', () => {
|
|
22
|
-
const thread = new Thread(1234n, undefined, false);
|
|
23
|
-
expect(thread.isValid()).toBe(true);
|
|
24
|
-
thread.close();
|
|
25
|
-
expect(thread.isValid()).toBe(false);
|
|
26
|
-
expect(thread.handle).toBeNull();
|
|
27
|
-
});
|
|
28
|
-
it('should be robust against multiple close calls', () => {
|
|
29
|
-
const thread = new Thread(1234n, undefined, false);
|
|
30
|
-
thread.close();
|
|
31
|
-
expect(() => thread.close()).not.toThrow();
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=thread.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread.test.js","sourceRoot":"","sources":["../../../tests/unit/thread.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAExE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread_creation.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/thread_creation.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { expect, it, describe } from 'bun:test';
|
|
2
|
-
import { Thread, Process, Module, ThreadCreationFlags, WaitReturn, STILL_ACTIVE, } from '@cheatron/native';
|
|
3
|
-
describe('Thread Creation Tests', () => {
|
|
4
|
-
it('should create a local thread, wait for it, and check exit code', () => {
|
|
5
|
-
// Use the ergonomic Module helper
|
|
6
|
-
const sleepAddr = Module.kernel32.getProcAddress('Sleep');
|
|
7
|
-
expect(sleepAddr).not.toBeNull();
|
|
8
|
-
// Create a thread that calls Sleep(50)
|
|
9
|
-
const thread = Thread.create(sleepAddr, 20, 0, ThreadCreationFlags.IMMEDIATE);
|
|
10
|
-
expect(thread.isValid()).toBe(true);
|
|
11
|
-
expect(thread.handle).not.toBeNull();
|
|
12
|
-
// Wait for the thread to finish
|
|
13
|
-
const waitResult = thread.wait(100);
|
|
14
|
-
expect(waitResult).toBe(WaitReturn.OBJECT_0);
|
|
15
|
-
// Initial exit code on success (Sleep returns void, so exit code is usually the param or 0)
|
|
16
|
-
const exitCode = thread.getExitCode();
|
|
17
|
-
expect(exitCode).not.toBe(STILL_ACTIVE);
|
|
18
|
-
thread.close();
|
|
19
|
-
expect(thread.isValid()).toBe(false);
|
|
20
|
-
});
|
|
21
|
-
it('should create a remote thread in the current process', () => {
|
|
22
|
-
const process = Process.current();
|
|
23
|
-
const sleepAddr = Module.kernel32.getProcAddress('Sleep');
|
|
24
|
-
// Create a remote thread in 'this' process
|
|
25
|
-
const thread = process.createThread(sleepAddr, 50, 0, ThreadCreationFlags.IMMEDIATE);
|
|
26
|
-
expect(thread.isValid()).toBe(true);
|
|
27
|
-
expect(thread.handle).not.toBeNull();
|
|
28
|
-
thread.close();
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=thread_creation.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread_creation.test.js","sourceRoot":"","sources":["../../../tests/unit/thread_creation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,UAAU,EACV,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAE1B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,kCAAkC;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEjC,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,SAAS,EACT,EAAY,EACZ,CAAC,EACD,mBAAmB,CAAC,SAAS,CAC9B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAErC,gCAAgC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE7C,4FAA4F;QAC5F,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE1D,2CAA2C;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CACjC,SAAS,EACT,EAAY,EACZ,CAAC,EACD,mBAAmB,CAAC,SAAS,CAC9B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAErC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|