aboutsummaryrefslogblamecommitdiff
path: root/src/test/scala/xyz/driver/core/MessagesTest.scala
blob: 07b01583df7d80384cf42103fefecdcb3b02f0c5 (plain) (tree)
1
2
3
4
5
6
7
8
9
                       


                       
                                                           
                                         
                                        
                                       
 
                                        
 
                                                   





                                                                                                                   
                                                                             
 
                                                                         







                                                                                             

                                                


                                                        
                
 


                                                                                        







                                                                                                    
                                                                   







                                                                                                       
                                                                             

                                                  
                                                                
   

                                                                














                                                                
                                                                         




                                                               
 
package xyz.driver.core

import java.util.Locale

import com.typesafe.config.{ConfigException, ConfigFactory}
import org.scalatest.{FlatSpec, Matchers}
import xyz.driver.core.messages.Messages
import xyz.driver.core.logging.NoLogger

import scala.collection.JavaConverters._

class MessagesTest extends FlatSpec with Matchers {

  val englishLocaleMessages =
    Map("en.greeting" -> "Hello {0}!", "en.greetingFullName" -> "Hello {0} {1} {2}!", "en.hello" -> "Hello world!")

  "Messages" should "read messages from config and format with parameters" in {

    val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages.asJava)

    val messages = Messages.messages(messagesConfig, NoLogger, Locale.US)

    messages("hello") should be("Hello world!")
    messages("greeting", "Homer") should be("Hello Homer!")
    messages("greetingFullName", "Homer", "J", "Simpson") should be("Hello Homer J Simpson!")
  }

  it should "be able to read messages for different locales" in {

    val messagesConfig = ConfigFactory.parseMap(
      (englishLocaleMessages ++ Map(
        "zh.hello"            -> "你好,世界!",
        "zh.greeting"         -> "你好,{0}!",
        "zh.greetingFullName" -> "你好,{0} {1} {2}!"
      )).asJava)

    val englishMessages    = Messages.messages(messagesConfig, NoLogger, Locale.US)
    val englishMessagesToo = Messages.messages(messagesConfig, NoLogger, Locale.ENGLISH)
    val chineseMessages    = Messages.messages(messagesConfig, NoLogger, Locale.CHINESE)

    englishMessages("hello") should be("Hello world!")
    englishMessages("greeting", "Homer") should be("Hello Homer!")
    englishMessages("greetingFullName", "Homer", "J", "Simpson") should be("Hello Homer J Simpson!")

    englishMessagesToo("hello") should be(englishMessages("hello"))
    englishMessagesToo("greeting", "Homer") should be(englishMessages("greeting", "Homer"))
    englishMessagesToo("greetingFullName", "Homer", "J", "Simpson") should be(
      englishMessages("greetingFullName", "Homer", "J", "Simpson"))

    chineseMessages("hello") should be("你好,世界!")
    chineseMessages("greeting", "Homer") should be("你好,Homer!")
    chineseMessages("greetingFullName", "Homer", "J", "Simpson") should be("你好,Homer J Simpson!")
  }

  it should "raise exception when locale is not available" in {

    val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages.asJava)

    an[ConfigException.Missing] should be thrownBy
      Messages.messages(messagesConfig, NoLogger, Locale.GERMAN)
  }

  it should "be able to read nested keys in multiple forms" in {

    val configString =
      """
        | en {
        |   foo.bar = "Foo Bar"
        |
        |   baz {
        |     boo = "Baz Boo"
        |     booFormat = "Baz Boo {0}"
        |   }
        | }
      """.stripMargin

    val messagesConfig = ConfigFactory.parseString(configString)

    val messages = Messages.messages(messagesConfig, NoLogger, Locale.US)

    messages("foo.bar") should be("Foo Bar")
    messages("baz.boo") should be("Baz Boo")
    messages("baz.booFormat", "Test") should be("Baz Boo Test")
  }
}