// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Dart test program testing string interpolation of expressions.


class StringInterpolate2Test {

  static var F1;

  static void testMain() {
  
    F1 = "1 + 5 = ${1+5}";
    
    Expect.equals("1 + 5 = 6", F1);

    var fib = [1, 1, 2, 3, 5, 8, 13, 21];

    var i = 5;
    var s = "${i}";
    Expect.equals("5", s);

    s = "fib(${i}) = ${fib[i]}";
    Expect.equals("fib(5) = 8", s);

    i = 5;
    s = "$i squared is ${((x) => x*x)(i)}";
    Expect.equals("5 squared is 25", s);

    Expect.equals("8", "${fib.length}");
    // test single quote
    Expect.equals("8", '${fib.length}');
    // test multi-line
    Expect.equals("8", '${fib.
    length}');

    var map = { "red": 1, "green": 2, "blue": 3 };
    s = "green has value ${map["green"]}";
    Expect.equals("green has value 2", s);

    i = 0;
    b() => "${++i}";
    s = "aaa ${"bbb ${b()} bbb"} aaa ${b()}";
    Expect.equals("aaa bbb 1 bbb aaa 2", s);

    // test multiple levels of nesting, including changing quotes and
    // multiline string types
    s = "a ${(){ return 'b ${(){ return """
c""";}()}'; }()} d";
    Expect.equals("a b c d", s);
  }
}

main() {
  StringInterpolate2Test.testMain();
}
