SUAPI-CppWrapper
C++WrapperforSketchUpCAPI
TypedValueTests.cpp
1 #include "SketchUpAPITests.hpp"
2 #include "gtest/gtest.h"
3 
4 #include <vector>
5 
6 #include <SketchUpAPI/sketchup.h>
7 
8 #include "SUAPI-CppWrapper/model/TypedValue.hpp"
9 #include "SUAPI-CppWrapper/model/Model.hpp"
10 #include "SUAPI-CppWrapper/Initialize.hpp"
11 #include "SUAPI-CppWrapper/model/AttributeDictionary.hpp"
12 #include "ModelPath.h"
13 
14 TEST(TypedValue, bool_value_true)
15 {
16  SUTypedValueRef su_typed_value = SU_INVALID;
17  SU(SUTypedValueCreate(&su_typed_value));
18  SU(SUTypedValueSetBool(su_typed_value, true));
19 
20  CW::TypedValue typed_value(su_typed_value);
21  auto value = typed_value.bool_value();
22 
23  ASSERT_TRUE(value);
24 }
25 
26 TEST(TypedValue, bool_value_false)
27 {
28  SUTypedValueRef su_typed_value = SU_INVALID;
29  SU(SUTypedValueCreate(&su_typed_value));
30  SU(SUTypedValueSetBool(su_typed_value, false));
31 
32  CW::TypedValue typed_value(su_typed_value);
33  auto value = typed_value.bool_value();
34 
35  ASSERT_FALSE(value);
36 }
37 
38 TEST(DISABLED_TypedValue, bool_value_wrong_type)
39 {
40  SUColor color{ 255, 128, 64, 32 };
41 
42  SUTypedValueRef su_typed_value = SU_INVALID;
43  SU(SUTypedValueCreate(&su_typed_value));
44  SU(SUTypedValueSetColor(su_typed_value, &color));
45 
46  CW::TypedValue typed_value(su_typed_value);
47  // TODO(thomthom): Should be a custom exception type:
48  ASSERT_THROW(typed_value.bool_value(), std::exception);
49 }
50 
51 
52 TEST(TypedValue, typed_value_array_GetInts)
53 {
54  SUTypedValueRef su_typed_value = SU_INVALID;
55  SU(SUTypedValueCreate(&su_typed_value));
56  std::vector<SUTypedValueRef> su_values;
57  for (int32_t i = 0; i < 3; ++i)
58  {
59  SUTypedValueRef su_value = SU_INVALID;
60  SU(SUTypedValueCreate(&su_value));
61  SU(SUTypedValueSetInt32(su_value, i));
62  su_values.emplace_back(su_value);
63  }
64  SU(SUTypedValueSetArrayItems(su_typed_value, su_values.size(), su_values.data()));
65 
66  CW::TypedValue typed_value(su_typed_value);
67  auto values = typed_value.typed_value_array();
68 
69  ASSERT_EQ(3, values.size());
70 
71  ASSERT_EQ(0, values.at(0).int32_value());
72  ASSERT_EQ(1, values.at(1).int32_value());
73  ASSERT_EQ(2, values.at(2).int32_value());
74 }
75 
76 TEST(TypedValue, get_mixed_array_items)
77 {
78  std::string filepath = TEST_MODEL_PATH + "/issue-48.skp";
79  CW::initialize();
80  auto model = CW::Model(filepath);
81  CW::TypedValue default_value;
82  CW::TypedValue typed_value_array = model.get_attribute("TypedValues", "Array<mixed>", default_value);
83  size_t count = 0;
84  SUResult res = SUTypedValueGetNumArrayItems(typed_value_array, &count);
85  ASSERT_EQ(3, count);
86 }