diff --git a/trunk/src/rtmp/srs_protocol_amf0.cpp b/trunk/src/rtmp/srs_protocol_amf0.cpp index b5c6ab8fd..bba998a5b 100644 --- a/trunk/src/rtmp/srs_protocol_amf0.cpp +++ b/trunk/src/rtmp/srs_protocol_amf0.cpp @@ -1037,6 +1037,7 @@ SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_number(string name) SrsAmf0StrictArray::SrsAmf0StrictArray() { marker = RTMP_AMF0_StrictArray; + _count = 0; } SrsAmf0StrictArray::~SrsAmf0StrictArray() diff --git a/trunk/src/utest/srs_utest_amf0.cpp b/trunk/src/utest/srs_utest_amf0.cpp index 69576b89a..b588c2cc4 100644 --- a/trunk/src/utest/srs_utest_amf0.cpp +++ b/trunk/src/utest/srs_utest_amf0.cpp @@ -1049,3 +1049,71 @@ VOID TEST(AMF0Test, ApiEcmaArrayProps) EXPECT_EQ(2, o->count()); } } + +VOID TEST(AMF0Test, ApiStrictArray) +{ + SrsStream s; + + char buf[1024]; + memset(buf, 0, sizeof(buf)); + EXPECT_EQ(ERROR_SUCCESS, s.initialize(buf, sizeof(buf))); + + SrsAmf0StrictArray* o = NULL; + + // append property + if (true) { + o = SrsAmf0Any::strict_array(); + SrsAutoFree(SrsAmf0StrictArray, o); + + o->append(SrsAmf0Any::number(100)); + EXPECT_DOUBLE_EQ(100, o->at(0)->to_number()); + + o->append(SrsAmf0Any::number(101)); + EXPECT_DOUBLE_EQ(101, o->at(1)->to_number()); + + o->append(SrsAmf0Any::str("winlin")); + EXPECT_STREQ("winlin", o->at(2)->to_str().c_str()); + } + + // count + if (true) { + o = SrsAmf0Any::strict_array(); + SrsAutoFree(SrsAmf0StrictArray, o); + + EXPECT_EQ(0, o->count()); + + o->append(SrsAmf0Any::boolean()); + EXPECT_EQ(1, o->count()); + + o->append(SrsAmf0Any::boolean()); + EXPECT_EQ(2, o->count()); + + o->clear(); + EXPECT_EQ(0, o->count()); + } + + // io + if (true) { + o = SrsAmf0Any::strict_array(); + SrsAutoFree(SrsAmf0StrictArray, o); + + s.reset(); + EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(5, s.pos()); + + s.reset(); + EXPECT_EQ(0x0a, s.read_1bytes()); + EXPECT_EQ(0x00, s.read_4bytes()); + } + + if (true) { + o = SrsAmf0Any::strict_array(); + SrsAutoFree(SrsAmf0StrictArray, o); + + o->append(SrsAmf0Any::number(0)); + + s.reset(); + EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(5 + SrsAmf0Size::number(), s.pos()); + } +}