Explorar o código

LoaderUtils: Fix for multibyte characters in decodeText().

Don McCurdy %!s(int64=7) %!d(string=hai) anos
pai
achega
20e0f8510e

+ 2 - 1
src/loaders/LoaderUtils.js

@@ -24,7 +24,8 @@ var LoaderUtils = {
 
 		}
 
-		return s;
+		// Merges multi-byte utf-8 characters.
+		return decodeURIComponent( escape( s ) );
 
 	},
 

+ 1 - 0
test/three.source.unit.js

@@ -162,6 +162,7 @@ import './unit/src/loaders/FontLoader.tests';
 import './unit/src/loaders/ImageLoader.tests';
 import './unit/src/loaders/JSONLoader.tests';
 import './unit/src/loaders/Loader.tests';
+import './unit/src/loaders/LoaderUtils.tests';
 import './unit/src/loaders/LoadingManager.tests';
 import './unit/src/loaders/MaterialLoader.tests';
 import './unit/src/loaders/ObjectLoader.tests';

+ 0 - 6
test/unit/src/loaders/Loader.tests.js

@@ -30,12 +30,6 @@ export default QUnit.module( 'Loaders', () => {
 		} );
 
 		// PUBLIC STUFF
-		QUnit.todo( "extractUrlBase", ( assert ) => {
-
-			assert.ok( false, "everything's gonna be alright" );
-
-		} );
-
 		QUnit.todo( "initMaterials", ( assert ) => {
 
 			assert.ok( false, "everything's gonna be alright" );

+ 31 - 0
test/unit/src/loaders/LoaderUtils.tests.js

@@ -0,0 +1,31 @@
+/**
+ * @author Don McCurdy / https://www.donmccurdy.com
+ */
+/* global QUnit */
+
+import { LoaderUtils } from '../../../../src/loaders/LoaderUtils';
+
+export default QUnit.module( 'Loaders', () => {
+
+  QUnit.module( 'LoaderUtils', () => {
+
+    // INSTANCING
+    QUnit.test( 'decodeText', ( assert ) => {
+
+      var jsonArray = new Uint8Array( [123, 34, 106, 115, 111, 110, 34, 58, 32, 116, 114, 117, 101, 125] );
+      assert.equal( '{"json": true}', LoaderUtils.decodeText( jsonArray ) );
+
+      var multibyteArray = new Uint8Array( [ 230, 151, 165, 230, 156, 172, 229, 155, 189 ] );
+      assert.equal( '日本国', LoaderUtils.decodeText( multibyteArray ) );
+
+    } );
+
+    QUnit.test( 'extractUrlBase', ( assert ) => {
+
+      assert.equal( '/path/to/', LoaderUtils.extractUrlBase( '/path/to/model.glb' ) );
+
+    } );
+
+  } );
+
+} );