Показать сообщение отдельно
Старый 08.11.2014, 21:01
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 10  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Вопрос решен , спасибо большое -> Dukobpa3
вот код :
Код AS3:
package {
    public class ObjectParser {
        public function ObjectParser() {
        }
 
        public static function sortKeys(obj:Object):Array {
            var result:Array = [];
            for (var key:String in obj) result.push(key);
            result.sort();
            return result;
        }
 
        public static function checkSecondLevel(obj:Object, sortedKeys:Array):Array {
            var result:Array = [];
            var key:String;
            var i:int;
 
            for (i = 0 ; i < sortedKeys.length ; i ++) {
                key = sortedKeys[i];
                result[i] = true;
 
                for each (var child:* in obj[key]) {
                    if (!(child is String)) {
                        result[i] = false;
                    }
                }
            }
            return result;
        }
 
        public static function apiObjToString(obj:Object):String {
            return objToSring(obj);
        }
 
        private static function objToSring(obj:Object, currKey:String = "", topKey:String = "", drawKey:Boolean = true):String {
            var res:String = "";
            var keys:Array = sortKeys(obj);
            var checkers:Array = checkSecondLevel(obj, keys);
            var key:String;
            var i:int;
 
            //trace(topKey + "/" + currKey + " -> " + keys + " -> " + checkers);
 
            for (i = 0 ; i < keys.length ; i ++) {
                key = keys[i];
 
                if (obj[key] is String) {
                    res += key + "=" + obj[key];
                } else {
                    res += objToSring(obj[key], key, currKey, checkers[i]);
                }
            }
 
            if (topKey == "" && currKey == "") {
                return res;
            } else {
                return (topKey != "" ? topKey + "=" : "")
                        + (topKey != "" || drawKey ? currKey : "")
                        + res;
            }
        }
    }
}
И тесты к коду :

Код AS3:
package {
    import org.flexunit.Assert;
 
 
    public class ObjectParserTest {
        public function ObjectParserTest() {
        }
 
        private var obj_first:Object = {
            main1: {
                key1: {
                    key11: "text1",
                    key12: "text2"
                }
            }
        };
        private var assert_first:String = "main1=key1key11=text1key12=text2";
 
        private var obj_second:Object = {
            main1: {
                key1: {
                    key11: "text1",
                    key12: "text2"
                },
                key2: {
                    key21: "text1",
                    key22: "text2"
                }
            }
        };
        private var assert_second:String = "main1=key1key11=text1key12=text2main1=key2key21=text1key22=text2";
 
        private var obj_full:Object = {
            main1: {
                key1: {
                    key11: "text1",
                    key12: "text2"
                },
                key2: {
                    key21: "text1",
                    key22: "text2"
                }
            },
            main2: {
                key1: {
                    key11: "text1",
                    key12: "text2"
                },
                key2: {
                    key21: "text1",
                    key22: "text2"
                }
            }
        };
        private var assert_full:String = "main1=key1key11=text1key12=text2main1=key2key21=text1key22=text2main2=key1key11=text1key12=text2main2=key2key21=text1key22=text2";
 
        private var obj_epic:Object = {
            main1: {
                key1: {
                    key11: "text1",
                    key12: "text2"
                },
                key2: {
                    key21: "text1",
                    key22: "text2"
                }
            },
            main2: {
                key1: {
                    key11: "text1",
                    key12: "text2",
                    key13: {
                        key131: "text1",
                        key132: "text2"
                    }
                },
                key2: {
                    key21: "text1",
                    key22: "text2"
                }
            },
            main3: {
                key1:"text1"
            }
        };
        private var assert_epic:String = "main1=key1key11=text1key12=text2main1=key2key21=text1key22=text2main2=key1key11=text1key12=text2key1=key13key131=text1key132=text2main2=key2key21=text1key22=text2main3key1=text1";
 
        [test]
        public function testCheckSecondLevel():void {
            var keys:Array = ObjectParser.sortKeys(obj_full);
            Assert.assertEquals(
                    JSON.stringify(ObjectParser.checkSecondLevel(obj_full, keys)),
                    JSON.stringify([false, false])
            );
 
            keys = ObjectParser.sortKeys(obj_second["main1"]);
            Assert.assertEquals(
                    JSON.stringify(ObjectParser.checkSecondLevel(obj_second["main1"], keys)),
                    JSON.stringify([true, true])
            );
 
            keys = ObjectParser.sortKeys(obj_full["main1"]);
            Assert.assertEquals(
                    JSON.stringify(ObjectParser.checkSecondLevel(obj_full["main1"], keys)),
                    JSON.stringify([true, true])
            );
        }
 
        [test]
        public function testSort():void {
            Assert.assertEquals(
                    JSON.stringify(ObjectParser.sortKeys(obj_full)),
                    JSON.stringify(["main1", "main2"])
            );
        }
 
        [test]
        public function testFirst():void {
            Assert.assertEquals(
                    ObjectParser.apiObjToString(obj_first),
                    assert_first
            );
        }
 
        [test]
        public function testSecond():void {
            Assert.assertEquals(
                    ObjectParser.apiObjToString(obj_second),
                    assert_second
            );
        }
 
        [test]
        public function testFull():void {
            Assert.assertEquals(
                    ObjectParser.apiObjToString(obj_full),
                    assert_full
            );
        }
 
        [test]
        public function testEpic():void {
            Assert.assertEquals(
                    ObjectParser.apiObjToString(obj_epic),
                    assert_epic
            );
        }
    }
}


Последний раз редактировалось GrafMine; 08.11.2014 в 21:22.