| // Copyright 2025 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gn/functions.h" |
| #include "gn/test_with_scope.h" |
| #include "util/test/test.h" |
| |
| TEST(LenTest, StringLen) { |
| TestWithScope setup; |
| FunctionCallNode function_call; |
| Err err; |
| std::vector<Value> args; |
| args.push_back(Value(nullptr, "foo")); |
| Value result = functions::RunLen(setup.scope(), &function_call, args, &err); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(result.type(), Value::INTEGER); |
| EXPECT_EQ(result.int_value(), 3); |
| } |
| |
| TEST(LenTest, ListLen) { |
| TestWithScope setup; |
| FunctionCallNode function_call; |
| Err err; |
| std::vector<Value> args; |
| Value list_value(nullptr, Value::LIST); |
| list_value.list_value().push_back(Value(nullptr, "a")); |
| list_value.list_value().push_back(Value(nullptr, "b")); |
| args.push_back(list_value); |
| Value result = functions::RunLen(setup.scope(), &function_call, args, &err); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(result.type(), Value::INTEGER); |
| EXPECT_EQ(result.int_value(), 2); |
| } |
| |
| TEST(LenTest, InvalidType) { |
| TestWithScope setup; |
| FunctionCallNode function_call; |
| Err err; |
| std::vector<Value> args; |
| args.push_back(Value(nullptr, static_cast<int64_t>(123))); |
| functions::RunLen(setup.scope(), &function_call, args, &err); |
| EXPECT_TRUE(err.has_error()); |
| } |
| |
| TEST(LenTest, WrongArugmentCount) { |
| TestWithScope setup; |
| FunctionCallNode function_call; |
| Err err; |
| std::vector<Value> args; |
| // No Args: |
| functions::RunLen(setup.scope(), &function_call, args, &err); |
| EXPECT_TRUE(err.has_error()); |
| |
| // Two Args: |
| args.push_back(Value(nullptr, "a")); |
| args.push_back(Value(nullptr, "b")); |
| functions::RunLen(setup.scope(), &function_call, args, &err); |
| EXPECT_TRUE(err.has_error()); |
| } |