| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 | <?phprequire_once('test_base.php');require_once('test_util.php');use Foo\TestWrapperSetters;use Google\Protobuf\BoolValue;use Google\Protobuf\BytesValue;use Google\Protobuf\DoubleValue;use Google\Protobuf\FloatValue;use Google\Protobuf\Int32Value;use Google\Protobuf\Int64Value;use Google\Protobuf\StringValue;use Google\Protobuf\UInt32Value;use Google\Protobuf\UInt64Value;class WrapperTypeSettersTest extends TestBase{    /**     * @dataProvider gettersAndSettersDataProvider     */    public function testGettersAndSetters(        $class,        $wrapperClass,        $setter,        $valueSetter,        $getter,        $valueGetter,        $sequence    ) {        $oldSetterMsg = new $class();        $newSetterMsg = new $class();        foreach ($sequence as list($value, $expectedValue)) {            // Manually wrap the value to pass to the old setter            $wrappedValue = is_null($value) ? $value : new $wrapperClass(['value' => $value]);            // Set values using new and old setters            $oldSetterMsg->$setter($wrappedValue);            $newSetterMsg->$valueSetter($value);            // Get expected values old getter            $expectedValue = $oldSetterMsg->$getter();            // Check that old getter returns the same value after using the            // new setter            $actualValue = $newSetterMsg->$getter();            $this->assertEquals($expectedValue, $actualValue);            // Check that new getter returns the unwrapped value from            // $expectedValue            $actualValueNewGetter = $newSetterMsg->$valueGetter();            if (is_null($expectedValue)) {                $this->assertNull($actualValueNewGetter);            } else {                $this->assertEquals($expectedValue->getValue(), $actualValueNewGetter);            }        }    }    public function gettersAndSettersDataProvider()    {        return [            [TestWrapperSetters::class, DoubleValue::class, "setDoubleValue", "setDoubleValueUnwrapped", "getDoubleValue", "getDoubleValueUnwrapped", [                [1.1, new DoubleValue(["value" => 1.1])],                [2.2, new DoubleValue(["value" => 2.2])],                [null, null],                [0, new DoubleValue()],            ]],            [TestWrapperSetters::class, FloatValue::class, "setFloatValue", "setFloatValueUnwrapped", "getFloatValue", "getFloatValueUnwrapped", [                [1.1, new FloatValue(["value" => 1.1])],                [2.2, new FloatValue(["value" => 2.2])],                [null, null],                [0, new FloatValue()],            ]],            [TestWrapperSetters::class, Int64Value::class, "setInt64Value", "setInt64ValueUnwrapped", "getInt64Value", "getInt64ValueUnwrapped", [                [123, new Int64Value(["value" => 123])],                [-789, new Int64Value(["value" => -789])],                [null, null],                [0, new Int64Value()],                [5.5, new Int64Value(["value" => 5])], // Test conversion from float to int            ]],            [TestWrapperSetters::class, UInt64Value::class, "setUInt64Value", "setUInt64ValueUnwrapped", "getUInt64Value", "getUInt64ValueUnwrapped", [                [123, new UInt64Value(["value" => 123])],                [789, new UInt64Value(["value" => 789])],                [null, null],                [0, new UInt64Value()],                [5.5, new UInt64Value(["value" => 5])], // Test conversion from float to int                [-7, new UInt64Value(["value" => -7])], // Test conversion from -ve to +ve            ]],            [TestWrapperSetters::class, Int32Value::class, "setInt32Value", "setInt32ValueUnwrapped", "getInt32Value", "getInt32ValueUnwrapped", [                [123, new Int32Value(["value" => 123])],                [-789, new Int32Value(["value" => -789])],                [null, null],                [0, new Int32Value()],                [5.5, new Int32Value(["value" => 5])], // Test conversion from float to int            ]],            [TestWrapperSetters::class, UInt32Value::class, "setUInt32Value", "setUInt32ValueUnwrapped", "getUInt32Value", "getUInt32ValueUnwrapped", [                [123, new UInt32Value(["value" => 123])],                [789, new UInt32Value(["value" => 789])],                [null, null],                [0, new UInt32Value()],                [5.5, new UInt32Value(["value" => 5])], // Test conversion from float to int                [-7, new UInt32Value(["value" => -7])], // Test conversion from -ve to +ve            ]],            [TestWrapperSetters::class, BoolValue::class, "setBoolValue", "setBoolValueUnwrapped", "getBoolValue", "getBoolValueUnwrapped", [                [true, new BoolValue(["value" => true])],                [false, new BoolValue(["value" => false])],                [null, null],            ]],            [TestWrapperSetters::class, StringValue::class, "setStringValue", "setStringValueUnwrapped", "getStringValue", "getStringValueUnwrapped", [                ["asdf", new StringValue(["value" => "asdf"])],                ["", new StringValue(["value" => ""])],                [null, null],                ["", new StringValue()],                [5, new StringValue(["value" => "5"])], // Test conversion from number to string                [5.5, new StringValue(["value" => "5.5"])], // Test conversion from number to string                [-7, new StringValue(["value" => "-7"])], // Test conversion from number to string                [-7.5, new StringValue(["value" => "-7.5"])], // Test conversion from number to string            ]],            [TestWrapperSetters::class, BytesValue::class, "setBytesValue", "setBytesValueUnwrapped", "getBytesValue", "getBytesValueUnwrapped", [                ["asdf", new BytesValue(["value" => "asdf"])],                ["", new BytesValue(["value" => ""])],                [null, null],                ["", new BytesValue()],                [5, new BytesValue(["value" => "5"])], // Test conversion from number to bytes                [5.5, new BytesValue(["value" => "5.5"])], // Test conversion from number to bytes                [-7, new BytesValue(["value" => "-7"])], // Test conversion from number to bytes                [-7.5, new BytesValue(["value" => "-7.5"])], // Test conversion from number to bytes            ]],            [TestWrapperSetters::class, DoubleValue::class, "setDoubleValueOneof", "setDoubleValueOneofUnwrapped", "getDoubleValueOneof", "getDoubleValueOneofUnwrapped", [                [1.1, new DoubleValue(["value" => 1.1])],                [2.2, new DoubleValue(["value" => 2.2])],                [null, null],                [0, new DoubleValue()],            ]],            [TestWrapperSetters::class, StringValue::class, "setStringValueOneof", "setStringValueOneofUnwrapped", "getStringValueOneof", "getStringValueOneofUnwrapped", [                ["asdf", new StringValue(["value" => "asdf"])],                ["", new StringValue(["value" => ""])],                [null, null],                ["", new StringValue()],                [5, new StringValue(["value" => "5"])], // Test conversion from number to string                [5.5, new StringValue(["value" => "5.5"])], // Test conversion from number to string                [-7, new StringValue(["value" => "-7"])], // Test conversion from number to string                [-7.5, new StringValue(["value" => "-7.5"])], // Test conversion from number to string            ]],        ];    }    /**     * @dataProvider invalidSettersDataProvider     */    public function testInvalidSetters($class, $setter, $value)    {        $this->expectException(Exception::class);        (new $class())->$setter($value);    }    public function invalidSettersDataProvider()    {        return [            [TestWrapperSetters::class, "setDoubleValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setDoubleValueUnwrapped", []],            [TestWrapperSetters::class, "setDoubleValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setDoubleValueUnwrapped", new DoubleValue()],            [TestWrapperSetters::class, "setFloatValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setFloatValueUnwrapped", []],            [TestWrapperSetters::class, "setFloatValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setFloatValueUnwrapped", new FloatValue()],            [TestWrapperSetters::class, "setInt64ValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setInt64ValueUnwrapped", []],            [TestWrapperSetters::class, "setInt64ValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setInt64ValueUnwrapped", new Int64Value()],            [TestWrapperSetters::class, "setUInt64ValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setUInt64ValueUnwrapped", []],            [TestWrapperSetters::class, "setUInt64ValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setUInt64ValueUnwrapped", new UInt64Value()],            [TestWrapperSetters::class, "setInt32ValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setInt32ValueUnwrapped", []],            [TestWrapperSetters::class, "setInt32ValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setInt32ValueUnwrapped", new Int32Value()],            [TestWrapperSetters::class, "setUInt32ValueUnwrapped", "abc"],            [TestWrapperSetters::class, "setUInt32ValueUnwrapped", []],            [TestWrapperSetters::class, "setUInt32ValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setUInt32ValueUnwrapped", new UInt32Value()],            [TestWrapperSetters::class, "setBoolValueUnwrapped", []],            [TestWrapperSetters::class, "setBoolValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setBoolValueUnwrapped", new BoolValue()],            [TestWrapperSetters::class, "setStringValueUnwrapped", []],            [TestWrapperSetters::class, "setStringValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setStringValueUnwrapped", new StringValue()],            [TestWrapperSetters::class, "setBytesValueUnwrapped", []],            [TestWrapperSetters::class, "setBytesValueUnwrapped", new stdClass()],            [TestWrapperSetters::class, "setBytesValueUnwrapped", new BytesValue()],        ];    }    /**     * @dataProvider constructorWithWrapperTypeDataProvider     */    public function testConstructorWithWrapperType($class, $wrapperClass, $wrapperField, $getter, $value)    {        $actualInstance = new $class([$wrapperField => $value]);        $expectedInstance = new $class([$wrapperField => new $wrapperClass(['value' => $value])]);        $this->assertEquals($expectedInstance->$getter()->getValue(), $actualInstance->$getter()->getValue());    }    public function constructorWithWrapperTypeDataProvider()    {        return [            [TestWrapperSetters::class, DoubleValue::class, 'double_value', 'getDoubleValue', 1.1],            [TestWrapperSetters::class, FloatValue::class, 'float_value', 'getFloatValue', 2.2],            [TestWrapperSetters::class, Int64Value::class, 'int64_value', 'getInt64Value', 3],            [TestWrapperSetters::class, UInt64Value::class, 'uint64_value', 'getUInt64Value', 4],            [TestWrapperSetters::class, Int32Value::class, 'int32_value', 'getInt32Value', 5],            [TestWrapperSetters::class, UInt32Value::class, 'uint32_value', 'getUInt32Value', 6],            [TestWrapperSetters::class, BoolValue::class, 'bool_value', 'getBoolValue', true],            [TestWrapperSetters::class, StringValue::class, 'string_value', 'getStringValue', "eight"],            [TestWrapperSetters::class, BytesValue::class, 'bytes_value', 'getBytesValue', "nine"],        ];    }    /**     * @dataProvider constructorWithRepeatedWrapperTypeDataProvider     */    public function testConstructorWithRepeatedWrapperType($wrapperField, $getter, $value)    {        $actualInstance = new TestWrapperSetters([$wrapperField => $value]);        foreach ($actualInstance->$getter() as $key => $actualWrapperValue) {            $actualInnerValue = $actualWrapperValue->getValue();            $expectedElement = $value[$key];            if (is_object($expectedElement) && is_a($expectedElement, '\Google\Protobuf\StringValue')) {                $expectedInnerValue = $expectedElement->getValue();            } else {                $expectedInnerValue = $expectedElement;            }            $this->assertEquals($expectedInnerValue, $actualInnerValue);        }        $this->assertTrue(true);    }    public function constructorWithRepeatedWrapperTypeDataProvider()    {        $sv7 = new StringValue(['value' => 'seven']);        $sv8 = new StringValue(['value' => 'eight']);        $testWrapperSetters = new TestWrapperSetters();        $testWrapperSetters->setRepeatedStringValue([$sv7, $sv8]);        $repeatedField = $testWrapperSetters->getRepeatedStringValue();        return [            ['repeated_string_value', 'getRepeatedStringValue', []],            ['repeated_string_value', 'getRepeatedStringValue', [$sv7]],            ['repeated_string_value', 'getRepeatedStringValue', [$sv7, $sv8]],            ['repeated_string_value', 'getRepeatedStringValue', ['seven']],            ['repeated_string_value', 'getRepeatedStringValue', [7]],            ['repeated_string_value', 'getRepeatedStringValue', [7.7]],            ['repeated_string_value', 'getRepeatedStringValue', ['seven', 'eight']],            ['repeated_string_value', 'getRepeatedStringValue', [$sv7, 'eight']],            ['repeated_string_value', 'getRepeatedStringValue', ['seven', $sv8]],            ['repeated_string_value', 'getRepeatedStringValue', $repeatedField],        ];    }    /**     * @dataProvider constructorWithMapWrapperTypeDataProvider     */    public function testConstructorWithMapWrapperType($wrapperField, $getter, $value)    {        $actualInstance = new TestWrapperSetters([$wrapperField => $value]);        foreach ($actualInstance->$getter() as $key => $actualWrapperValue) {            $actualInnerValue = $actualWrapperValue->getValue();            $expectedElement = $value[$key];            if (is_object($expectedElement) && is_a($expectedElement, '\Google\Protobuf\StringValue')) {                $expectedInnerValue = $expectedElement->getValue();            } elseif (is_object($expectedElement) && is_a($expectedElement, '\Google\Protobuf\Internal\MapEntry')) {                $expectedInnerValue = $expectedElement->getValue()->getValue();            } else {                $expectedInnerValue = $expectedElement;            }            $this->assertEquals($expectedInnerValue, $actualInnerValue);        }        $this->assertTrue(true);    }    public function constructorWithMapWrapperTypeDataProvider()    {        $sv7 = new StringValue(['value' => 'seven']);        $sv8 = new StringValue(['value' => 'eight']);        $testWrapperSetters = new TestWrapperSetters();        $testWrapperSetters->setMapStringValue(['key' => $sv7, 'key2' => $sv8]);        $mapField = $testWrapperSetters->getMapStringValue();        return [            ['map_string_value', 'getMapStringValue', []],            ['map_string_value', 'getMapStringValue', ['key' => $sv7]],            ['map_string_value', 'getMapStringValue', ['key' => $sv7, 'key2' => $sv8]],            ['map_string_value', 'getMapStringValue', ['key' => 'seven']],            ['map_string_value', 'getMapStringValue', ['key' => 7]],            ['map_string_value', 'getMapStringValue', ['key' => 7.7]],            ['map_string_value', 'getMapStringValue', ['key' => 'seven', 'key2' => 'eight']],            ['map_string_value', 'getMapStringValue', ['key' => $sv7, 'key2' => 'eight']],            ['map_string_value', 'getMapStringValue', ['key' => 'seven', 'key2' => $sv8]],            ['map_string_value', 'getMapStringValue', $mapField],        ];    }}
 |