This is an automated email from the ASF dual-hosted git repository.

kevingurney pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new fc96fd2fb5 GH-37245: [MATLAB] `arrow.internal.proxy.validate` throws 
`MATLAB:UndefinedFunction` when crafting the message to display when throwing 
the `arrow:proxy:ProxyNameMismatch` error  (#37248)
fc96fd2fb5 is described below

commit fc96fd2fb5f2e3ca6f8e1dbaa86c095641653920
Author: sgilmore10 <[email protected]>
AuthorDate: Fri Aug 18 13:59:27 2023 -0400

    GH-37245: [MATLAB] `arrow.internal.proxy.validate` throws 
`MATLAB:UndefinedFunction` when crafting the message to display when throwing 
the `arrow:proxy:ProxyNameMismatch` error  (#37248)
    
    
    
    ### Rationale for this change
    
    When constructing the message to display for with the 
`arrow:proxy:ProxyNameMismatch` error,  we refer to an undefined variable in 
`arrow.internal.proxy.validate()`. This causes the function to throw a 
`MATLAB:UndefinedFunction` error instead of the intended one.
    
    Here's an example of this bug:
    
    ```matlab
    >> a = arrow.array([1 2 3]);
    >> arrow.internal.proxy.validate(a.Proxy, "WrongProxyName")
    Unrecognized function or variable 'proxyName'.
    
    Error in arrow.internal.proxy.validate (line 26)
            msg = "Proxy class name is " + proxyName + ", but expected " + 
expectedProxyName;
    ```
    
    This was the expected error message:
    
    ```matlab
    >> a = arrow.array([1 2 3]);
    >> arrow.internal.proxy.validate(a.Proxy, "WrongProxyName")
    Error using arrow.internal.proxy.validate
    Proxy class name is arrow.array.proxy.Float64Array, but expected 
WrongProxyName
    ```
    
    ### What changes are included in this PR?
    
    1. Fixed the typos in `arrow.internal.proxy.validate()` to resolve the 
`MATLAB:UndefinedFunction` error
    2. Added a new test class `test/arrow/internal/proxy/tValidate.m` to test  
`arrow.internal.proxy.validate()`
    3. Updated the error message to display when throwing an 
`arrow:proxy:ProxyNameMismatch` error:
    
    ```matlab
    >> a = arrow.array([1 2 3]);
    >> arrow.internal.proxy.validate(a.Proxy, "WrongProxyName")
    Error using arrow.internal.proxy.validate
    The Name property of the Proxy provided is 
"arrow.array.proxy.Float64Array", but
    expected it to be "WrongProxyName".
    ```
    
    ### Are these changes tested?
    
    Yes, added a new test class `test/arrow/internal/proxy/tValidate.m`.
    
    ### Are there any user-facing changes?
    
    No.
    
    * Closes: #37245
    
    Authored-by: Sarah Gilmore <[email protected]>
    Signed-off-by: Kevin Gurney <[email protected]>
---
 .../src/matlab/+arrow/+internal/+proxy/validate.m  |  5 +--
 matlab/test/arrow/internal/proxy/tValidate.m       | 42 ++++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/matlab/src/matlab/+arrow/+internal/+proxy/validate.m 
b/matlab/src/matlab/+arrow/+internal/+proxy/validate.m
index 1b2b3649e4..0aeb6074fc 100644
--- a/matlab/src/matlab/+arrow/+internal/+proxy/validate.m
+++ b/matlab/src/matlab/+arrow/+internal/+proxy/validate.m
@@ -18,12 +18,13 @@ function validate(proxy, expectedName)
 % proxy.Name and expectedName are not equal.
     arguments
         proxy(1, 1) libmexclass.proxy.Proxy
-        expectedName(1, 1) string
+        expectedName(1, 1) string {mustBeNonmissing, mustBeNonzeroLengthText}
     end
 
     if proxy.Name ~= expectedName
         errid = "arrow:proxy:ProxyNameMismatch";
-        msg = "Proxy class name is " + proxyName + ", but expected " + 
expectedProxyName;
+        msg = compose("The Name property of the Proxy provided is ""%s"", " + 
...
+            "but expected it to be ""%s"".", proxy.Name, expectedName);
         error(errid, msg);
     end
 end
diff --git a/matlab/test/arrow/internal/proxy/tValidate.m 
b/matlab/test/arrow/internal/proxy/tValidate.m
new file mode 100644
index 0000000000..268c71f745
--- /dev/null
+++ b/matlab/test/arrow/internal/proxy/tValidate.m
@@ -0,0 +1,42 @@
+%TVALIDATE Unit tests for arrow.internal.proxy.validate
+
+% Licensed to the Apache Software Foundation (ASF) under one or more
+% contributor license agreements.  See the NOTICE file distributed with
+% this work for additional information regarding copyright ownership.
+% The ASF licenses this file to you under the Apache License, Version
+% 2.0 (the "License"); you may not use this file except in compliance
+% with the License.  You may obtain a copy of the License at
+%
+%   http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS,
+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+% implied.  See the License for the specific language governing
+% permissions and limitations under the License.
+
+classdef tValidate < matlab.unittest.TestCase
+
+    methods(Test)
+        function ProxyNameMatches(testCase)
+            % Verify arrow.internal.proxy.validate() does not throw an 
+            % error if the Name property of the Proxy provided matches
+            % the expected proxy name.
+            import arrow.internal.proxy.validate
+            a = arrow.array(1);
+            fcn = @() validate(a.Proxy, a.Proxy.Name);
+            testCase.verifyWarningFree(fcn);
+        end
+
+        function ProxyNameMismatchError(testCase)
+            % Verify arrow.internal.proxy.validate() throws an error 
+            % whose identifier is "arrow:proxy:ProxyNameMismatch" if the
+            % Name property of the Proxy provided does not match the 
+            % expected proxy name.
+            import arrow.internal.proxy.validate
+            a = arrow.array(1);
+            fcn = @() validate(a.Proxy, "NotAProxyName");
+            testCase.verifyError(fcn, "arrow:proxy:ProxyNameMismatch");
+        end
+    end
+end
\ No newline at end of file

Reply via email to