public function testGetAttributeBitCalculation()
 {
     $model = new PageModel();
     $model->virtualAttributes = ['show_in_menu' => 'bitmask:visibility,1', 'show_in_aside_menu' => 'bitmask:visibility,2', 'show_in_search' => 'bitmask:visibility,4', 'show_in_api' => 'bitmask:visibility,8'];
     Dispatcher::extend('bitmask', function ($bitKey, $bitName) {
         return new BitMaskAttribute($bitKey, $bitName);
     });
     $model->visibility = 0;
     $this->assertFalse($model->show_in_menu);
     $this->assertFalse($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertFalse($model->show_in_api);
     $model->show_in_menu = true;
     $this->assertTrue($model->show_in_menu);
     $this->assertFalse($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertFalse($model->show_in_api);
     $this->assertEquals(1, $model->visibility);
     $model->show_in_aside_menu = true;
     $this->assertTrue($model->show_in_menu);
     $this->assertTrue($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertFalse($model->show_in_api);
     $this->assertEquals(3, $model->visibility);
     $model->show_in_api = true;
     $this->assertTrue($model->show_in_menu);
     $this->assertTrue($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertTrue($model->show_in_api);
     $this->assertEquals(11, $model->visibility);
     $model->show_in_api = false;
     $this->assertTrue($model->show_in_menu);
     $this->assertTrue($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertFalse($model->show_in_api);
     $this->assertEquals(3, $model->visibility);
     $model->show_in_menu = false;
     $this->assertFalse($model->show_in_menu);
     $this->assertTrue($model->show_in_aside_menu);
     $this->assertFalse($model->show_in_search);
     $this->assertFalse($model->show_in_api);
     $this->assertEquals(2, $model->visibility);
 }
 protected function registerSiteTreeModel()
 {
     $pageClass = $this->app['config']->get('cmsable.page_model');
     AttributeDispatcher::extend('bitmask', function ($bitKey, $bitName) {
         return new BitMaskAttribute($bitKey, $bitName);
     });
     $pageClass = $pageClass ?: 'Cmsable\\Model\\Page';
     $this->app->bind('Cmsable\\Model\\SiteTreeModelInterface', function ($app) use($pageClass) {
         return $app->make('Cmsable\\Model\\AdjacencyListSiteTreeModel', [$pageClass]);
     });
 }