| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:typed_data'; | 5 import 'dart:typed_data'; |
| 6 import 'dart:mojo.core'; | |
| 7 | 6 |
| 8 import 'package:mojo/dart/testing/expect.dart'; | 7 import 'package:mojo/dart/testing/expect.dart'; |
| 8 import 'package:mojo/public/dart/core.dart'; |
| 9 | 9 |
| 10 invalidHandleTest() { | 10 invalidHandleTest() { |
| 11 MojoHandle invalidHandle = new MojoHandle(MojoHandle.INVALID); | 11 MojoHandle invalidHandle = new MojoHandle(MojoHandle.INVALID); |
| 12 | 12 |
| 13 // Close. | 13 // Close. |
| 14 MojoResult result = invalidHandle.close(); | 14 MojoResult result = invalidHandle.close(); |
| 15 Expect.isTrue(result.isInvalidArgument); | 15 Expect.isTrue(result.isInvalidArgument); |
| 16 | 16 |
| 17 // Wait. | 17 // Wait. |
| 18 MojoWaitResult mwr = invalidHandle.wait(MojoHandleSignals.kReadWrite, 1000000)
; | 18 MojoWaitResult mwr = |
| 19 invalidHandle.wait(MojoHandleSignals.kReadWrite, 1000000); |
| 19 Expect.isTrue(mwr.result.isInvalidArgument); | 20 Expect.isTrue(mwr.result.isInvalidArgument); |
| 20 | 21 |
| 21 MojoWaitManyResult mwmr = MojoHandle.waitMany([invalidHandle.h], | 22 MojoWaitManyResult mwmr = MojoHandle.waitMany([invalidHandle.h], [ |
| 22 [MojoHandleSignals.kReadWrite], | 23 MojoHandleSignals.kReadWrite |
| 23 MojoHandle.DEADLINE_INDEFINITE); | 24 ], MojoHandle.DEADLINE_INDEFINITE); |
| 24 Expect.isTrue(mwmr.result.isInvalidArgument); | 25 Expect.isTrue(mwmr.result.isInvalidArgument); |
| 25 | 26 |
| 26 // Message pipe. | 27 // Message pipe. |
| 27 MojoMessagePipe pipe = new MojoMessagePipe(); | 28 MojoMessagePipe pipe = new MojoMessagePipe(); |
| 28 Expect.isNotNull(pipe); | 29 Expect.isNotNull(pipe); |
| 29 ByteData bd = new ByteData(10); | 30 ByteData bd = new ByteData(10); |
| 30 pipe.endpoints[0].handle.close(); | 31 pipe.endpoints[0].handle.close(); |
| 31 pipe.endpoints[1].handle.close(); | 32 pipe.endpoints[1].handle.close(); |
| 32 result = pipe.endpoints[0].write(bd); | 33 result = pipe.endpoints[0].write(bd); |
| 33 Expect.isTrue(result.isInvalidArgument); | 34 Expect.isTrue(result.isInvalidArgument); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 MojoSharedBuffer duplicate = new MojoSharedBuffer.duplicate(sharedBuffer); | 67 MojoSharedBuffer duplicate = new MojoSharedBuffer.duplicate(sharedBuffer); |
| 67 Expect.isNull(duplicate); | 68 Expect.isNull(duplicate); |
| 68 | 69 |
| 69 sharedBuffer = new MojoSharedBuffer.create(10); | 70 sharedBuffer = new MojoSharedBuffer.create(10); |
| 70 Expect.isNotNull(sharedBuffer); | 71 Expect.isNotNull(sharedBuffer); |
| 71 sharedBuffer.close(); | 72 sharedBuffer.close(); |
| 72 result = sharedBuffer.map(0, 10); | 73 result = sharedBuffer.map(0, 10); |
| 73 Expect.isTrue(result.isInvalidArgument); | 74 Expect.isTrue(result.isInvalidArgument); |
| 74 } | 75 } |
| 75 | 76 |
| 76 | |
| 77 basicMessagePipeTest() { | 77 basicMessagePipeTest() { |
| 78 MojoMessagePipe pipe = new MojoMessagePipe(); | 78 MojoMessagePipe pipe = new MojoMessagePipe(); |
| 79 Expect.isNotNull(pipe); | 79 Expect.isNotNull(pipe); |
| 80 Expect.isTrue(pipe.status.isOk); | 80 Expect.isTrue(pipe.status.isOk); |
| 81 Expect.isNotNull(pipe.endpoints); | 81 Expect.isNotNull(pipe.endpoints); |
| 82 | 82 |
| 83 MojoMessagePipeEndpoint end0 = pipe.endpoints[0]; | 83 MojoMessagePipeEndpoint end0 = pipe.endpoints[0]; |
| 84 MojoMessagePipeEndpoint end1 = pipe.endpoints[1]; | 84 MojoMessagePipeEndpoint end1 = pipe.endpoints[1]; |
| 85 Expect.isTrue(end0.handle.isValid); | 85 Expect.isTrue(end0.handle.isValid); |
| 86 Expect.isTrue(end1.handle.isValid); | 86 Expect.isTrue(end1.handle.isValid); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 99 Expect.isTrue(end0.status.isShouldWait); | 99 Expect.isTrue(end0.status.isShouldWait); |
| 100 | 100 |
| 101 // Write end1. | 101 // Write end1. |
| 102 String hello = "hello"; | 102 String hello = "hello"; |
| 103 ByteData helloData = | 103 ByteData helloData = |
| 104 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); | 104 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); |
| 105 MojoResult result = end1.write(helloData); | 105 MojoResult result = end1.write(helloData); |
| 106 Expect.isTrue(result.isOk); | 106 Expect.isTrue(result.isOk); |
| 107 | 107 |
| 108 // end0 should now be readable. | 108 // end0 should now be readable. |
| 109 MojoWaitManyResult mwmr = MojoHandle.waitMany([end0.handle.h], | 109 MojoWaitManyResult mwmr = MojoHandle.waitMany([end0.handle.h], [ |
| 110 [MojoHandleSignals.kReadable], | 110 MojoHandleSignals.kReadable |
| 111 MojoHandle.DEADLINE_INDEFINITE); | 111 ], MojoHandle.DEADLINE_INDEFINITE); |
| 112 Expect.isTrue(mwmr.result.isOk); | 112 Expect.isTrue(mwmr.result.isOk); |
| 113 | 113 |
| 114 // Read from end0. | 114 // Read from end0. |
| 115 MojoMessagePipeReadResult readResult = end0.read(data); | 115 MojoMessagePipeReadResult readResult = end0.read(data); |
| 116 Expect.isNotNull(readResult); | 116 Expect.isNotNull(readResult); |
| 117 Expect.isTrue(readResult.status.isOk); | 117 Expect.isTrue(readResult.status.isOk); |
| 118 Expect.equals(readResult.bytesRead, helloData.lengthInBytes); | 118 Expect.equals(readResult.bytesRead, helloData.lengthInBytes); |
| 119 Expect.equals(readResult.handlesRead, 0); | 119 Expect.equals(readResult.handlesRead, 0); |
| 120 | 120 |
| 121 String hello_result = new String.fromCharCodes( | 121 String hello_result = new String.fromCharCodes( |
| 122 data.buffer.asUint8List().sublist(0, readResult.bytesRead).toList()); | 122 data.buffer.asUint8List().sublist(0, readResult.bytesRead).toList()); |
| 123 Expect.equals(hello_result, "hello"); | 123 Expect.equals(hello_result, "hello"); |
| 124 | 124 |
| 125 // end0 should no longer be readable. | 125 // end0 should no longer be readable. |
| 126 mwr = end0.handle.wait(MojoHandleSignals.kReadable, 10); | 126 mwr = end0.handle.wait(MojoHandleSignals.kReadable, 10); |
| 127 Expect.isTrue(mwr.result.isDeadlineExceeded); | 127 Expect.isTrue(mwr.result.isDeadlineExceeded); |
| 128 | 128 |
| 129 // Close end0's handle. | 129 // Close end0's handle. |
| 130 result = end0.handle.close(); | 130 result = end0.handle.close(); |
| 131 Expect.isTrue(result.isOk); | 131 Expect.isTrue(result.isOk); |
| 132 | 132 |
| 133 // end1 should no longer be readable or writable. | 133 // end1 should no longer be readable or writable. |
| 134 mwr = end1.handle.wait(MojoHandleSignals.kReadWrite, 1000); | 134 mwr = end1.handle.wait(MojoHandleSignals.kReadWrite, 1000); |
| 135 Expect.isTrue(mwr.result.isFailedPrecondition); | 135 Expect.isTrue(mwr.result.isFailedPrecondition); |
| 136 | 136 |
| 137 result = end1.handle.close(); | 137 result = end1.handle.close(); |
| 138 Expect.isTrue(result.isOk); | 138 Expect.isTrue(result.isOk); |
| 139 } | 139 } |
| 140 | 140 |
| 141 | |
| 142 basicDataPipeTest() { | 141 basicDataPipeTest() { |
| 143 MojoDataPipe pipe = new MojoDataPipe(); | 142 MojoDataPipe pipe = new MojoDataPipe(); |
| 144 Expect.isNotNull(pipe); | 143 Expect.isNotNull(pipe); |
| 145 Expect.isTrue(pipe.status.isOk); | 144 Expect.isTrue(pipe.status.isOk); |
| 146 Expect.isTrue(pipe.consumer.handle.isValid); | 145 Expect.isTrue(pipe.consumer.handle.isValid); |
| 147 Expect.isTrue(pipe.producer.handle.isValid); | 146 Expect.isTrue(pipe.producer.handle.isValid); |
| 148 | 147 |
| 149 MojoDataPipeProducer producer = pipe.producer; | 148 MojoDataPipeProducer producer = pipe.producer; |
| 150 MojoDataPipeConsumer consumer = pipe.consumer; | 149 MojoDataPipeConsumer consumer = pipe.consumer; |
| 151 Expect.isTrue(producer.handle.isValid); | 150 Expect.isTrue(producer.handle.isValid); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 172 // Write to producer. | 171 // Write to producer. |
| 173 String hello = "hello "; | 172 String hello = "hello "; |
| 174 ByteData helloData = | 173 ByteData helloData = |
| 175 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); | 174 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); |
| 176 int written = producer.write( | 175 int written = producer.write( |
| 177 helloData, helloData.lengthInBytes, MojoDataPipeProducer.FLAG_NONE); | 176 helloData, helloData.lengthInBytes, MojoDataPipeProducer.FLAG_NONE); |
| 178 Expect.isTrue(producer.status.isOk); | 177 Expect.isTrue(producer.status.isOk); |
| 179 Expect.equals(written, helloData.lengthInBytes); | 178 Expect.equals(written, helloData.lengthInBytes); |
| 180 | 179 |
| 181 // Now that we have written, the consumer should be readable. | 180 // Now that we have written, the consumer should be readable. |
| 182 MojoWaitManyResult mwmr = MojoHandle.waitMany([consumer.handle.h], | 181 MojoWaitManyResult mwmr = MojoHandle.waitMany([consumer.handle.h], [ |
| 183 [MojoHandleSignals.kReadable], | 182 MojoHandleSignals.kReadable |
| 184 MojoHandle.DEADLINE_INDEFINITE); | 183 ], MojoHandle.DEADLINE_INDEFINITE); |
| 185 Expect.isTrue(mwr.result.isOk); | 184 Expect.isTrue(mwr.result.isOk); |
| 186 | 185 |
| 187 // Do a two-phase write to the producer. | 186 // Do a two-phase write to the producer. |
| 188 ByteData twoPhaseWrite = producer.beginWrite( | 187 ByteData twoPhaseWrite = |
| 189 20, MojoDataPipeProducer.FLAG_NONE); | 188 producer.beginWrite(20, MojoDataPipeProducer.FLAG_NONE); |
| 190 Expect.isTrue(producer.status.isOk); | 189 Expect.isTrue(producer.status.isOk); |
| 191 Expect.isNotNull(twoPhaseWrite); | 190 Expect.isNotNull(twoPhaseWrite); |
| 192 Expect.isTrue(twoPhaseWrite.lengthInBytes >= 20); | 191 Expect.isTrue(twoPhaseWrite.lengthInBytes >= 20); |
| 193 | 192 |
| 194 String world = "world"; | 193 String world = "world"; |
| 195 twoPhaseWrite.buffer.asUint8List().setAll(0, world.codeUnits); | 194 twoPhaseWrite.buffer.asUint8List().setAll(0, world.codeUnits); |
| 196 producer.endWrite(Uint8List.BYTES_PER_ELEMENT * world.codeUnits.length); | 195 producer.endWrite(Uint8List.BYTES_PER_ELEMENT * world.codeUnits.length); |
| 197 Expect.isTrue(producer.status.isOk); | 196 Expect.isTrue(producer.status.isOk); |
| 198 | 197 |
| 199 // Read one character from consumer. | 198 // Read one character from consumer. |
| 200 int read = consumer.read(buffer, 1, MojoDataPipeConsumer.FLAG_NONE); | 199 int read = consumer.read(buffer, 1, MojoDataPipeConsumer.FLAG_NONE); |
| 201 Expect.isTrue(consumer.status.isOk); | 200 Expect.isTrue(consumer.status.isOk); |
| 202 Expect.equals(read, 1); | 201 Expect.equals(read, 1); |
| 203 | 202 |
| 204 // Close the producer. | 203 // Close the producer. |
| 205 MojoResult result = producer.handle.close(); | 204 MojoResult result = producer.handle.close(); |
| 206 Expect.isTrue(result.isOk); | 205 Expect.isTrue(result.isOk); |
| 207 | 206 |
| 208 // Consumer should still be readable. | 207 // Consumer should still be readable. |
| 209 mwr = consumer.handle.wait(MojoHandleSignals.kReadable, 0); | 208 mwr = consumer.handle.wait(MojoHandleSignals.kReadable, 0); |
| 210 Expect.isTrue(mwr.result.isOk); | 209 Expect.isTrue(mwr.result.isOk); |
| 211 | 210 |
| 212 // Get the number of remaining bytes. | 211 // Get the number of remaining bytes. |
| 213 int remaining = consumer.read( | 212 int remaining = consumer.read(null, 0, MojoDataPipeConsumer.FLAG_QUERY); |
| 214 null, 0, MojoDataPipeConsumer.FLAG_QUERY); | |
| 215 Expect.isTrue(consumer.status.isOk); | 213 Expect.isTrue(consumer.status.isOk); |
| 216 Expect.equals(remaining, "hello world".length - 1); | 214 Expect.equals(remaining, "hello world".length - 1); |
| 217 | 215 |
| 218 // Do a two-phase read. | 216 // Do a two-phase read. |
| 219 ByteData twoPhaseRead = consumer.beginRead( | 217 ByteData twoPhaseRead = |
| 220 remaining, MojoDataPipeConsumer.FLAG_NONE); | 218 consumer.beginRead(remaining, MojoDataPipeConsumer.FLAG_NONE); |
| 221 Expect.isTrue(consumer.status.isOk); | 219 Expect.isTrue(consumer.status.isOk); |
| 222 Expect.isNotNull(twoPhaseRead); | 220 Expect.isNotNull(twoPhaseRead); |
| 223 Expect.isTrue(twoPhaseRead.lengthInBytes <= remaining); | 221 Expect.isTrue(twoPhaseRead.lengthInBytes <= remaining); |
| 224 | 222 |
| 225 Uint8List uint8_list = buffer.buffer.asUint8List(); | 223 Uint8List uint8_list = buffer.buffer.asUint8List(); |
| 226 uint8_list.setAll(1, twoPhaseRead.buffer.asUint8List()); | 224 uint8_list.setAll(1, twoPhaseRead.buffer.asUint8List()); |
| 227 uint8_list = uint8_list.sublist(0, 1 + twoPhaseRead.lengthInBytes); | 225 uint8_list = uint8_list.sublist(0, 1 + twoPhaseRead.lengthInBytes); |
| 228 | 226 |
| 229 consumer.endRead(twoPhaseRead.lengthInBytes); | 227 consumer.endRead(twoPhaseRead.lengthInBytes); |
| 230 Expect.isTrue(consumer.status.isOk); | 228 Expect.isTrue(consumer.status.isOk); |
| 231 | 229 |
| 232 String helloWorld = new String.fromCharCodes( | 230 String helloWorld = new String.fromCharCodes(uint8_list.toList()); |
| 233 uint8_list.toList()); | |
| 234 Expect.equals("hello world", helloWorld); | 231 Expect.equals("hello world", helloWorld); |
| 235 | 232 |
| 236 result = consumer.handle.close(); | 233 result = consumer.handle.close(); |
| 237 Expect.isTrue(result.isOk); | 234 Expect.isTrue(result.isOk); |
| 238 } | 235 } |
| 239 | 236 |
| 240 | |
| 241 basicSharedBufferTest() { | 237 basicSharedBufferTest() { |
| 242 MojoSharedBuffer mojoBuffer = new MojoSharedBuffer.create( | 238 MojoSharedBuffer mojoBuffer = |
| 243 100, MojoSharedBuffer.CREATE_FLAG_NONE); | 239 new MojoSharedBuffer.create(100, MojoSharedBuffer.CREATE_FLAG_NONE); |
| 244 Expect.isNotNull(mojoBuffer); | 240 Expect.isNotNull(mojoBuffer); |
| 245 Expect.isNotNull(mojoBuffer.status); | 241 Expect.isNotNull(mojoBuffer.status); |
| 246 Expect.isTrue(mojoBuffer.status.isOk); | 242 Expect.isTrue(mojoBuffer.status.isOk); |
| 247 Expect.isNotNull(mojoBuffer.handle); | 243 Expect.isNotNull(mojoBuffer.handle); |
| 248 Expect.isTrue(mojoBuffer.handle is MojoHandle); | 244 Expect.isTrue(mojoBuffer.handle is MojoHandle); |
| 249 Expect.isTrue(mojoBuffer.handle.isValid); | 245 Expect.isTrue(mojoBuffer.handle.isValid); |
| 250 | 246 |
| 251 mojoBuffer.map(0, 100, MojoSharedBuffer.MAP_FLAG_NONE); | 247 mojoBuffer.map(0, 100, MojoSharedBuffer.MAP_FLAG_NONE); |
| 252 Expect.isNotNull(mojoBuffer.status); | 248 Expect.isNotNull(mojoBuffer.status); |
| 253 Expect.isTrue(mojoBuffer.status.isOk); | 249 Expect.isTrue(mojoBuffer.status.isOk); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 | 286 |
| 291 duplicate.unmap(); | 287 duplicate.unmap(); |
| 292 Expect.isNotNull(duplicate.status); | 288 Expect.isNotNull(duplicate.status); |
| 293 Expect.isTrue(duplicate.status.isOk); | 289 Expect.isTrue(duplicate.status.isOk); |
| 294 Expect.isNull(duplicate.mapping); | 290 Expect.isNull(duplicate.mapping); |
| 295 | 291 |
| 296 duplicate.close(); | 292 duplicate.close(); |
| 297 duplicate = null; | 293 duplicate = null; |
| 298 } | 294 } |
| 299 | 295 |
| 300 | |
| 301 main() { | 296 main() { |
| 302 invalidHandleTest(); | 297 invalidHandleTest(); |
| 303 basicMessagePipeTest(); | 298 basicMessagePipeTest(); |
| 304 basicDataPipeTest(); | 299 basicDataPipeTest(); |
| 305 basicSharedBufferTest(); | 300 basicSharedBufferTest(); |
| 306 } | 301 } |
| OLD | NEW |