| Index: runtime/vm/port_test.cc
 | 
| ===================================================================
 | 
| --- runtime/vm/port_test.cc	(revision 1904)
 | 
| +++ runtime/vm/port_test.cc	(working copy)
 | 
| @@ -10,7 +10,25 @@
 | 
|  
 | 
|  namespace dart {
 | 
|  
 | 
| +// Provides private access to PortMap for testing.
 | 
| +class PortMapTestPeer {
 | 
| + public:
 | 
| +  static bool IsActivePort(Dart_Port port) {
 | 
| +    MutexLocker ml(PortMap::mutex_);
 | 
| +    return (PortMap::FindPort(port) >= 0);
 | 
| +  }
 | 
|  
 | 
| +  static bool IsLivePort(Dart_Port port) {
 | 
| +    MutexLocker ml(PortMap::mutex_);
 | 
| +    intptr_t index = PortMap::FindPort(port);
 | 
| +    if (index < 0) {
 | 
| +      return false;
 | 
| +    }
 | 
| +    return PortMap::map_[index].live;
 | 
| +  }
 | 
| +};
 | 
| +
 | 
| +
 | 
|  // Intercept the post message callback and just store a copy of the message.
 | 
|  static const int kMaxSavedMsg = 80;
 | 
|  static char saved_msg[kMaxSavedMsg];
 | 
| @@ -45,10 +63,10 @@
 | 
|    InitPortMapTest();
 | 
|    intptr_t port = PortMap::CreatePort();
 | 
|    EXPECT_NE(0, port);
 | 
| -  EXPECT(PortMap::IsActivePort(port));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port));
 | 
|  
 | 
|    PortMap::ClosePort(port);
 | 
| -  EXPECT(!PortMap::IsActivePort(port));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port));
 | 
|  
 | 
|    // Embedder was notified of port closure.
 | 
|    EXPECT_EQ(port, saved_port);
 | 
| @@ -59,20 +77,20 @@
 | 
|    InitPortMapTest();
 | 
|    Dart_Port port1 = PortMap::CreatePort();
 | 
|    Dart_Port port2 = PortMap::CreatePort();
 | 
| -  EXPECT(PortMap::IsActivePort(port1));
 | 
| -  EXPECT(PortMap::IsActivePort(port2));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port1));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port2));
 | 
|  
 | 
|    // Uniqueness.
 | 
|    EXPECT_NE(port1, port2);
 | 
|  
 | 
|    PortMap::ClosePort(port1);
 | 
| -  EXPECT(!PortMap::IsActivePort(port1));
 | 
| -  EXPECT(PortMap::IsActivePort(port2));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port1));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port2));
 | 
|    EXPECT_EQ(port1, saved_port);
 | 
|  
 | 
|    PortMap::ClosePort(port2);
 | 
| -  EXPECT(!PortMap::IsActivePort(port1));
 | 
| -  EXPECT(!PortMap::IsActivePort(port2));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port1));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port2));
 | 
|    EXPECT_EQ(port2, saved_port);
 | 
|  }
 | 
|  
 | 
| @@ -81,13 +99,13 @@
 | 
|    InitPortMapTest();
 | 
|    Dart_Port port1 = PortMap::CreatePort();
 | 
|    Dart_Port port2 = PortMap::CreatePort();
 | 
| -  EXPECT(PortMap::IsActivePort(port1));
 | 
| -  EXPECT(PortMap::IsActivePort(port2));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port1));
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port2));
 | 
|  
 | 
|    // Close all ports at once.
 | 
|    PortMap::ClosePorts();
 | 
| -  EXPECT(!PortMap::IsActivePort(port1));
 | 
| -  EXPECT(!PortMap::IsActivePort(port2));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port1));
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port2));
 | 
|  
 | 
|    // Embedder is notified to close all ports as well.
 | 
|    EXPECT_EQ(kCloseAllPorts, saved_port);
 | 
| @@ -98,13 +116,33 @@
 | 
|    InitPortMapTest();
 | 
|    for (int i = 0; i < 32; i++) {
 | 
|      Dart_Port port = PortMap::CreatePort();
 | 
| -    EXPECT(PortMap::IsActivePort(port));
 | 
| +    EXPECT(PortMapTestPeer::IsActivePort(port));
 | 
|      PortMap::ClosePort(port);
 | 
| -    EXPECT(!PortMap::IsActivePort(port));
 | 
| +    EXPECT(!PortMapTestPeer::IsActivePort(port));
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  
 | 
| +TEST_CASE(PortMap_SetLive) {
 | 
| +  InitPortMapTest();
 | 
| +  intptr_t port = PortMap::CreatePort();
 | 
| +  EXPECT_NE(0, port);
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port));
 | 
| +  EXPECT(!PortMapTestPeer::IsLivePort(port));
 | 
| +
 | 
| +  PortMap::SetLive(port);
 | 
| +  EXPECT(PortMapTestPeer::IsActivePort(port));
 | 
| +  EXPECT(PortMapTestPeer::IsLivePort(port));
 | 
| +
 | 
| +  PortMap::ClosePort(port);
 | 
| +  EXPECT(!PortMapTestPeer::IsActivePort(port));
 | 
| +  EXPECT(!PortMapTestPeer::IsLivePort(port));
 | 
| +
 | 
| +  // Embedder was notified of port closure.
 | 
| +  EXPECT_EQ(port, saved_port);
 | 
| +}
 | 
| +
 | 
| +
 | 
|  TEST_CASE(PortMap_PostMessage) {
 | 
|    InitPortMapTest();
 | 
|    Dart_Port port = PortMap::CreatePort();
 | 
| 
 |