package commonsNet

import std.unittest.*
import std.unittest.testmacro.*
import std.net.TcpServerSocket
import std.net.IPSocketAddress

private class SocketClientImpl <: SocketClient {}

@Test
class SocketClientTest {
    @TestCase
    func testProp() {
        let port = 32121u16
        let server = TcpServerSocket(bindAt: port)
        server.bind()
        let client = SocketClientImpl()
        client.setSocketFactory(None)
        client.setServerSocketFactory(None)
        client.defaultPort = port
        @Assert(client.defaultPort, port)
        client.connect(IPSocketAddress("127.0.0.1", port))

        client.readTimeout = Duration.second * 10
        @Assert(client.readTimeout ,  Duration.second * 10)

        client.writeTimeout = Duration.second * 10
        @Assert(client.writeTimeout ,  Duration.second * 10)

        @Assert(client.remoteAddress.toString(), "127.0.0.1")
        @Assert(client.localAddress.toString(), "127.0.0.1")
        @Assert(client.remotePort, port)

        @Assert(client.localPort > 0)
        @Assert(client.isConnected())

        client.disconnect()
    }
}