Skip to content

Commit

Permalink
GH-37245: [MATLAB] arrow.internal.proxy.validate throws `MATLAB:Und…
Browse files Browse the repository at this point in the history
…efinedFunction` 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 <sgilmore@mathworks.com>
Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
  • Loading branch information
sgilmore10 committed Aug 18, 2023
1 parent 5abdc6e commit fc96fd2
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
5 changes: 3 additions & 2 deletions matlab/src/matlab/+arrow/+internal/+proxy/validate.m
Original file line number Diff line number Diff line change
Expand Up @@ -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
42 changes: 42 additions & 0 deletions matlab/test/arrow/internal/proxy/tValidate.m
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit fc96fd2

Please sign in to comment.