GrafMine |
08.11.2014 21:01 |
Вопрос решен , спасибо большое -> 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
);
}
}
}
|