예제 #1
0
 /**
  * Pushes a segment for the current navigation property being written out.
  * Note: Refer 'ObjectModelSerializerNotes.txt' for more details about
  * 'Segment Stack' and this method.
  * Note: Calls to this method should be balanced with calls to popSegment.
  *
  * @param ResourceProperty &$resourceProperty Current navigation property 
  *                                            being written out
  *
  * @return true if a segment was pushed, false otherwise
  *
  * @throws InvalidOperationException If this function invoked with non-navigation
  *                                   property instance.
  */
 private function _pushSegmentForNavigationProperty(ResourceProperty &$resourceProperty)
 {
     if ($resourceProperty->getTypeKind() == ResourceTypeKind::ENTITY) {
         $this->assert(!empty($this->_segmentNames), '!is_empty($this->_segmentNames');
         $currentResourceSetWrapper = $this->_getCurrentResourceSetWrapper();
         $currentResourceType = $currentResourceSetWrapper->getResourceType();
         $currentResourceSetWrapper = $this->_dataService->getMetadataQueryProviderWrapper()->getResourceSetWrapperForNavigationProperty($currentResourceSetWrapper, $currentResourceType, $resourceProperty);
         $this->assert(!is_null($currentResourceSetWrapper), '!null($currentResourceSetWrapper)');
         return $this->_pushSegment($resourceProperty->getName(), $currentResourceSetWrapper);
     } else {
         throw new InvalidOperationException('pushSegmentForNavigationProperty should not be called with non-entity type');
     }
 }
예제 #2
0
 public function testResourceProperty()
 {
     try {
         $addressResType = new ResourceType(new ReflectionClass('Address2'), ResourceTypeKind::COMPLEX, 'Address', 'Northwind');
         $booleanResourcetype = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::BOOLEAN);
         $isPrimaryPrimProperty = new ResourceProperty('IsPrimary', null, ResourcePropertyKind::PRIMITIVE, $booleanResourcetype);
         $addressResType->addProperty($isPrimaryPrimProperty);
         $exceptionThrown = false;
         try {
             $addressComplexProperty = new ResourceProperty('Address', null, ResourcePropertyKind::COMPLEX_TYPE | ResourcePropertyKind::KEY, $addressResType);
         } catch (\InvalidArgumentException $exception) {
             $exceptionThrown = true;
             $this->AssertStringEndsWith('not a valid ResourcePropertyKind enum value or valid combination of ResourcePropertyKind enum values', $exception->getMessage());
         }
         if (!$exceptionThrown) {
             $this->fail('An expected InvalidArgumentException for \'invalid ResourcePropertyKind\' has not been raised');
         }
         $exceptionThrown = false;
         try {
             $stringResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::STRING);
             $addressComplexProperty = new ResourceProperty('Address', null, ResourcePropertyKind::COMPLEX_TYPE, $stringResourceType);
         } catch (\InvalidArgumentException $exception) {
             $exceptionThrown = true;
             $this->AssertStringStartsWith('The \'$kind\' parameter does not match with the type of the resource type', $exception->getMessage());
         }
         if (!$exceptionThrown) {
             $this->fail('An expected InvalidArgumentException for \'Property and ResourceType kind mismatch\' has not been raised');
         }
         $customerResType = new ResourceType(new ReflectionClass('Customer2'), ResourceTypeKind::ENTITY, 'Customer', 'Northwind');
         $stringResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::STRING);
         $customerIDPrimProperty = new ResourceProperty('CustomerID', null, ResourcePropertyKind::PRIMITIVE | ResourcePropertyKind::KEY, $stringResourceType);
         $customerNamePrimProperty = new ResourceProperty('CustomerName', null, ResourcePropertyKind::PRIMITIVE, $stringResourceType);
         $intResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::INT32);
         $ratingPrimProperty = new ResourceProperty('Rating', null, ResourcePropertyKind::PRIMITIVE, $intResourceType);
         $customerResType->addProperty($customerIDPrimProperty);
         $customerResType->addProperty($customerNamePrimProperty);
         $customerResType->addProperty($ratingPrimProperty);
         $this->AssertTrue($customerIDPrimProperty->isKindOf(ResourcePropertyKind::KEY));
         $this->AssertTrue($customerIDPrimProperty->isKindOf(ResourcePropertyKind::PRIMITIVE));
         $customerReferenceSetProperty = new ResourceProperty('Customers', null, ResourcePropertyKind::RESOURCESET_REFERENCE, $customerResType);
         $this->AssertEquals($customerReferenceSetProperty->getName(), 'Customers');
         $this->AssertEquals($customerReferenceSetProperty->getKind(), ResourcePropertyKind::RESOURCESET_REFERENCE);
         $this->AssertEquals($customerReferenceSetProperty->getInstanceType() instanceof \ReflectionClass, true);
         $this->AssertEquals($customerReferenceSetProperty->getResourceType()->getName(), 'Customer');
         $this->AssertEquals($customerReferenceSetProperty->getTypeKind(), ResourceTypeKind::ENTITY);
         $this->AssertFalse($customerReferenceSetProperty->isKindOf(ResourcePropertyKind::RESOURCE_REFERENCE));
     } catch (\Exception $exception) {
         $this->fail('An unexpected Exception has been raised' . $exception->getMessage());
     }
 }