15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)define([ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "gin/test/expect", 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "mojo/public/js/bindings/core", 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "gc", 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ], function(expect, core, gc) { 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) runWithMessagePipe(testNop); 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) runWithMessagePipe(testReadAndWriteMessage); 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runWithMessagePipeWithOptions(testNop); 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runWithMessagePipeWithOptions(testReadAndWriteMessage); 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) runWithDataPipe(testNop); 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) runWithDataPipe(testReadAndWriteDataPipe); 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runWithDataPipeWithOptions(testNop); 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runWithDataPipeWithOptions(testReadAndWriteDataPipe); 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gc.collectGarbage(); // should not crash 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this.result = "PASS"; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) function runWithMessagePipe(test) { 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var pipe = core.createMessagePipe(); 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(pipe.result).toBe(core.RESULT_OK); 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test(pipe); 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(core.close(pipe.handle0)).toBe(core.RESULT_OK); 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(core.close(pipe.handle1)).toBe(core.RESULT_OK); 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch function runWithMessagePipeWithOptions(test) { 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch var pipe = core.createMessagePipe({ 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch flags: core.CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(pipe.result).toBe(core.RESULT_OK); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test(pipe); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(core.close(pipe.handle0)).toBe(core.RESULT_OK); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(core.close(pipe.handle1)).toBe(core.RESULT_OK); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) function runWithDataPipe(test) { 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch var pipe = core.createDataPipe(); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(pipe.result).toBe(core.RESULT_OK); 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test(pipe); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(core.close(pipe.producerHandle)).toBe(core.RESULT_OK); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expect(core.close(pipe.consumerHandle)).toBe(core.RESULT_OK); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch function runWithDataPipeWithOptions(test) { 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) var pipe = core.createDataPipe({ 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) elementNumBytes: 1, 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) capacityNumBytes: 64 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }); 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(pipe.result).toBe(core.RESULT_OK); 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test(pipe); 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(core.close(pipe.producerHandle)).toBe(core.RESULT_OK); 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(core.close(pipe.consumerHandle)).toBe(core.RESULT_OK); 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) function testNop(pipe) { 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) function testReadAndWriteMessage(pipe) { 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var senderData = new Uint8Array(42); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (var i = 0; i < senderData.length; ++i) { 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) senderData[i] = i * i; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var result = core.writeMessage( 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pipe.handle0, senderData, [], 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) core.WRITE_MESSAGE_FLAG_NONE); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(result).toBe(core.RESULT_OK); 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var read = core.readMessage( 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pipe.handle1, core.READ_MESSAGE_FLAG_NONE); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(read.result).toBe(core.RESULT_OK); 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(read.buffer.byteLength).toBe(42); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(read.handles.length).toBe(0); 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var memory = new Uint8Array(read.buffer); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (var i = 0; i < memory.length; ++i) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect(memory[i]).toBe((i * i) & 0xFF); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) function testReadAndWriteDataPipe(pipe) { 9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) var senderData = new Uint8Array(42); 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (var i = 0; i < senderData.length; ++i) { 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) senderData[i] = i * i; 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) var write = core.writeData( 10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pipe.producerHandle, senderData, 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) core.WRITE_DATA_FLAG_ALL_OR_NONE); 10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(write.result).toBe(core.RESULT_OK); 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(write.numBytes).toBe(42); 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) var read = core.readData( 10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pipe.consumerHandle, core.READ_DATA_FLAG_ALL_OR_NONE); 10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(read.result).toBe(core.RESULT_OK); 11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(read.buffer.byteLength).toBe(42); 11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) var memory = new Uint8Array(read.buffer); 11423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (var i = 0; i < memory.length; ++i) 11523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) expect(memory[i]).toBe((i * i) & 0xFF); 11623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 11723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}); 119