/**
  * @return WebElementProxy
  * @dataProvider proxyDataProvider
  */
 public function testProxyWebElement($element_class, $proxy_class)
 {
     $search_context = m::mock('\\aik099\\QATools\\PageObject\\ISearchContext');
     $this->locator->shouldReceive('getSearchContext')->andReturn($search_context);
     $node_element = $this->createNodeElement();
     $this->locator->shouldReceive('findAll')->andReturn(array($node_element));
     $this->property->shouldReceive('isSimpleDataType')->andReturn(false);
     $this->property->shouldReceive('getDataType')->andReturn($element_class);
     $proxy = $this->decorator->decorate($this->property);
     $this->assertProxy($proxy, $proxy_class, $search_context, $element_class);
     $this->assertEquals($node_element->getXpath(), $proxy->getXpath());
     return $proxy;
 }
 /**
  * Initializes fields within given search context.
  *
  * @param ISearchContext     $search_context     Search context.
  * @param IPropertyDecorator $property_decorator Property decorator.
  *
  * @return self
  */
 protected function proxyFields(ISearchContext $search_context, IPropertyDecorator $property_decorator)
 {
     foreach ($this->getProperties($search_context) as $property) {
         $proxy = $property_decorator->decorate($property);
         if ($proxy !== null) {
             $property->setAccessible(true);
             $property->setValue($search_context, $proxy);
         }
     }
     return $this;
 }