| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package; |
| |
| import haxe.Int32; |
| import haxe.Int64; |
| import haxe.Timer; |
| import haxe.ds.IntMap; |
| import haxe.ds.StringMap; |
| import haxe.ds.ObjectMap; |
| |
| import org.apache.thrift.*; |
| import org.apache.thrift.helper.*; |
| import org.apache.thrift.protocol.*; |
| import org.apache.thrift.transport.*; |
| import org.apache.thrift.server.*; |
| import org.apache.thrift.meta_data.*; |
| |
| #if cpp |
| import cpp.vm.Thread; |
| #else |
| // no thread support (yet) |
| #end |
| |
| import thrift.test.*; // generated code |
| |
| |
| class TestResults { |
| private var successCnt : Int = 0; |
| private var errorCnt : Int = 0; |
| private var failedTests : String = ""; |
| private var print_direct : Bool = false; |
| |
| public static var EXITCODE_SUCCESS = 0x00; // no errors bits set |
| // |
| public static var EXITCODE_FAILBIT_BASETYPES = 0x01; |
| public static var EXITCODE_FAILBIT_STRUCTS = 0x02; |
| public static var EXITCODE_FAILBIT_CONTAINERS = 0x04; |
| public static var EXITCODE_FAILBIT_EXCEPTIONS = 0x08; |
| // |
| public static var EXITCODE_ALL_FAILBITS = 0x0F; |
| // |
| private var testsExecuted : Int = 0; |
| private var testsFailed : Int = 0; |
| private var currentTest : Int = 0; |
| |
| |
| public function new(direct : Bool) { |
| print_direct = direct; |
| } |
| |
| public function StartTestGroup( groupBit : Int) : Void { |
| currentTest = groupBit; |
| testsExecuted |= groupBit; |
| } |
| |
| public function Expect( expr : Bool, msg : String) : Void { |
| if ( expr) { |
| ++successCnt; |
| } else { |
| ++errorCnt; |
| testsFailed |= currentTest; |
| failedTests += "\n " + msg; |
| if( print_direct) { |
| trace('FAIL: $msg'); |
| } |
| } |
| } |
| |
| public function CalculateExitCode() : Int { |
| var notExecuted : Int = EXITCODE_ALL_FAILBITS & (~testsExecuted); |
| return testsFailed | notExecuted; |
| } |
| |
| public function PrintSummary() : Void { |
| var total = successCnt + errorCnt; |
| var sp = (100 * successCnt) / total; |
| var ep = (100 * errorCnt) / total; |
| |
| trace('==========================='); |
| trace('Tests executed $total'); |
| trace('Tests succeeded $successCnt ($sp%)'); |
| trace('Tests failed $errorCnt ($ep%)'); |
| if ( errorCnt > 0) |
| { |
| trace('==========================='); |
| trace('FAILED TESTS: $failedTests'); |
| } |
| trace('==========================='); |
| } |
| } |
| |
| |
| class TestClient { |
| |
| public static function Execute(args : Arguments) : Void |
| { |
| var exitCode = 0xFF; |
| try |
| { |
| var difft = Timer.stamp(); |
| |
| if( args.numThreads > 1) { |
| var threads = new List<Thread>(); |
| for( test in 0 ... args.numThreads) { |
| threads.add( StartThread( args)); |
| } |
| exitCode = 0; |
| for( thread in threads) { |
| exitCode |= Thread.readMessage(true); |
| } |
| } else { |
| var rslt = new TestResults(true); |
| RunClient(args,rslt); |
| rslt.PrintSummary(); |
| exitCode = rslt.CalculateExitCode(); |
| } |
| |
| difft = Timer.stamp() - difft; |
| trace('total test time: $difft seconds'); |
| } |
| catch (e : TException) |
| { |
| trace('$e'); |
| exitCode = 0xFF; |
| } |
| catch (e : Dynamic) |
| { |
| trace('$e'); |
| exitCode = 0xFF; |
| } |
| |
| #if sys |
| Sys.exit( exitCode); |
| #end |
| } |
| |
| |
| private static function StartThread(args : Arguments) : Thread { |
| var thread = Thread.create( |
| function() : Void { |
| var rslt = new TestResults(false); |
| var main : Thread = Thread.readMessage(true); |
| try |
| { |
| RunClient(args,rslt); |
| } |
| catch (e : TException) |
| { |
| rslt.Expect( false, '$e'); |
| trace('$e'); |
| } |
| catch (e : Dynamic) |
| { |
| rslt.Expect( false, '$e'); |
| trace('$e'); |
| } |
| main.sendMessage( rslt.CalculateExitCode()); |
| }); |
| |
| thread.sendMessage(Thread.current()); |
| return thread; |
| } |
| |
| |
| public static function RunClient(args : Arguments, rslt : TestResults) |
| { |
| var transport : TTransport = null; |
| switch (args.transport) |
| { |
| case socket: |
| transport = new TSocket(args.host, args.port); |
| case http: |
| transport = new THttpClient(args.host); |
| default: |
| throw "Unhandled transport"; |
| } |
| |
| // optional: layered transport |
| if ( args.framed) { |
| trace("- framed transport"); |
| transport = new TFramedTransport(transport); |
| } |
| if ( args.buffered) { |
| trace("- buffered transport"); |
| throw "TBufferedTransport not implemented yet"; |
| //transport = new TBufferedTransport(transport); |
| } |
| |
| // protocol |
| var protocol : TProtocol = null; |
| switch( args.protocol) |
| { |
| case binary: |
| trace("- binary protocol"); |
| protocol = new TBinaryProtocol(transport); |
| case json: |
| trace("- json protocol"); |
| protocol = new TJSONProtocol(transport); |
| default: |
| throw "Unhandled protocol"; |
| } |
| |
| |
| // run the test code |
| HaxeBasicsTest( args, rslt); |
| for( i in 0 ... args.numIterations) { |
| ClientTest( transport, protocol, args, rslt); |
| } |
| } |
| |
| |
| public static function HaxeBasicsTest( args : Arguments, rslt : TestResults) : Void |
| { |
| // We need to test a few basic things used in the ClientTest |
| // Anything else beyond this scope should go into /lib/haxe/ instead |
| rslt.StartTestGroup( 0); |
| |
| var map32 = new IntMap<Int32>(); |
| var map64 = new Int64Map<Int32>(); |
| |
| rslt.Expect( map32.keys().hasNext() == map64.keys().hasNext(), "Int64Map<Int32> Test #1"); |
| rslt.Expect( map32.exists( 4711) == map64.exists( Int64.make(47,11)), "Int64Map<Int32> Test #2"); |
| rslt.Expect( map32.remove( 4711) == map64.remove( Int64.make(47,11)), "Int64Map<Int32> Test #3"); |
| rslt.Expect( map32.get( 4711) == map64.get( Int64.make(47,11)), "Int64Map<Int32> Test #4"); |
| |
| map32.set( 42, 815); |
| map64.set( Int64.make(0,42), 815); |
| map32.set( -517, 23); |
| map64.set( Int64.make(-5,17), 23); |
| map32.set( 0, -123); |
| map64.set( Int64.make(0,0), -123); |
| |
| rslt.Expect( map32.keys().hasNext() == map64.keys().hasNext(), "Int64Map<Int32> Test #10"); |
| rslt.Expect( map32.exists( 4711) == map64.exists( Int64.make(47,11)), "Int64Map<Int32> Test #11"); |
| rslt.Expect( map32.exists( -517) == map64.exists( Int64.make(-5,17)), "Int64Map<Int32> Test #12"); |
| rslt.Expect( map32.exists( 42) == map64.exists( Int64.make(0,42)), "Int64Map<Int32> Test #13"); |
| rslt.Expect( map32.exists( 0) == map64.exists( Int64.make(0,0)), "Int64Map<Int32> Test #14"); |
| rslt.Expect( map32.get( 4711) == map64.get( Int64.make(47,11)), "Int64Map<Int32> Test #15"); |
| rslt.Expect( map32.get( -517) == map64.get( Int64.make(-5,17)), "Int64Map<Int32> Test #16"); |
| rslt.Expect( map32.get( 42) == map64.get( Int64.make(0,42)), "Int64Map<Int32> Test #Int64.make(-5,17)"); |
| rslt.Expect( map32.get( 0) == map64.get( Int64.make(0,0)), "Int64Map<Int32> Test #18"); |
| rslt.Expect( map32.remove( 4711) == map64.remove( Int64.make(47,11)), "Int64Map<Int32> Test #19"); |
| rslt.Expect( map32.remove( -517) == map64.remove( Int64.make(-5,17)), "Int64Map<Int32> Test #20"); |
| rslt.Expect( map32.exists( 4711) == map64.exists( Int64.make(47,11)), "Int64Map<Int32> Test #21"); |
| rslt.Expect( map32.exists( -517) == map64.exists( Int64.make(-5,17)), "Int64Map<Int32> Test #22"); |
| rslt.Expect( map32.exists( 42) == map64.exists( Int64.make(0,42)), "Int64Map<Int32> Test #23"); |
| rslt.Expect( map32.exists( 0) == map64.exists( Int64.make(0,0)), "Int64Map<Int32> Test #24"); |
| rslt.Expect( map32.get( 4711) == map64.get( Int64.make(47,11)), "Int64Map<Int32> Test #25"); |
| rslt.Expect( map32.get( -517) == map64.get( Int64.make(-5,17)), "Int64Map<Int32> Test #26"); |
| rslt.Expect( map32.get( 42) == map64.get( Int64.make(0,42)), "Int64Map<Int32> Test #27"); |
| rslt.Expect( map32.get( 0) == map64.get( Int64.make(0,0)), "Int64Map<Int32> Test #28"); |
| |
| map32.set( 42, 1); |
| map64.set( Int64.make(0,42), 1); |
| map32.set( -517, -2); |
| map64.set( Int64.make(-5,17), -2); |
| map32.set( 0, 3); |
| map64.set( Int64.make(0,0), 3); |
| |
| var c32 = 0; |
| for (key in map32.keys()) { |
| ++c32; |
| } |
| var c64 = 0; |
| for (key in map64.keys()) { |
| ++c64; |
| } |
| rslt.Expect( c32 == c64, "Int64Map<Int32> Test #30"); |
| |
| var s32 = map32.toString(); |
| var s64 = map64.toString(); |
| trace("Int64Map<Int32>.toString(): " + ' ("$s32" == "$s64")'); |
| |
| map32.remove( 42); |
| map64.remove( Int64.make(0,42)); |
| map32.remove( -517); |
| map64.remove( Int64.make(-5,17)); |
| map32.remove( 0); |
| map64.remove( Int64.make(0,0)); |
| |
| rslt.Expect( map32.keys().hasNext() == map64.keys().hasNext(), "Int64Map<Int32> Test #90"); |
| rslt.Expect( map32.exists( 4711) == map64.exists( Int64.make(47,11)), "Int64Map<Int32> Test #91"); |
| rslt.Expect( map32.exists( -517) == map64.exists( Int64.make(-5,17)), "Int64Map<Int32> Test #92"); |
| rslt.Expect( map32.exists( 42) == map64.exists( Int64.make(0,42)), "Int64Map<Int32> Test #93"); |
| rslt.Expect( map32.exists( 0) == map64.exists( Int64.make(0,0)), "Int64Map<Int32> Test #94"); |
| rslt.Expect( map32.get( 4711) == map64.get( Int64.make(47,11)), "Int64Map<Int32> Test #95"); |
| rslt.Expect( map32.get( -517) == map64.get( Int64.make(-5,17)), "Int64Map<Int32> Test #96"); |
| rslt.Expect( map32.get( 42) == map64.get( Int64.make(0,42)), "Int64Map<Int32> Test #97"); |
| rslt.Expect( map32.get( 0) == map64.get( Int64.make(0,0)), "Int64Map<Int32> Test #98"); |
| } |
| |
| |
| public static function ClientTest( transport : TTransport, protocol : TProtocol, |
| args : Arguments, rslt : TestResults) : Void |
| { |
| var client = new ThriftTestImpl(protocol,protocol); |
| try |
| { |
| if (!transport.isOpen()) |
| { |
| transport.open(); |
| } |
| } |
| catch (e : TException) |
| { |
| trace('$e'); |
| return; |
| } |
| catch (e : Dynamic) |
| { |
| trace('$e'); |
| return; |
| } |
| |
| var start = Date.now(); |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_EXCEPTIONS); |
| |
| // if arg == "Xception" throw Xception with errorCode = 1001 and message = arg |
| trace('testException("Xception")'); |
| try { |
| client.testException("Xception"); |
| rslt.Expect( false, 'testException("Xception") should throw'); |
| } |
| catch (e : Xception) |
| { |
| rslt.Expect( e.message == "Xception", 'testException("Xception") - e.message == "Xception"'); |
| rslt.Expect( e.errorCode == 1001, 'testException("Xception") - e.errorCode == 1001'); |
| } |
| catch (e : Dynamic) |
| { |
| rslt.Expect( false, 'testException("Xception") - $e'); |
| } |
| |
| // if arg == "TException" throw TException |
| trace('testException("TException")'); |
| try { |
| client.testException("TException"); |
| rslt.Expect( false, 'testException("TException") should throw'); |
| } |
| catch (e : TException) |
| { |
| rslt.Expect( true, 'testException("TException") - $e'); |
| } |
| catch (e : Dynamic) |
| { |
| rslt.Expect( false, 'testException("TException") - $e'); |
| } |
| |
| // else do not throw anything |
| trace('testException("bla")'); |
| try { |
| client.testException("bla"); |
| rslt.Expect( true, 'testException("bla") should not throw'); |
| } |
| catch (e : Dynamic) |
| { |
| rslt.Expect( false, 'testException("bla") - $e'); |
| } |
| |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_BASETYPES); |
| |
| trace('testVoid()'); |
| client.testVoid(); |
| trace(' = void'); |
| rslt.Expect(true,"testVoid()"); // bump counter |
| |
| trace('testString("Test")'); |
| var s = client.testString("Test"); |
| trace(' = "$s"'); |
| rslt.Expect(s == "Test", '$s == "Test"'); |
| |
| trace('testByte(1)'); |
| var i8 = client.testByte(1); |
| trace(' = $i8'); |
| rslt.Expect(i8 == 1, '$i8 == 1'); |
| |
| trace('testI32(-1)'); |
| var i32 = client.testI32(-1); |
| trace(' = $i32'); |
| rslt.Expect(i32 == -1, '$i32 == -1'); |
| |
| trace('testI64(-34359738368)'); |
| var i64 = client.testI64( Int64.make( 0xFFFFFFF8, 0x00000000)); // -34359738368 |
| trace(' = $i64'); |
| rslt.Expect( Int64.compare( i64, Int64.make( 0xFFFFFFF8, 0x00000000)) == 0, |
| Int64.toStr(i64) +" == "+Int64.toStr(Int64.make( 0xFFFFFFF8, 0x00000000))); |
| |
| // edge case: the largest negative Int64 has no positive Int64 equivalent |
| trace('testI64(-9223372036854775808)'); |
| i64 = client.testI64( Int64.make( 0x80000000, 0x00000000)); // -9223372036854775808 |
| trace(' = $i64'); |
| rslt.Expect( Int64.compare( i64, Int64.make( 0x80000000, 0x00000000)) == 0, |
| Int64.toStr(i64) +" == "+Int64.toStr(Int64.make( 0x80000000, 0x00000000))); |
| |
| trace('testDouble(5.325098235)'); |
| var dub = client.testDouble(5.325098235); |
| trace(' = $dub'); |
| rslt.Expect(dub == 5.325098235, '$dub == 5.325098235'); |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_STRUCTS); |
| |
| trace('testStruct({"Zero", 1, -3, -5})'); |
| var o = new Xtruct(); |
| o.string_thing = "Zero"; |
| o.byte_thing = 1; |
| o.i32_thing = -3; |
| o.i64_thing = Int64.make(0,-5); |
| var i = client.testStruct(o); |
| trace(' = {"' + i.string_thing + '", ' + i.byte_thing +', ' |
| + i.i32_thing +', '+ Int64.toStr(i.i64_thing) + '}'); |
| rslt.Expect( i.string_thing == o.string_thing, "i.string_thing == o.string_thing"); |
| rslt.Expect( i.byte_thing == o.byte_thing, "i.byte_thing == o.byte_thing"); |
| rslt.Expect( i.i32_thing == o.i32_thing, "i.i64_thing == o.i64_thing"); |
| rslt.Expect( i.i32_thing == o.i32_thing, "i.i64_thing == o.i64_thing"); |
| |
| trace('testNest({1, {\"Zero\", 1, -3, -5}, 5})'); |
| var o2 = new Xtruct2(); |
| o2.byte_thing = 1; |
| o2.struct_thing = o; |
| o2.i32_thing = 5; |
| var i2 = client.testNest(o2); |
| i = i2.struct_thing; |
| trace(" = {" + i2.byte_thing + ", {\"" + i.string_thing + "\", " |
| + i.byte_thing + ", " + i.i32_thing + ", " + Int64.toStr(i.i64_thing) + "}, " |
| + i2.i32_thing + "}"); |
| rslt.Expect( i2.byte_thing == o2.byte_thing, "i2.byte_thing == o2.byte_thing"); |
| rslt.Expect( i2.i32_thing == o2.i32_thing, "i2.i32_thing == o2.i32_thing"); |
| rslt.Expect( i.string_thing == o.string_thing, "i.string_thing == o.string_thing"); |
| rslt.Expect( i.byte_thing == o.byte_thing, "i.byte_thing == o.byte_thing"); |
| rslt.Expect( i.i32_thing == o.i32_thing, "i.i32_thing == o.i32_thing"); |
| rslt.Expect( Int64.compare( i.i64_thing, o.i64_thing) == 0, "i.i64_thing == o.i64_thing"); |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_CONTAINERS); |
| |
| var mapout = new IntMap< haxe.Int32>(); |
| for ( j in 0 ... 5) |
| { |
| mapout.set(j, j - 10); |
| } |
| trace("testMap({"); |
| var first : Bool = true; |
| for( key in mapout.keys()) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(key + " => " + mapout.get(key)); |
| } |
| trace("})"); |
| |
| var mapin = client.testMap(mapout); |
| |
| trace(" = {"); |
| first = true; |
| for( key in mapin.keys()) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(key + " => " + mapin.get(key)); |
| rslt.Expect( mapin.get(key) == mapout.get(key), ' mapin.get($key) == mapout.get($key)'); |
| } |
| trace("}"); |
| for( key in mapout.keys()) |
| { |
| rslt.Expect(mapin.exists(key), 'mapin.exists($key)'); |
| } |
| |
| var listout = new List<Int>(); |
| for (j in -2 ... 3) |
| { |
| listout.add(j); |
| } |
| trace("testList({"); |
| first = true; |
| for( j in listout) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(j); |
| } |
| trace("})"); |
| |
| var listin = client.testList(listout); |
| |
| trace(" = {"); |
| first = true; |
| for( j in listin) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(j); |
| } |
| trace("}"); |
| |
| rslt.Expect(listin.length == listout.length, "listin.length == listout.length"); |
| var literout = listout.iterator(); |
| var literin = listin.iterator(); |
| while( literin.hasNext()) { |
| rslt.Expect(literin.next() == literout.next(), "literin[i] == literout[i]"); |
| } |
| |
| //set |
| var setout = new IntSet(); |
| for (j in -2 ... 3) |
| { |
| setout.add(j); |
| } |
| trace("testSet({"); |
| first = true; |
| for( j in setout) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(j); |
| } |
| trace("})"); |
| |
| var setin = client.testSet(setout); |
| |
| trace(" = {"); |
| first = true; |
| for( j in setin) |
| { |
| if (first) |
| { |
| first = false; |
| } |
| else |
| { |
| trace(", "); |
| } |
| trace(j); |
| rslt.Expect(setout.contains(j), 'setout.contains($j)'); |
| } |
| trace("}"); |
| rslt.Expect(setin.size == setout.size, "setin.length == setout.length"); |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_BASETYPES); |
| |
| trace("testEnum(ONE)"); |
| var ret = client.testEnum(Numberz.ONE); |
| trace(" = " + ret); |
| rslt.Expect(ret == Numberz.ONE, '$ret == Numberz.ONE'); |
| |
| trace("testEnum(TWO)"); |
| ret = client.testEnum(Numberz.TWO); |
| trace(" = " + ret); |
| rslt.Expect(ret == Numberz.TWO, '$ret == Numberz.TWO'); |
| |
| trace("testEnum(THREE)"); |
| ret = client.testEnum(Numberz.THREE); |
| trace(" = " + ret); |
| rslt.Expect(ret == Numberz.THREE, '$ret == Numberz.THREE'); |
| |
| trace("testEnum(FIVE)"); |
| ret = client.testEnum(Numberz.FIVE); |
| trace(" = " + ret); |
| rslt.Expect(ret == Numberz.FIVE, '$ret == Numberz.FIVE'); |
| |
| trace("testEnum(EIGHT)"); |
| ret = client.testEnum(Numberz.EIGHT); |
| trace(" = " + ret); |
| rslt.Expect(ret == Numberz.EIGHT, '$ret == Numberz.EIGHT'); |
| |
| trace("testTypedef(309858235082523)"); |
| var uid = client.testTypedef( Int64.make( 0x119D0, 0x7E08671B)); // 309858235082523 |
| trace(" = " + uid); |
| rslt.Expect( Int64.compare( uid, Int64.make( 0x119D0, 0x7E08671B)) == 0, |
| Int64.toStr(uid)+" == "+Int64.toStr(Int64.make( 0x119D0, 0x7E08671B))); |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_CONTAINERS); |
| |
| trace("testMapMap(1)"); |
| var mm = client.testMapMap(1); |
| trace(" = {"); |
| for( key in mm.keys()) |
| { |
| trace(key + " => {"); |
| var m2 = mm.get(key); |
| for( k2 in m2.keys()) |
| { |
| trace(k2 + " => " + m2.get(k2) + ", "); |
| } |
| trace("}, "); |
| } |
| trace("}"); |
| |
| var pos = mm.get(4); |
| var neg = mm.get(-4); |
| rslt.Expect( (pos != null) && (neg != null), "(pos != null) && (neg != null)"); |
| for (i in 0 ... 5) { |
| rslt.Expect( pos.get(i) == i, 'pos.get($i) == $i'); |
| rslt.Expect( neg.get(-i) == -i, 'neg.get(-$i) == -$i'); |
| } |
| |
| |
| rslt.StartTestGroup( TestResults.EXITCODE_FAILBIT_STRUCTS); |
| |
| var insane = new Insanity(); |
| insane.userMap = new IntMap< Int64>(); |
| insane.userMap.set( Numberz.FIVE, Int64.make(0,5000)); |
| var truck = new Xtruct(); |
| truck.string_thing = "Truck"; |
| truck.byte_thing = 8; |
| truck.i32_thing = 8; |
| truck.i64_thing = Int64.make(0,8); |
| insane.xtructs = new List<Xtruct>(); |
| insane.xtructs.add(truck); |
| trace("testInsanity()"); |
| var whoa = client.testInsanity(insane); |
| trace(" = {"); |
| for( key in whoa.keys()) |
| { |
| var val = whoa.get(key); |
| trace(key + " => {"); |
| |
| for( k2 in val.keys()) |
| { |
| var v2 = val.get(k2); |
| |
| trace(k2 + " => {"); |
| var userMap = v2.userMap; |
| |
| trace("{"); |
| if (userMap != null) |
| { |
| for( k3 in userMap.keys()) |
| { |
| trace(k3 + " => " + userMap.get(k3) + ", "); |
| } |
| } |
| else |
| { |
| trace("null"); |
| } |
| trace("}, "); |
| |
| var xtructs = v2.xtructs; |
| |
| trace("{"); |
| if (xtructs != null) |
| { |
| for( x in xtructs) |
| { |
| trace("{\"" + x.string_thing + "\", " |
| + x.byte_thing + ", " + x.i32_thing + ", " |
| + x.i32_thing + "}, "); |
| } |
| } |
| else |
| { |
| trace("null"); |
| } |
| trace("}"); |
| |
| trace("}, "); |
| } |
| trace("}, "); |
| } |
| trace("}"); |
| |
| |
| var first_map = whoa.get(Int64.make(0,1)); |
| var second_map = whoa.get(Int64.make(0,2)); |
| rslt.Expect( (first_map != null) && (second_map != null), "(first_map != null) && (second_map != null)"); |
| if ((first_map != null) && (second_map != null)) |
| { |
| var crazy2 = first_map.get(Numberz.TWO); |
| var crazy3 = first_map.get(Numberz.THREE); |
| var looney = second_map.get(Numberz.SIX); |
| rslt.Expect( (crazy2 != null) && (crazy3 != null) && (looney != null), |
| "(crazy2 != null) && (crazy3 != null) && (looney != null)"); |
| |
| rslt.Expect( Int64.compare( crazy2.userMap.get(Numberz.EIGHT), Int64.make(0,8)) == 0, |
| "crazy2.UserMap.get(Numberz.EIGHT) == 8"); |
| rslt.Expect( Int64.compare( crazy3.userMap.get(Numberz.EIGHT), Int64.make(0,8)) == 0, |
| "crazy3.UserMap.get(Numberz.EIGHT) == 8"); |
| rslt.Expect( Int64.compare( crazy2.userMap.get(Numberz.FIVE), Int64.make(0,5)) == 0, |
| "crazy2.UserMap.get(Numberz.FIVE) == 5"); |
| rslt.Expect( Int64.compare( crazy3.userMap.get(Numberz.FIVE), Int64.make(0,5)) == 0, |
| "crazy3.UserMap.get(Numberz.FIVE) == 5"); |
| |
| var crz2iter = crazy2.xtructs.iterator(); |
| var crz3iter = crazy3.xtructs.iterator(); |
| rslt.Expect( crz2iter.hasNext() && crz3iter.hasNext(), "crz2iter.hasNext() && crz3iter.hasNext()"); |
| var goodbye2 = crz2iter.next(); |
| var goodbye3 = crz3iter.next(); |
| rslt.Expect( crz2iter.hasNext() && crz3iter.hasNext(), "crz2iter.hasNext() && crz3iter.hasNext()"); |
| var hello2 = crz2iter.next(); |
| var hello3 = crz3iter.next(); |
| rslt.Expect( ! (crz2iter.hasNext() || crz3iter.hasNext()), "! (crz2iter.hasNext() || crz3iter.hasNext())"); |
| |
| rslt.Expect( hello2.string_thing == "Hello2", 'hello2.String_thing == "Hello2"'); |
| rslt.Expect( hello2.byte_thing == 2, 'hello2.Byte_thing == 2'); |
| rslt.Expect( hello2.i32_thing == 2, 'hello2.I32_thing == 2'); |
| rslt.Expect( Int64.compare( hello2.i64_thing, Int64.make(0,2)) == 0, 'hello2.I64_thing == 2'); |
| rslt.Expect( hello3.string_thing == "Hello2", 'hello3.String_thing == "Hello2"'); |
| rslt.Expect( hello3.byte_thing == 2, 'hello3.Byte_thing == 2'); |
| rslt.Expect( hello3.i32_thing == 2, 'hello3.I32_thing == 2'); |
| rslt.Expect( Int64.compare( hello3.i64_thing, Int64.make(0,2)) == 0, 'hello3.I64_thing == 2'); |
| |
| rslt.Expect( goodbye2.string_thing == "Goodbye4", 'goodbye2.String_thing == "Goodbye4"'); |
| rslt.Expect( goodbye2.byte_thing == 4, 'goodbye2.Byte_thing == 4'); |
| rslt.Expect( goodbye2.i32_thing == 4, 'goodbye2.I32_thing == 4'); |
| rslt.Expect( Int64.compare( goodbye2.i64_thing, Int64.make(0,4)) == 0, 'goodbye2.I64_thing == 4'); |
| rslt.Expect( goodbye3.string_thing == "Goodbye4", 'goodbye3.String_thing == "Goodbye4"'); |
| rslt.Expect( goodbye3.byte_thing == 4, 'goodbye3.Byte_thing == 4'); |
| rslt.Expect( goodbye3.i32_thing == 4, 'goodbye3.I32_thing == 4'); |
| rslt.Expect( Int64.compare( goodbye3.i64_thing, Int64.make(0,4)) == 0, 'goodbye3.I64_thing == 4'); |
| } |
| |
| var arg0 = 1; |
| var arg1 = 2; |
| var arg2 = Int64.make( 0x7FFFFFFF,0xFFFFFFFF); |
| var multiDict = new IntMap< String>(); |
| multiDict.set(1, "one"); |
| var arg4 = Numberz.FIVE; |
| var arg5 = Int64.make(0,5000000); |
| trace("Test Multi(" + arg0 + "," + arg1 + "," + arg2 + "," + multiDict + "," + arg4 + "," + arg5 + ")"); |
| var multiResponse = client.testMulti(arg0, arg1, arg2, multiDict, arg4, arg5); |
| trace(" = Xtruct(byte_thing:" + multiResponse.byte_thing + ",string_thing:" + multiResponse.string_thing |
| + ",i32_thing:" + multiResponse.i32_thing |
| + ",i64_thing:" + Int64.toStr(multiResponse.i64_thing) + ")"); |
| |
| rslt.Expect( multiResponse.string_thing == "Hello2", 'multiResponse.String_thing == "Hello2"'); |
| rslt.Expect( multiResponse.byte_thing == arg0, 'multiResponse.Byte_thing == arg0'); |
| rslt.Expect( multiResponse.i32_thing == arg1, 'multiResponse.I32_thing == arg1'); |
| rslt.Expect( Int64.compare( multiResponse.i64_thing, arg2) == 0, 'multiResponse.I64_thing == arg2'); |
| |
| |
| rslt.StartTestGroup( 0); |
| |
| trace("Test Oneway(1)"); |
| client.testOneway(1); |
| |
| if( ! args.skipSpeedTest) { |
| trace("Test Calltime()"); |
| var difft = Timer.stamp(); |
| for ( k in 0 ... 1000) { |
| client.testVoid(); |
| } |
| difft = Timer.stamp() - difft; |
| trace('$difft ms per testVoid() call'); |
| } |
| } |
| } |