1919import static com .google .common .truth .Truth .assertThat ;
2020
2121import java .io .IOException ;
22+ import java .util .Arrays ;
23+ import java .util .List ;
2224import java .util .Optional ;
2325
2426public class TestCfSubConventionProvider {
2527
2628 private static final NetcdfDataset .Builder <?> CF_NCDB = NetcdfDataset .builder ();
27- private static final NetcdfDataset .Builder <?> YOLO_NCDB = NetcdfDataset .builder ();
29+ private static final NetcdfDataset .Builder <?> YOLO_EXACT_NCDB = NetcdfDataset .builder ();
30+ private static final NetcdfDataset .Builder <?> YOLO_PARTIAL_NCDB = NetcdfDataset .builder ();
2831
2932 @ BeforeClass
3033 public static void makeNcdBuilders () throws IOException {
3134 NetcdfFile .Builder <?> cfNcfb = NetcdfFile .builder ();
32- NetcdfFile .Builder <?> yoloNcfb = NetcdfFile .builder ();
35+ NetcdfFile .Builder <?> yoloExactNcfb = NetcdfFile .builder ();
36+ NetcdfFile .Builder <?> yoloPartialNcfb = NetcdfFile .builder ();
3337
3438 Group .Builder cfRoot = Group .builder ().setName ("" );
3539 cfNcfb .setRootGroup (cfRoot );
@@ -42,14 +46,30 @@ public static void makeNcdBuilders() throws IOException {
4246 throw new IOException ("Error building NetcdfFile object to mock a CF netCDF file for testing." , ioe );
4347 }
4448
45- Group .Builder yoloRoot = Group .builder ().setName ("" );
46- yoloNcfb .setRootGroup (yoloRoot );
47- Attribute yoloConvAttr =
49+ Group .Builder yoloExactRoot = Group .builder ().setName ("" );
50+ yoloExactNcfb .setRootGroup (yoloExactRoot );
51+ // exactly match the convention name
52+ Attribute yoloExactConvAttr =
4853 Attribute .builder (CDM .CONVENTIONS ).setStringValue (CfSubConvForTest .CONVENTION_NAME ).build ();
49- yoloRoot .addAttribute (yoloConvAttr );
50- try (NetcdfFile yoloNcf = yoloNcfb .build ()) {
51- YOLO_NCDB .copyFrom (yoloNcf );
52- YOLO_NCDB .setOrgFile (yoloNcf );
54+ yoloExactRoot .addAttribute (yoloExactConvAttr );
55+ try (NetcdfFile yoloExactNcf = yoloExactNcfb .build ()) {
56+ YOLO_EXACT_NCDB .copyFrom (yoloExactNcf );
57+ YOLO_EXACT_NCDB .setOrgFile (yoloExactNcf );
58+ } catch (IOException ioe ) {
59+ throw new IOException ("Error building NetcdfFile object to mock a CF/YOLO netCDF file for testing." , ioe );
60+ }
61+
62+ Group .Builder yoloPartialRoot = Group .builder ().setName ("" );
63+ yoloPartialNcfb .setRootGroup (yoloPartialRoot );
64+ // change up the convention name used so that it is not an exact match with the test convention name
65+ Attribute yoloPartialConvAttr = Attribute .builder (CDM .CONVENTIONS )
66+ .setStringValue (
67+ CfSubConvForTest .CONVENTION_NAME .replaceFirst (CfSubConvForTest .CONVENTAION_NAME_STARTS_WITH , "CF-1.200" ))
68+ .build ();
69+ yoloPartialRoot .addAttribute (yoloPartialConvAttr );
70+ try (NetcdfFile yoloPartialNcf = yoloPartialNcfb .build ()) {
71+ YOLO_PARTIAL_NCDB .copyFrom (yoloPartialNcf );
72+ YOLO_PARTIAL_NCDB .setOrgFile (yoloPartialNcf );
5373 } catch (IOException ioe ) {
5474 throw new IOException ("Error building NetcdfFile object to mock a CF/YOLO netCDF file for testing." , ioe );
5575 }
@@ -62,10 +82,15 @@ public void testCfSubLoadOrder() throws IOException {
6282 CoordSystemBuilder cfFac = cfFacOpt .get ();
6383 assertThat (cfFac ).isInstanceOf (CF1Convention .class );
6484
65- Optional <CoordSystemBuilder > yoloFacOpt = CoordSystemFactory .factory (YOLO_NCDB , null );
66- assertThat (yoloFacOpt .isPresent ());
67- CoordSystemBuilder yoloFac = yoloFacOpt .get ();
68- assertThat (yoloFac ).isInstanceOf (CfSubConvForTest .class );
69- assertThat (yoloFac .getConventionUsed ()).isEqualTo (CfSubConvForTest .CONVENTION_NAME );
85+ // both datasets (exact and partial matches of the sub-convention name) should result in the
86+ // sub-convention being used.
87+ List <NetcdfDataset .Builder <?>> subConvBuilders = Arrays .asList (YOLO_EXACT_NCDB , YOLO_PARTIAL_NCDB );
88+ for (NetcdfDataset .Builder <?> subConvBuilder : subConvBuilders ) {
89+ Optional <CoordSystemBuilder > yoloFacOpt = CoordSystemFactory .factory (subConvBuilder , null );
90+ assertThat (yoloFacOpt .isPresent ());
91+ CoordSystemBuilder yoloFac = yoloFacOpt .get ();
92+ assertThat (yoloFac ).isInstanceOf (CfSubConvForTest .class );
93+ assertThat (yoloFac .getConventionUsed ()).isEqualTo (CfSubConvForTest .CONVENTION_NAME );
94+ }
7095 }
7196}
0 commit comments