diff --git a/test/integration/crud/unicode.test.js b/test/integration/crud/unicode.test.js
deleted file mode 100644
index ab39df20fb0..00000000000
--- a/test/integration/crud/unicode.test.js
+++ /dev/null
@@ -1,174 +0,0 @@
-'use strict';
-const semver = require('semver');
-const { assert: test, setupDatabase } = require('../shared');
-const { expect } = require('chai');
-
-describe('Unicode', function () {
- before(function () {
- return setupDatabase(this.configuration);
- });
-
- it('shouldCorrectlyInsertUnicodeContainingDocument', {
- metadata: {
- requires: { topology: ['single', 'replicaset', 'sharded', 'ssl', 'heap', 'wiredtiger'] }
- },
-
- test: function (done) {
- if (semver.satisfies(process.versions.node, '22.7.0')) {
- this.skipReason = 'Node.js 22.7.0 has a UTF-8 encoding bug';
- this.skip();
- }
-
- var configuration = this.configuration;
- var client = configuration.newClient(configuration.writeConcernMax(), { maxPoolSize: 1 });
- client.connect(function (err, client) {
- var db = client.db(configuration.db);
- var doc = {
- statuses_count: 1687,
- created_at: 'Mon Oct 22 14:55:08 +0000 2007',
- description: 'NodeJS hacker, Cofounder of Debuggable, CakePHP core alumnus',
- favourites_count: 6,
- profile_sidebar_fill_color: 'EADEAA',
- screen_name: 'felixge',
- status: {
- created_at: 'Fri Mar 12 08:59:44 +0000 2010',
- in_reply_to_screen_name: null,
- truncated: false,
- in_reply_to_user_id: null,
- source: 'Tweetie',
- favorited: false,
- in_reply_to_status_id: null,
- id: 10364119169,
- text: '#berlin #snow = #fail : ('
- },
- contributors_enabled: false,
- following: null,
- geo_enabled: false,
- time_zone: 'Eastern Time (US & Canada)',
- profile_sidebar_border_color: 'D9B17E',
- url: 'http://debuggable.com',
- verified: false,
- location: 'Berlin',
- profile_text_color: '333333',
- notifications: null,
- profile_background_image_url:
- 'http://s.twimg.com/a/1268354287/images/themes/theme8/bg.gif',
- protected: false,
- profile_link_color: '9D582E',
- followers_count: 840,
- name: 'Felix Geisend\u00f6rfer',
- profile_background_tile: false,
- id: 9599342,
- lang: 'en',
- utc_offset: -18000,
- friends_count: 450,
- profile_background_color: '8B542B',
- profile_image_url:
- 'http://a3.twimg.com/profile_images/107142257/passbild-square_normal.jpg'
- };
-
- db.createCollection(
- 'test_should_correctly_insert_unicode_containing_document',
- function (err, collection) {
- doc['_id'] = 'felixge';
-
- collection.insertOne(doc, { writeConcern: { w: 1 } }, function (err) {
- expect(err).to.not.exist;
- collection.findOne(function (err, doc) {
- test.equal('felixge', doc._id);
- client.close(done);
- });
- });
- }
- );
- });
- }
- });
-
- it('should Correctly Insert Unicode Characters', function (done) {
- const client = this.configuration.newClient(this.configuration.writeConcernMax(), {
- maxPoolSize: 1
- });
- client.connect((err, client) => {
- expect(err).to.not.exist;
- const db = client.db(this.configuration.db);
- db.createCollection('unicode_test_collection', (err, collection) => {
- expect(err).to.not.exist;
- const test_strings = ['ouooueauiOUOOUEAUI', 'öüóőúéáűíÖÜÓŐÚÉÁŰÍ', '本荘由利地域に洪水警報'];
- collection.insert({ id: 0, text: test_strings[0] }, { writeConcern: { w: 1 } }, err => {
- expect(err).to.not.exist;
- collection.insert({ id: 1, text: test_strings[1] }, { writeConcern: { w: 1 } }, err => {
- expect(err).to.not.exist;
- collection.find().forEach(
- doc => {
- expect(doc).property('text').to.equal(test_strings[doc.id]);
- },
- err => {
- expect(err).to.not.exist;
- client.close(done);
- }
- );
- });
- });
- });
- });
- });
-
- it('shouldCreateObjectWithChineseObjectName', {
- metadata: {
- requires: { topology: ['single', 'replicaset', 'sharded', 'ssl', 'heap', 'wiredtiger'] }
- },
-
- test: function (done) {
- var object = { 客家话: 'Hello' };
-
- var configuration = this.configuration;
- var client = configuration.newClient(configuration.writeConcernMax(), { maxPoolSize: 1 });
- client.connect(function (err, client) {
- var db = client.db(configuration.db);
- db.createCollection('create_object_with_chinese_object_name', function (err) {
- expect(err).to.not.exist;
- const collection = db.collection('create_object_with_chinese_object_name');
- collection.insert(object, { writeConcern: { w: 1 } }, function (err) {
- expect(err).to.not.exist;
- collection.findOne(function (err, item) {
- test.equal(object['客家话'], item['客家话']);
-
- collection.find().toArray(function (err, items) {
- test.equal(object['客家话'], items[0]['客家话']);
- client.close(done);
- });
- });
- });
- });
- });
- }
- });
-
- it('shouldCorrectlyHandleUT8KeyNames', {
- metadata: {
- requires: { topology: ['single', 'replicaset', 'sharded', 'ssl', 'heap', 'wiredtiger'] }
- },
-
- test: function (done) {
- var configuration = this.configuration;
- var client = configuration.newClient(configuration.writeConcernMax(), { maxPoolSize: 1 });
- client.connect(function (err, client) {
- var db = client.db(configuration.db);
- db.createCollection('test_utf8_key_name', function (err, collection) {
- collection.insert({ šđžčćŠĐŽČĆ: 1 }, { writeConcern: { w: 1 } }, function (err) {
- expect(err).to.not.exist;
- collection
- .find({})
- .project({ šđžčćŠĐŽČĆ: 1 })
- .toArray(function (err, items) {
- test.equal(1, items[0]['šđžčćŠĐŽČĆ']);
- // Let's close the db
- client.close(done);
- });
- });
- });
- });
- }
- });
-});
diff --git a/test/integration/crud/unicode.test.ts b/test/integration/crud/unicode.test.ts
new file mode 100644
index 00000000000..eec67a8c520
--- /dev/null
+++ b/test/integration/crud/unicode.test.ts
@@ -0,0 +1,117 @@
+import { expect } from 'chai';
+import { satisfies } from 'semver';
+
+import type { MongoClient } from '../../../src';
+import { assert as test, setupDatabase } from '../shared';
+
+describe('Unicode', function () {
+ let client: MongoClient;
+
+ before(function () {
+ return setupDatabase(this.configuration);
+ });
+
+ beforeEach(async function () {
+ client = this.configuration.newClient();
+ });
+
+ afterEach(async function () {
+ await client?.close();
+ });
+
+ it('should correctly insert unicode containing document', async function () {
+ if (satisfies(process.versions.node, '22.7.0')) {
+ this.skipReason = 'Node.js 22.7.0 has a UTF-8 encoding bug';
+ this.skip();
+ }
+
+ const configuration = this.configuration;
+ const db = client.db(configuration.db);
+ const doc = {
+ statuses_count: 1687,
+ created_at: 'Mon Oct 22 14:55:08 +0000 2007',
+ description: 'NodeJS hacker, Cofounder of Debuggable, CakePHP core alumnus',
+ favourites_count: 6,
+ profile_sidebar_fill_color: 'EADEAA',
+ screen_name: 'felixge',
+ status: {
+ created_at: 'Fri Mar 12 08:59:44 +0000 2010',
+ in_reply_to_screen_name: null,
+ truncated: false,
+ in_reply_to_user_id: null,
+ source: 'Tweetie',
+ favorited: false,
+ in_reply_to_status_id: null,
+ id: 10364119169,
+ text: '#berlin #snow = #fail : ('
+ },
+ contributors_enabled: false,
+ following: null,
+ geo_enabled: false,
+ time_zone: 'Eastern Time (US & Canada)',
+ profile_sidebar_border_color: 'D9B17E',
+ url: 'http://debuggable.com',
+ verified: false,
+ location: 'Berlin',
+ profile_text_color: '333333',
+ notifications: null,
+ profile_background_image_url: 'http://s.twimg.com/a/1268354287/images/themes/theme8/bg.gif',
+ protected: false,
+ profile_link_color: '9D582E',
+ followers_count: 840,
+ name: 'Felix Geisend\u00f6rfer',
+ profile_background_tile: false,
+ id: 9599342,
+ lang: 'en',
+ utc_offset: -18000,
+ friends_count: 450,
+ profile_background_color: '8B542B',
+ profile_image_url: 'http://a3.twimg.com/profile_images/107142257/passbild-square_normal.jpg'
+ };
+
+ const collection = await db.createCollection(
+ 'test_should_correctly_insert_unicode_containing_document'
+ );
+ doc['_id'] = 'felixge';
+
+ await collection.insertOne(doc, { writeConcern: { w: 1 } });
+ const document = await collection.findOne();
+ test.equal('felixge', document._id);
+ });
+
+ it('should correctly insert unicode characters', async function () {
+ const db = client.db(this.configuration.db);
+ const collection = await db.createCollection('unicode_test_collection');
+ const test_strings = ['ouooueauiOUOOUEAUI', 'öüóőúéáűíÖÜÓŐÚÉÁŰÍ', '本荘由利地域に洪水警報'];
+ await collection.insertOne({ id: 0, text: test_strings[0] }, { writeConcern: { w: 1 } });
+ await collection.insertOne({ id: 1, text: test_strings[1] }, { writeConcern: { w: 1 } });
+
+ const documents = await collection.find().toArray();
+ expect(documents[0]).property('text').to.equal(test_strings[documents[0].id]);
+ expect(documents[1]).property('text').to.equal(test_strings[documents[1].id]);
+ });
+
+ it('should create object with Chinese object name', async function () {
+ const object = { 客家话: 'Hello' };
+
+ const configuration = this.configuration;
+ const db = client.db(configuration.db);
+ await db.createCollection('create_object_with_chinese_object_name');
+ const collection = db.collection('create_object_with_chinese_object_name');
+ await collection.insertOne(object, { writeConcern: { w: 1 } });
+ const item = await collection.findOne();
+ test.equal(object['客家话'], item['客家话']);
+
+ const items = await collection.find().toArray();
+ test.equal(object['客家话'], items[0]['客家话']);
+ });
+
+ it('should correctly handle UTF8 key names', async function () {
+ const configuration = this.configuration;
+ const db = client.db(configuration.db);
+ const collection = await db.createCollection('test_utf8_key_name');
+ await collection.insertOne({ šđžčćŠĐŽČĆ: 1 }, { writeConcern: { w: 1 } });
+ const items = await collection.find({}).project({ šđžčćŠĐŽČĆ: 1 }).toArray();
+ test.equal(1, items[0]['šđžčćŠĐŽČĆ']);
+ });
+});