assertNull( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertNull( $cache->get( $keyR2U2 ) ); $this->assertNull( $cache->get( $keyR2U2P ) ); $this->assertNull( $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set a request block to absent $cache->set( $keyR1U1, false ); $this->assertFalse( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertNull( $cache->get( $keyR2U2 ) ); $this->assertNull( $cache->get( $keyR2U2P ) ); $this->assertNull( $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set another request block with a different request $cache->set( $keyR2U1, $block1 ); $this->assertNull( $cache->get( $keyR1U1 ) ); $this->assertSame( $block1, $cache->get( $keyR2U1 ) ); $this->assertNull( $cache->get( $keyR2U2 ) ); $this->assertNull( $cache->get( $keyR2U2P ) ); $this->assertNull( $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set another request block with a different user $cache->set( $keyR2U2, $block2 ); $this->assertNull( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertSame( $block2, $cache->get( $keyR2U2 ) ); $this->assertNull( $cache->get( $keyR2U2P ) ); $this->assertNull( $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set another request block with a different fromPrimary flag $cache->set( $keyR2U2P, $block3 ); $this->assertNull( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2P ) ); $this->assertNull( $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set a user block with no request $cache->set( $keyU1, $block4 ); $this->assertNull( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2P ) ); $this->assertSame( $block4, $cache->get( $keyU1 ) ); $this->assertNull( $cache->get( $keyA1 ) ); // Set an anonymous block with no request $cache->set( $keyA1, $block5 ); $this->assertNull( $cache->get( $keyR1U1 ) ); $this->assertNull( $cache->get( $keyR2U1 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2 ) ); $this->assertSame( $block3, $cache->get( $keyR2U2P ) ); $this->assertSame( $block4, $cache->get( $keyU1 ) ); $this->assertSame( $block5, $cache->get( $keyA1 ) ); // The weak reference causes the request cache entry to disappear when // the request is destroyed $req2 = null; $this->assertNull( $cache->get( $keyR2U2P ) ); // An non-request block does not match a destroyed weak reference $this->assertNull( $cache->get( $keyU2P ) ); } }