diff --git a/assembly/test_decoder.ts b/assembly/test_decoder.ts index 5317922..78d46f5 100644 --- a/assembly/test_decoder.ts +++ b/assembly/test_decoder.ts @@ -40,10 +40,8 @@ export function decode(data: string): Value { return res; } -export function decodeRainCBOR_test(): bool { +export function decodeRainCBOR_test(rainSequenceEncoded: string): bool { // Use: https://cbor.me/ - const rainSequenceEncoded = - "A3004411223344011BFFC21BBF86CC199B02706170706C69636174696F6E2F63626F72A3004412345678011BFFE5FFB4A3FF2CDE02706170706C69636174696F6E2F6A736F6E"; const buff = stringToArrayBuffer(rainSequenceEncoded); const decoder = new CBORDecoder(buff); const res = decoder.parse(); @@ -465,3 +463,11 @@ export function decodeAllInArray(): boolean { bytesResult ); } + +export function decodeRandomString(dataStr:string): string { + const buff = stringToArrayBuffer(dataStr); + + const decoder = new CBORDecoder(buff); + const res = decoder.parse(); + return res.toString(); +} diff --git a/assembly/test_encoder.ts b/assembly/test_encoder.ts index eefca67..88aabf9 100644 --- a/assembly/test_encoder.ts +++ b/assembly/test_encoder.ts @@ -1,6 +1,6 @@ import { CBOREncoder } from "./encoder"; -export function encodeRainDocument(): ArrayBuffer { +export function encodeRainDocument(dataStr:string): ArrayBuffer { const encoder = new CBOREncoder(); encoder.addObject(3); @@ -9,10 +9,9 @@ export function encodeRainDocument(): ArrayBuffer { // h'11223344' = [28, 74, 54,020] const arr: u8[] = []; - const bytes = "11223344"; let lengthBytes = 0; - for (let i = 0; i < bytes.length; i += 2) { - const byte = bytes.substr(i, 2); + for (let i = 0; i < dataStr.length; i += 2) { + const byte = dataStr.substr(i, 2); const value = parseInt(byte, 16); arr.push(u8(value)); lengthBytes += 1; diff --git a/tests/decoding.test.js b/tests/decoding.test.js index 44c086d..26837b6 100644 --- a/tests/decoding.test.js +++ b/tests/decoding.test.js @@ -11,11 +11,11 @@ import { decodeObject, decodeArrayU8, decodeArray, - decodeAllInArray, decodeBytes, - decodeAllInObj, - decodeNestedObjs, + decodeRainCBOR_test, decodeArrayInArray, + decode, + decode_assertError, } from "../build/debug.js"; let result; @@ -73,6 +73,18 @@ describe("Decoding", () => { result = decodeObject() assert.equal(result, true); }) + it("Test decode function", () => { + result = decode("0x010101") + assert.deepEqual(result, {}); + }) + it("Test decodeRainCBOR_test function", () => { + result = decodeRainCBOR_test("A3004411223344011BFFC21BBF86CC199B02706170706C69636174696F6E2F63626F72A3004412345678011BFFE5FFB4A3FF2CDE02706170706C69636174696F6E2F6A736F6E") + assert.deepEqual(result, true); + }) + it("Test decode_assertError function when error", () => { + result = decode_assertError("0101") + assert.equal(result, false); + }) }) // diff --git a/tests/encoding.test.js b/tests/encoding.test.js index 9bf2d43..2be411f 100644 --- a/tests/encoding.test.js +++ b/tests/encoding.test.js @@ -41,8 +41,7 @@ let result; describe("Encoding", () => { it("Test encodeRainDocument function", () => { - result = encodeRainDocument(); - + result = encodeRainDocument("11223344"); assert.equal( "a3004411223344011bffc21bbf86cc199b02706170706c69636174696f6e2f63626f72", buf2hex(result) diff --git a/tests/rainCbor.test.js b/tests/rainCbor.test.js index afe1435..008ae8c 100644 --- a/tests/rainCbor.test.js +++ b/tests/rainCbor.test.js @@ -1,24 +1,53 @@ -import { strict as assert } from "assert"; +import {strict as assert} from "assert"; import { - decodeRainCBOR_test, - decode, - decode_assertError + decodeRainCBOR_test, + decode_assertError, + decodeRandomString, + decode } from "../build/debug.js"; describe("Rain Cbor", () => { - it("Test rain cbor", () => { + it("Test rain cbor", () => { - const result = decodeRainCBOR_test(); - assert.equal(result, true, "Failed when decoded a rain cbor sequence"); + const result = decodeRainCBOR_test("A3004411223344011BFFC21BBF86CC199B02706170706C69636174696F6E2F63626F72A3004412345678011BFFE5FFB4A3FF2CDE02706170706C69636174696F6E2F6A736F6E"); + assert.equal(result, true, "Failed when decoded a rain cbor sequence"); - decode("A3004412345678011BFFE5FFB4A3FF2CDE026474657874"); - decode("4f726465725f41"); - decode("6F726465725F61"); + }); - const resultError = decode_assertError( - "ffe5ffb4a3ff2cdea50058d08d91c10e82300c86df65672e9ae8c177c083315e8c31454a32031dd93ae34278778b828006f1b6a6fffeff6b7bac94a6d2b3539be793d112e4fb50a2daa824303a152982a2293d15c820350fdbf5e92dd81ade81a658548745af436b8d557554292043a1305ed232c81d46e3f014ef980e5a231848538b6e80e3503ed83ea6133441335e5eeae56a3df0f2c9152fdc9b758a3fcc3eb634b3a3afe5dc90b88d99bac314ee798a778eeffc03100bcdf16b06e3b94592b663608c3d43a273cd419472cc12022439f67699a70b6b43e2f800011bffe5ffb4a3ff2cde02706170706c69636174696f6e2f6a736f6e03676465666c6174650462656e" - ); - assert.equal(resultError, true); + it("Should return false for an invalid encoded rain sequence", () => { - }); + const resultError = decode_assertError( + "ffe5ffb4a3ff2cdea50058d08d91c10e82300c86df65672e9ae8c177c083315e8c31454a32031dd93ae34278778b828006f1b6a6fffeff6b7bac94a6d2b3539be793d112e4fb50a2daa824303a152982a2293d15c820350fdbf5e92dd81ade81a658548745af436b8d557554292043a1305ed232c81d46e3f014ef980e5a231848538b6e80e3503ed83ea6133441335e5eeae56a3df0f2c9152fdc9b758a3fcc3eb634b3a3afe5dc90b88d99bac314ee798a778eeffc03100bcdf16b06e3b94592b663608c3d43a273cd419472cc12022439f67699a70b6b43e2f800011bffe5ffb4a3ff2cde02706170706c69636174696f6e2f6a736f6e03676465666c6174650462656e" + ); + assert.equal(resultError, true); + + }); + it("Should returns error message for an invalid encoded rain sequence", () => { + + const result = decodeRandomString( + "ffe5ffb4a3ff2cdea50058d08d91c10e82300c86df65672e9ae8c177c083315e8c31454a32031dd93ae34278778b828006f1b6a6fffeff6b7bac94a6d2b3539be793d112e4fb50a2daa824303a152982a2293d15c820350fdbf5e92dd81ade81a658548745af436b8d557554292043a1305ed232c81d46e3f014ef980e5a231848538b6e80e3503ed83ea6133441335e5eeae56a3df0f2c9152fdc9b758a3fcc3eb634b3a3afe5dc90b88d99bac314ee798a778eeffc03100bcdf16b06e3b94592b663608c3d43a273cd419472cc12022439f67699a70b6b43e2f800011bffe5ffb4a3ff2cde02706170706c69636174696f6e2f6a736f6e03676465666c6174650462656e" + ); + assert.equal(result, 'DATA_BAD_FORMED'); + + }); + + it('should return false for an empty input string', () => { + const result = decodeRainCBOR_test(""); + assert.equal(result, false); + }); + + it('should return false for a non-CBOR encoded string', () => { + const result = decodeRainCBOR_test('this is not CBOR encoded'); + assert.equal(result, false); + }); + + it('should return "Data_Empty" if passed empty string', () => { + const result = decodeRandomString(''); + assert.equal(result, 'DATA_EMPTY'); + }); + + it('should check random string not cbor decoded', () => { + const result = decodeRandomString('Random not cbor-encoded string'); + assert.equal(result, '[0,0,0,0,0,12,11,0,14,12,NO_VALUE_0,13,0,0,0]'); + }); }); \ No newline at end of file