Raw isAscii & toUtf8 (#2413)

* Raw isAscii & toUtf8

* Tests for isAscii & toUtf8

* Cleanup return types
This commit is contained in:
Jaco Greeff
2020-07-08 14:46:12 +02:00
committed by GitHub
parent 63483b9db7
commit e9489d41cb
14 changed files with 176 additions and 145 deletions
+3 -3
View File
@@ -28,15 +28,15 @@
"dependencies": {
"@babel/runtime": "^7.10.4",
"@polkadot/metadata": "1.23.1",
"@polkadot/util": "^2.17.1",
"@polkadot/util-crypto": "^2.17.1",
"@polkadot/util": "^2.18.0-beta.1",
"@polkadot/util-crypto": "^2.18.0-beta.1",
"@types/bn.js": "^4.11.6",
"bn.js": "^5.1.2",
"memoizee": "^0.4.14",
"rxjs": "^6.6.0"
},
"devDependencies": {
"@polkadot/keyring": "^2.17.1",
"@polkadot/keyring": "^2.18.0-beta.1",
"@types/memoizee": "^0.4.4"
}
}
+11 -1
View File
@@ -23,7 +23,7 @@ const testEncode = (to: CodecTo, expected: any): void =>
expect(e[to]()).toEqual(expected);
});
describe('U8a', (): void => {
describe('Raw', (): void => {
let u8a: Raw;
beforeEach((): void => {
@@ -74,5 +74,15 @@ describe('U8a', (): void => {
it('compares against hex inputs', (): void => {
expect(u8a.eq('0x0102030405')).toBe(true);
});
it('has valid isAscii', (): void => {
expect(u8a.isAscii).toBe(false);
expect(new Raw(registry, '0x2021222324').isAscii).toBe(true);
});
it('has valid toUtf8', (): void => {
expect(new Raw(registry, 'Приветствую, ми').toUtf8()).toEqual('Приветствую, ми');
expect(new Raw(registry, '0xe4bda0e5a5bd').toUtf8()).toEqual('你好');
});
});
});
+17 -3
View File
@@ -5,7 +5,7 @@
import { H256 } from '../interfaces/runtime';
import { AnyJson, AnyU8a, IU8a, Registry } from '../types';
import { isU8a, isUndefined, u8aToHex, u8aToU8a } from '@polkadot/util';
import { isAscii, isU8a, isUndefined, u8aToHex, u8aToString, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
/** @internal */
@@ -49,11 +49,18 @@ export default class Raw extends Uint8Array implements IU8a {
return new Raw(this.registry, blake2AsU8a(this.toU8a(), 256));
}
/**
* @description Returns true if the wrapped value contains only ASCII printable characters
*/
public get isAscii (): boolean {
return isAscii(this);
}
/**
* @description Returns true if the type wraps an empty/default all-0 value
*/
public get isEmpty (): boolean {
return !this.length || isUndefined(this.find((value): boolean => !!value));
return !this.length || isUndefined(this.find((value) => !!value));
}
/**
@@ -77,7 +84,7 @@ export default class Raw extends Uint8Array implements IU8a {
public eq (other?: unknown): boolean {
if (other instanceof Uint8Array) {
return (this.length === other.length) &&
!this.some((value, index): boolean => value !== other[index]);
!this.some((value, index) => value !== other[index]);
}
return this.eq(decodeU8a(other));
@@ -135,4 +142,11 @@ export default class Raw extends Uint8Array implements IU8a {
public toU8a (isBare?: boolean): Uint8Array {
return Uint8Array.from(this);
}
/**
* @description Returns the wrapped data as a UTF-8 string
*/
public toUtf8 (): string {
return u8aToString(this);
}
}