winlin

amf0 utest: finish basic utest for amf0

@@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 #include <srs_protocol_amf0.hpp> 24 #include <srs_protocol_amf0.hpp>
25 25
26 #include <utility> 26 #include <utility>
  27 +#include <vector>
27 using namespace std; 28 using namespace std;
28 29
29 #include <srs_kernel_log.hpp> 30 #include <srs_kernel_log.hpp>
@@ -417,7 +418,7 @@ void __SrsUnSortedHashtable::clear() @@ -417,7 +418,7 @@ void __SrsUnSortedHashtable::clear()
417 properties.clear(); 418 properties.clear();
418 } 419 }
419 420
420 -std::string __SrsUnSortedHashtable::key_at(int index) 421 +string __SrsUnSortedHashtable::key_at(int index)
421 { 422 {
422 srs_assert(index < count()); 423 srs_assert(index < count());
423 SrsObjectPropertyType& elem = properties[index]; 424 SrsObjectPropertyType& elem = properties[index];
@@ -431,7 +432,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::value_at(int index) @@ -431,7 +432,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::value_at(int index)
431 return elem.second; 432 return elem.second;
432 } 433 }
433 434
434 -void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value) 435 +void __SrsUnSortedHashtable::set(string key, SrsAmf0Any* value)
435 { 436 {
436 if (!value) { 437 if (!value) {
437 srs_warn("add a NULL propertity %s", key.c_str()); 438 srs_warn("add a NULL propertity %s", key.c_str());
@@ -455,7 +456,7 @@ void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value) @@ -455,7 +456,7 @@ void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value)
455 properties.push_back(std::make_pair(key, value)); 456 properties.push_back(std::make_pair(key, value));
456 } 457 }
457 458
458 -SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name) 459 +SrsAmf0Any* __SrsUnSortedHashtable::get_property(string name)
459 { 460 {
460 std::vector<SrsObjectPropertyType>::iterator it; 461 std::vector<SrsObjectPropertyType>::iterator it;
461 462
@@ -471,7 +472,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name) @@ -471,7 +472,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name)
471 return NULL; 472 return NULL;
472 } 473 }
473 474
474 -SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name) 475 +SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(string name)
475 { 476 {
476 SrsAmf0Any* prop = get_property(name); 477 SrsAmf0Any* prop = get_property(name);
477 478
@@ -486,7 +487,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name) @@ -486,7 +487,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name)
486 return prop; 487 return prop;
487 } 488 }
488 489
489 -SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_number(std::string name) 490 +SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_number(string name)
490 { 491 {
491 SrsAmf0Any* prop = get_property(name); 492 SrsAmf0Any* prop = get_property(name);
492 493
@@ -713,7 +714,7 @@ int SrsAmf0Object::count() @@ -713,7 +714,7 @@ int SrsAmf0Object::count()
713 return properties->count(); 714 return properties->count();
714 } 715 }
715 716
716 -std::string SrsAmf0Object::key_at(int index) 717 +string SrsAmf0Object::key_at(int index)
717 { 718 {
718 return properties->key_at(index); 719 return properties->key_at(index);
719 } 720 }
@@ -723,22 +724,22 @@ SrsAmf0Any* SrsAmf0Object::value_at(int index) @@ -723,22 +724,22 @@ SrsAmf0Any* SrsAmf0Object::value_at(int index)
723 return properties->value_at(index); 724 return properties->value_at(index);
724 } 725 }
725 726
726 -void SrsAmf0Object::set(std::string key, SrsAmf0Any* value) 727 +void SrsAmf0Object::set(string key, SrsAmf0Any* value)
727 { 728 {
728 properties->set(key, value); 729 properties->set(key, value);
729 } 730 }
730 731
731 -SrsAmf0Any* SrsAmf0Object::get_property(std::string name) 732 +SrsAmf0Any* SrsAmf0Object::get_property(string name)
732 { 733 {
733 return properties->get_property(name); 734 return properties->get_property(name);
734 } 735 }
735 736
736 -SrsAmf0Any* SrsAmf0Object::ensure_property_string(std::string name) 737 +SrsAmf0Any* SrsAmf0Object::ensure_property_string(string name)
737 { 738 {
738 return properties->ensure_property_string(name); 739 return properties->ensure_property_string(name);
739 } 740 }
740 741
741 -SrsAmf0Any* SrsAmf0Object::ensure_property_number(std::string name) 742 +SrsAmf0Any* SrsAmf0Object::ensure_property_number(string name)
742 { 743 {
743 return properties->ensure_property_number(name); 744 return properties->ensure_property_number(name);
744 } 745 }
@@ -900,7 +901,7 @@ int SrsAmf0EcmaArray::count() @@ -900,7 +901,7 @@ int SrsAmf0EcmaArray::count()
900 return properties->count(); 901 return properties->count();
901 } 902 }
902 903
903 -std::string SrsAmf0EcmaArray::key_at(int index) 904 +string SrsAmf0EcmaArray::key_at(int index)
904 { 905 {
905 return properties->key_at(index); 906 return properties->key_at(index);
906 } 907 }
@@ -910,21 +911,26 @@ SrsAmf0Any* SrsAmf0EcmaArray::value_at(int index) @@ -910,21 +911,26 @@ SrsAmf0Any* SrsAmf0EcmaArray::value_at(int index)
910 return properties->value_at(index); 911 return properties->value_at(index);
911 } 912 }
912 913
913 -void SrsAmf0EcmaArray::set(std::string key, SrsAmf0Any* value) 914 +void SrsAmf0EcmaArray::set(string key, SrsAmf0Any* value)
914 { 915 {
915 properties->set(key, value); 916 properties->set(key, value);
916 } 917 }
917 918
918 -SrsAmf0Any* SrsAmf0EcmaArray::get_property(std::string name) 919 +SrsAmf0Any* SrsAmf0EcmaArray::get_property(string name)
919 { 920 {
920 return properties->get_property(name); 921 return properties->get_property(name);
921 } 922 }
922 923
923 -SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_string(std::string name) 924 +SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_string(string name)
924 { 925 {
925 return properties->ensure_property_string(name); 926 return properties->ensure_property_string(name);
926 } 927 }
927 928
  929 +SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_number(string name)
  930 +{
  931 + return properties->ensure_property_number(name);
  932 +}
  933 +
928 int SrsAmf0Size::utf8(string value) 934 int SrsAmf0Size::utf8(string value)
929 { 935 {
930 return 2 + value.length(); 936 return 2 + value.length();
@@ -1138,7 +1144,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value) @@ -1138,7 +1144,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value)
1138 return value->write(stream); 1144 return value->write(stream);
1139 } 1145 }
1140 1146
1141 -int srs_amf0_read_utf8(SrsStream* stream, std::string& value) 1147 +int srs_amf0_read_utf8(SrsStream* stream, string& value)
1142 { 1148 {
1143 int ret = ERROR_SUCCESS; 1149 int ret = ERROR_SUCCESS;
1144 1150
@@ -1182,7 +1188,7 @@ int srs_amf0_read_utf8(SrsStream* stream, std::string& value) @@ -1182,7 +1188,7 @@ int srs_amf0_read_utf8(SrsStream* stream, std::string& value)
1182 1188
1183 return ret; 1189 return ret;
1184 } 1190 }
1185 -int srs_amf0_write_utf8(SrsStream* stream, std::string value) 1191 +int srs_amf0_write_utf8(SrsStream* stream, string value)
1186 { 1192 {
1187 int ret = ERROR_SUCCESS; 1193 int ret = ERROR_SUCCESS;
1188 1194
@@ -1213,7 +1219,7 @@ int srs_amf0_write_utf8(SrsStream* stream, std::string value) @@ -1213,7 +1219,7 @@ int srs_amf0_write_utf8(SrsStream* stream, std::string value)
1213 return ret; 1219 return ret;
1214 } 1220 }
1215 1221
1216 -int srs_amf0_read_string(SrsStream* stream, std::string& value) 1222 +int srs_amf0_read_string(SrsStream* stream, string& value)
1217 { 1223 {
1218 int ret = ERROR_SUCCESS; 1224 int ret = ERROR_SUCCESS;
1219 1225
@@ -1236,7 +1242,7 @@ int srs_amf0_read_string(SrsStream* stream, std::string& value) @@ -1236,7 +1242,7 @@ int srs_amf0_read_string(SrsStream* stream, std::string& value)
1236 return srs_amf0_read_utf8(stream, value); 1242 return srs_amf0_read_utf8(stream, value);
1237 } 1243 }
1238 1244
1239 -int srs_amf0_write_string(SrsStream* stream, std::string value) 1245 +int srs_amf0_write_string(SrsStream* stream, string value)
1240 { 1246 {
1241 int ret = ERROR_SUCCESS; 1247 int ret = ERROR_SUCCESS;
1242 1248
@@ -31,7 +31,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 #include <srs_core.hpp> 31 #include <srs_core.hpp>
32 32
33 #include <string> 33 #include <string>
34 -#include <vector>  
35 34
36 class SrsStream; 35 class SrsStream;
37 class SrsAmf0Object; 36 class SrsAmf0Object;
@@ -220,6 +219,7 @@ public: @@ -220,6 +219,7 @@ public:
220 virtual void set(std::string key, SrsAmf0Any* value); 219 virtual void set(std::string key, SrsAmf0Any* value);
221 virtual SrsAmf0Any* get_property(std::string name); 220 virtual SrsAmf0Any* get_property(std::string name);
222 virtual SrsAmf0Any* ensure_property_string(std::string name); 221 virtual SrsAmf0Any* ensure_property_string(std::string name);
  222 + virtual SrsAmf0Any* ensure_property_number(std::string name);
223 }; 223 };
224 224
225 /** 225 /**
@@ -808,4 +808,99 @@ VOID TEST(AMF0Test, ObjectProps) @@ -808,4 +808,99 @@ VOID TEST(AMF0Test, ObjectProps)
808 EXPECT_TRUE(NULL != o->ensure_property_number("age")); 808 EXPECT_TRUE(NULL != o->ensure_property_number("age"));
809 EXPECT_TRUE(NULL == o->ensure_property_string("age")); 809 EXPECT_TRUE(NULL == o->ensure_property_string("age"));
810 } 810 }
  811 +
  812 + // count
  813 + if (true) {
  814 + o = SrsAmf0Any::object();
  815 + SrsAutoFree(SrsAmf0Object, o, false);
  816 +
  817 + EXPECT_EQ(0, o->count());
  818 +
  819 + o->set("name", SrsAmf0Any::str("winlin"));
  820 + EXPECT_EQ(1, o->count());
  821 +
  822 + o->set("name", SrsAmf0Any::str("winlin"));
  823 + EXPECT_EQ(1, o->count());
  824 +
  825 + o->set("age", SrsAmf0Any::number(100));
  826 + EXPECT_EQ(2, o->count());
  827 + }
  828 +}
  829 +
  830 +VOID TEST(AMF0Test, EcmaArrayProps)
  831 +{
  832 + SrsAmf0EcmaArray* o = NULL;
  833 +
  834 + // get/set property
  835 + if (true) {
  836 + o = SrsAmf0Any::ecma_array();
  837 + SrsAutoFree(SrsAmf0EcmaArray, o, false);
  838 +
  839 + EXPECT_TRUE(NULL == o->get_property("name"));
  840 +
  841 + o->set("name", SrsAmf0Any::str("winlin"));
  842 + EXPECT_TRUE(NULL != o->get_property("name"));
  843 +
  844 + EXPECT_TRUE(NULL == o->get_property("age"));
  845 +
  846 + o->set("age", SrsAmf0Any::number(100));
  847 + EXPECT_TRUE(NULL != o->get_property("age"));
  848 + }
  849 +
  850 + // index property
  851 + if (true) {
  852 + o = SrsAmf0Any::ecma_array();
  853 + SrsAutoFree(SrsAmf0EcmaArray, o, false);
  854 +
  855 + o->set("name", SrsAmf0Any::str("winlin"));
  856 + EXPECT_STREQ("name", o->key_at(0).c_str());
  857 + ASSERT_TRUE(o->value_at(0)->is_string());
  858 + EXPECT_STREQ("winlin", o->value_at(0)->to_str().c_str());
  859 +
  860 + o->set("age", SrsAmf0Any::number(100));
  861 + EXPECT_STREQ("name", o->key_at(0).c_str());
  862 + ASSERT_TRUE(o->value_at(0)->is_string());
  863 + EXPECT_STREQ("winlin", o->value_at(0)->to_str().c_str());
  864 +
  865 + EXPECT_STREQ("age", o->key_at(1).c_str());
  866 + ASSERT_TRUE(o->value_at(1)->is_number());
  867 + EXPECT_DOUBLE_EQ(100, o->value_at(1)->to_number());
  868 + }
  869 +
  870 + // ensure property
  871 + if (true) {
  872 + o = SrsAmf0Any::ecma_array();
  873 + SrsAutoFree(SrsAmf0EcmaArray, o, false);
  874 +
  875 + EXPECT_TRUE(NULL == o->ensure_property_string("name"));
  876 + EXPECT_TRUE(NULL == o->ensure_property_number("age"));
  877 +
  878 + o->set("name", SrsAmf0Any::str("winlin"));
  879 + EXPECT_TRUE(NULL != o->ensure_property_string("name"));
  880 + EXPECT_TRUE(NULL == o->ensure_property_number("name"));
  881 + EXPECT_TRUE(NULL == o->ensure_property_number("age"));
  882 +
  883 + o->set("age", SrsAmf0Any::number(100));
  884 + EXPECT_TRUE(NULL != o->ensure_property_string("name"));
  885 + EXPECT_TRUE(NULL == o->ensure_property_number("name"));
  886 + EXPECT_TRUE(NULL != o->ensure_property_number("age"));
  887 + EXPECT_TRUE(NULL == o->ensure_property_string("age"));
  888 + }
  889 +
  890 + // count
  891 + if (true) {
  892 + o = SrsAmf0Any::ecma_array();
  893 + SrsAutoFree(SrsAmf0EcmaArray, o, false);
  894 +
  895 + EXPECT_EQ(0, o->count());
  896 +
  897 + o->set("name", SrsAmf0Any::str("winlin"));
  898 + EXPECT_EQ(1, o->count());
  899 +
  900 + o->set("name", SrsAmf0Any::str("winlin"));
  901 + EXPECT_EQ(1, o->count());
  902 +
  903 + o->set("age", SrsAmf0Any::number(100));
  904 + EXPECT_EQ(2, o->count());
  905 + }
811 } 906 }