Skip to content

Commit 351a1b3

Browse files
committed
test: Add test for behavior if classdef changes between save and load (bug #67414).
* test/classdef-load-save/classdef-load-save.tst: Add test for behavior in loadobj if the name of a property changed between saving and loading of a classdef object. * test/classdef-load-save/loadobj_changed_class.m, test/classdef-load-save/changed-class/loadobj_changed_class.m: Add new files for test. * test/classdef-load-save/module.mk: Add new files to dist tarball. * test/classdef-load-save/loadobj_class.m (loadobj): Adapt to work with struct or classdef object input argument.
1 parent 14dc112 commit 351a1b3

File tree

5 files changed

+71
-7
lines changed

5 files changed

+71
-7
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
classdef loadobj_changed_class
2+
3+
properties
4+
a
5+
prop_later
6+
endproperties
7+
8+
methods (Static)
9+
function obj = loadobj (s)
10+
obj = loadobj_changed_class ();
11+
if isstruct (s)
12+
obj.a = "changed-struct";
13+
else
14+
obj.a = "changed-object";
15+
endif
16+
endfunction
17+
endmethods
18+
19+
endclassdef

test/classdef-load-save/classdef-load-save.tst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,32 @@
171171
%! delete (savefile);
172172
%! end_unwind_protect
173173

174+
## No constructor, ConstructOnLoad = false, loadobj is defined, no saveobj
175+
## Class definition changes between saving and loading the object
176+
%!test <67414>
177+
%! obj = loadobj_changed_class ();
178+
%! obj.a = 0;
179+
%! savefile = fullfile (tempdir (), "oct-changed-class.sav");
180+
%! save ('-text', savefile, 'obj');
181+
%! unwind_protect
182+
%! clear obj;
183+
%! load (savefile);
184+
%! assert (obj.a, "object");
185+
%! clear obj;
186+
%! ## change to directory with classdef with renamed property name
187+
%! cd ("changed-class");
188+
%! clear classes; # includes "clear all"
189+
%! savefile = fullfile (tempdir (), "oct-changed-class.sav");
190+
%! load (savefile);
191+
%! assert (obj.a, "changed-struct");
192+
%! unwind_protect_cleanup
193+
%! delete (savefile);
194+
%! [~, curr_dir] = fileparts (pwd ());
195+
%! if (strcmp (curr_dir, "changed-class"))
196+
%! cd ..
197+
%! endif
198+
%! end_unwind_protect
199+
174200
## No constructor, ConstructOnLoad = false, loadobj is defined, saveobj is defined
175201
%!test
176202
%! obj = loadobj_saveobj_class ();
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
classdef loadobj_changed_class
2+
3+
properties
4+
a
5+
prop_prior
6+
endproperties
7+
8+
methods (Static)
9+
function obj = loadobj (s)
10+
obj = loadobj_changed_class ();
11+
if isstruct (s)
12+
obj.a = "struct";
13+
else
14+
obj.a = "object";
15+
endif
16+
endfunction
17+
endmethods
18+
19+
endclassdef

test/classdef-load-save/loadobj_class.m

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
methods (Static)
33
function obj = loadobj (s)
44
obj = loadobj_class ();
5-
if (isstruct (s))
6-
obj.a = s.a;
7-
obj.b = s.b;
8-
obj.c = s.c;
9-
obj.d = s.d;
10-
obj.e = s.e;
11-
endif
5+
obj.a = s.a;
6+
obj.b = s.b;
7+
obj.c = s.c;
8+
obj.d = s.d;
9+
obj.e = s.e;
1210
endfunction
1311
endmethods
1412
endclassdef

test/classdef-load-save/module.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
classdef_load_save_TEST_FILES = \
2+
%reldir%/changed-class/loadobj_changed_class.m \
23
%reldir%/classdef-load-save.tst \
34
%reldir%/custom_saveobj.m \
45
%reldir%/invalid_saveobj_class.m \
6+
%reldir%/loadobj_changed_class.m \
57
%reldir%/loadobj_class.m \
68
%reldir%/loadobj_saveobj_class.m \
79
%reldir%/regular_class.m \

0 commit comments

Comments
 (0)