#!/usr/bin/env ruby
# encoding: UTF-8
# **********************************************************************
#
# Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
#
# **********************************************************************


require 'Ice'

def test(b)
    if !b
        raise RuntimeError, 'test assertion failed'
    end
end

class Client < Ice::Application
    def run(args)
        print "testing load properties from UTF-8 path using Ice::Application... "
        properties = Ice::Application::communicator().getProperties()
        test(properties.getProperty("Ice.Trace.Network") == "1")
        test(properties.getProperty("Ice.Trace.Protocol") == "1")
        test(properties.getProperty("Config.Path").eql? "./config/中国_client.config")
        test(properties.getProperty("Ice.ProgramName") == "PropertiesClient")
        test(Ice::Application::appName() == properties.getProperty("Ice.ProgramName"))
        puts "ok"
        return true
    end
end


print "testing load properties from UTF-8 path... "
properties = Ice.createProperties(ARGV)
properties.load("./config/中国_client.config")
test(properties.getProperty("Ice.Trace.Network") == "1")
test(properties.getProperty("Ice.Trace.Protocol") == "1")
test(properties.getProperty("Config.Path").eql? "./config/中国_client.config")
test(properties.getProperty("Ice.ProgramName") == "PropertiesClient")
puts "ok"

app = Client.new()
app.main(ARGV, "./config/中国_client.config")

print "testing using Ice.Config with multiple config files... "
properties = Ice.createProperties(["--Ice.Config=config/config.1, config/config.2, config/config.3"]);
test(properties.getProperty("Config1") == "Config1");
test(properties.getProperty("Config2") == "Config2");
test(properties.getProperty("Config3") == "Config3");
puts "ok"


print "testing configuration file escapes... "
properties = Ice.createProperties(["--Ice.Config=config/escapes.cfg"])

props = { "Foo\tBar" => "3",
          "Foo\\tBar" => "4",
          "Escape\\ Space" => "2",
          "Prop1" => "1",
          "Prop2" => "2",
          "Prop3" => "3",
          "My Prop1" => "1",
          "My Prop2" => "2",
          "My.Prop1" => "a property",
          "My.Prop2" => "a     property",
          "My.Prop3" => "  a     property  ",
          "My.Prop4" => "  a     property  ",
          "My.Prop5" => "a \\ property",
          "foo=bar" => "1",
          "foo#bar" => "2",
          "foo bar" => "3",
          "A" => "1",
          "B" => "2 3 4",
          "C" => "5=#6",
          "AServer" => "\\\\server\\dir",
          "BServer" => "\\server\\dir" }

props.each do |key, value|
   test(properties.getProperty(key) == value)
end
puts "ok"


exit(0)
