/**
  * @dataProvider dataForQueryNormalization
  */
 public function testNormalizesQuery(Parameter $param, array $value, array $result)
 {
     $command = new OperationCommand();
     $request = new EntityEnclosingRequest('POST', 'http://foo.com');
     $visitor = new AwsQueryVisitor();
     $visitor->visit($command, $request, $param, $value);
     $fields = $request->getPostFields()->getAll();
     asort($fields);
     $this->assertEquals($result, $fields);
 }
 public function testNormalizesQuery()
 {
     $param = new Parameter(array('name' => 'IpPermissions', 'location' => 'aws.query', 'data' => array('offset' => 1), 'type' => 'array', 'items' => array('data' => array('offset' => 1), 'type' => 'object', 'properties' => array('IpProtocol' => array('type' => 'string'), 'FromPort' => array('type' => 'numeric'), 'ToPort' => array('type' => 'numeric'), 'Groups' => array('type' => 'array', 'data' => array('offset' => 1), 'items' => array('type' => 'object', 'properties' => array('UserId' => array('type' => 'string'), 'GroupName' => array('type' => 'string'), 'GroupId' => array('type' => 'string')))), 'IpRanges' => array('type' => 'array', 'data' => array('offset' => 1), 'items' => array('type' => 'object', 'properties' => array('CidrIp' => array('type' => 'string')))), 'Foo' => array('type' => 'array', 'sentAs' => 'Foo.member', 'data' => array('offset' => 10), 'items' => array('type' => 'string'))))));
     $command = new OperationCommand();
     $request = new EntityEnclosingRequest('POST', 'http://foo.com');
     $visitor = new AwsQueryVisitor();
     $value = array(array('IpProtocol' => 'tcp', 'FromPort' => 20, 'Groups' => array(array('UserId' => '123', 'GroupName' => 'Foo', 'GroupId' => 'Bar'), array('UserId' => '456', 'GroupName' => 'Oof', 'GroupId' => 'Rab')), 'IpRanges' => array(array('CidrIp' => 'test'), array('CidrIp' => 'other')), 'Foo' => array('test', 'other')));
     $visitor->visit($command, $request, $param, $value);
     $fields = $request->getPostFields()->getAll();
     asort($fields);
     $this->assertEquals(array('IpPermissions.1.FromPort' => 20, 'IpPermissions.1.Groups.1.UserId' => '123', 'IpPermissions.1.Groups.2.UserId' => '456', 'IpPermissions.1.Groups.1.GroupId' => 'Bar', 'IpPermissions.1.Groups.1.GroupName' => 'Foo', 'IpPermissions.1.Groups.2.GroupName' => 'Oof', 'IpPermissions.1.Groups.2.GroupId' => 'Rab', 'IpPermissions.1.Foo.member.11' => 'other', 'IpPermissions.1.IpRanges.2.CidrIp' => 'other', 'IpPermissions.1.IpProtocol' => 'tcp', 'IpPermissions.1.IpRanges.1.CidrIp' => 'test', 'IpPermissions.1.Foo.member.10' => 'test'), $fields);
 }
 public function testSerializesEmptyLists()
 {
     $operation = new Operation(array('name' => 'UpdateStack'));
     $command = new OperationCommand(array(), $operation);
     $request = new EntityEnclosingRequest('POST', 'http://foo.com');
     $visitor = new AwsQueryVisitor();
     $visitor->visit($command, $request, new Parameter(array('name' => 'foo', 'type' => 'object', 'location' => 'aws.query', 'properties' => array('test' => array('type' => 'array'), 'bar' => array('type' => 'object', 'properties' => array('bam' => array('type' => 'array'), 'boo' => array('type' => 'string')))))), array('test' => array(), 'bar' => array('bam' => array(), 'boo' => 'hi')));
     $fields = $request->getPostFields();
     $this->assertEquals('foo.test=&foo.bar.bam=&foo.bar.boo=hi', (string) $fields);
 }