// Copyright (c) 2016, 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.

import 'package:expect/expect.dart';
import 'helpers/lax_json.dart';

void main() {
  // Primitives.
  Expect.isTrue(decode('true'));
  Expect.isTrue(decode(' true'));
  Expect.isTrue(decode('true '));
  Expect.isTrue(decode('true// '));
  Expect.isTrue(decode('// \ntrue'));
  Expect.isTrue(decode('\ttrue\r'));
  Expect.isTrue(decode('\t\ntrue\r\n'));
  Expect.isTrue(decode('true/* */'));
  Expect.isTrue(decode('/* */true'));
  Expect.isTrue(decode('/* false */true '));

  Expect.isFalse(decode('false'));
  Expect.isNull(decode('null'));

  // Strings.
  Expect.equals(decode('"foo"'), "foo");
  Expect.equals(decode('"foo bar baz"'), "foo bar baz");
  Expect.equals(decode(r'"\""'), r'"');
  Expect.equals(decode(r'"\\"'), r'\');
  Expect.equals(decode(r'"\/"'), '/');
  Expect.equals(decode(r'"\b"'), '\b');
  Expect.equals(decode(r'"\f"'), '\f');
  Expect.equals(decode(r'"\r"'), '\r');
  Expect.equals(decode(r'"\n"'), '\n');
  Expect.equals(decode(r'"\t"'), '\t');
  Expect.equals(decode(r'"\t\"\\\/\f\nfoo\r\t"'), '\t\"\\/\f\nfoo\r\t');

  // Lists.
  Expect.listEquals(decode('[]'), []);
  Expect.listEquals(decode('[\n]'), []);
  Expect.listEquals(decode('["foo"]'), ['foo']);
  Expect.listEquals(decode('["foo",]'), ['foo']);
  Expect.listEquals(decode('["foo", "bar", true, \nnull\n,false,]'),
      ['foo', 'bar', true, null, false]);

  // Maps.
  Expect.mapEquals(decode('{}'), {});
  Expect.mapEquals(decode('{\n}'), {});
  Expect.mapEquals(decode('{"foo":"bar"}'), {'foo': 'bar'});
  Expect.mapEquals(decode('{"foo":"bar",}'), {'foo': 'bar'});
  Expect.mapEquals(
      decode('{"foo":true, "bar": false, "baz": true, '
          '"boz": \nnull\n,"qux": false,}'),
      {'foo': true, 'bar': false, 'baz': true, 'boz': null, 'qux': false});
}
