content: // Copyright 2018 Google Inc. Use of this source code is governed by an
  // MIT-style license that can be found in the LICENSE file or at
  // https://opensource.org/licenses/MIT.
  
  @TestOn('vm')
  library;
  
  import 'package:test/test.dart';
  
  import 'package:sass/sass.dart';
  
  import 'utils.dart';
  
  void main() {
    group("a function value", () {
      late SassFunction value;
      setUp(() => value = parseValue("get-function('red')") as SassFunction);
  
      test("has a callable with the given name", () {
        expect(value.callable.name, equals("red"));
      });
  
      test("is a function", () {
        expect(value.assertFunction(), equals(value));
      });
  
      test("equals the same function", () {
        expect(value, equalsWithHash(parseValue("get-function('red')")));
      });
  
      test("isn't any other type", () {
        expect(value.assertBoolean, throwsSassScriptException);
        expect(value.assertCalculation, throwsSassScriptException);
        expect(value.assertColor, throwsSassScriptException);
        expect(value.assertMap, throwsSassScriptException);
        expect(value.tryMap(), isNull);
        expect(value.assertNumber, throwsSassScriptException);
        expect(value.assertString, throwsSassScriptException);
      });
    });
  
    test("can return a new function", () {
      var css = compileString(
        "a {b: call(foo(), 12)}",
        functions: [
          Callable("foo", "", (_) {
            return SassFunction(
              Callable(
                "bar",
                r"$arg",
                (arguments) => SassNumber(arguments[0].assertNumber().value + 1),
              ),
            );
          }),
        ],
      );
  
      expect(css, equalsIgnoringWhitespace("a { b: 13; }"));
    });
  }
  