Skip to content

Commit 6f41f6f

Browse files
author
jan
committed
Made test example extension of example
For the test to run the manifest has to "export" the example
1 parent 31be68a commit 6f41f6f

File tree

6 files changed

+71
-96
lines changed

6 files changed

+71
-96
lines changed

io.sloeber.core/META-INF/MANIFEST.MF

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ Export-Package: cc.arduino.packages;x-internal:=true,
5454
io.sloeber.core.communication;x-internal:=true,
5555
io.sloeber.core.core;x-internal:=true,
5656
io.sloeber.core.eclipseIntegrations;uses:="org.eclipse.core.variables",
57+
io.sloeber.core.internal;x-friends:="io.sloeber.tests",
5758
io.sloeber.core.listeners;x-internal:=true,
5859
io.sloeber.core.managers;x-internal:=true,
5960
io.sloeber.core.natures;x-internal:=true,

io.sloeber.core/src/io/sloeber/core/api/CodeDescription.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ Set<IArduinoLibraryVersion> getNeededLibraries() {
149149

150150
if (myCodeType == CodeTypes.sample) {
151151
for (IExample curExample : myExamples) {
152-
libraries.add(curExample.getArduinoLibrary());
152+
libraries.addAll(curExample.getArduinoLibraries());
153153
}
154154
}
155155
libraries.remove(null);
@@ -231,7 +231,10 @@ public String getLibraryName() {
231231
switch (myCodeType) {
232232
case sample:
233233
IExample example=myExamples.iterator().next();
234-
return example.getArduinoLibrary().getName();
234+
for(IArduinoLibraryVersion curLib:example.getArduinoLibraries()) {
235+
return curLib.getName();
236+
}
237+
break;
235238
default:
236239
break;
237240
}

io.sloeber.core/src/io/sloeber/core/api/IExample.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package io.sloeber.core.api;
22

3+
import java.util.Collection;
4+
35
import org.eclipse.core.runtime.IPath;
46

57
public interface IExample {
6-
public IArduinoLibraryVersion getArduinoLibrary();
8+
public Collection<IArduinoLibraryVersion> getArduinoLibraries();
79
public IPath getCodeLocation();
810
public String getName();
911
public String getID();

io.sloeber.core/src/io/sloeber/core/internal/Example.java

+21-13
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,54 @@
55

66
import static io.sloeber.core.api.Const.*;
77

8+
import java.util.Collection;
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
812
import io.sloeber.core.api.ConfigurationPreferences;
913
import io.sloeber.core.api.IArduinoLibraryVersion;
1014
import io.sloeber.core.api.IExample;
1115

1216
public class Example implements IExample {
13-
private IArduinoLibraryVersion myLib;
14-
private IPath myExampleLocation;
15-
private IPath myFQN;
16-
private String myName;
17+
protected IPath myFQN;
18+
protected Map<String, IArduinoLibraryVersion> myLibs=new HashMap<>();
19+
protected IPath myExampleLocation;
1720

1821
@Override
1922
public String toSaveString() {
2023
return String.join(SEMI_COLON, getBreadCrumbs());
2124
}
2225

26+
protected Example() {
27+
28+
}
2329
public Example(IArduinoLibraryVersion lib, Path path) {
24-
myLib = lib;
30+
if (lib != null) {
31+
myLibs.put(lib.getFQN().toString(), lib);
32+
}
2533
myExampleLocation = path;
26-
myName = path.lastSegment();
2734
calculateFQN();
2835
}
2936

3037
private void calculateFQN() {
31-
if (myLib == null) {
32-
myFQN = Path.fromPortableString(EXAMPLES_FOLDER );
38+
if (myLibs.size() == 0) {
39+
myFQN = Path.fromPortableString(EXAMPLES_FOLDER);
3340
IPath exampleFolder = ConfigurationPreferences.getInstallationPathExamples();
3441
if (exampleFolder.isPrefixOf(myExampleLocation)) {
3542
myFQN = myFQN.append(myExampleLocation.makeRelativeTo(exampleFolder));
3643
} else {
3744
myFQN = myFQN.append(myExampleLocation);
3845
}
3946
} else {
40-
myFQN = myLib.getFQN().append(myName);
47+
for (IArduinoLibraryVersion myLib : myLibs.values()) {
48+
myFQN = myLib.getFQN().append(getName());
49+
}
4150
}
4251
}
4352

4453
@Override
45-
public IArduinoLibraryVersion getArduinoLibrary() {
46-
return myLib;
54+
public Collection<IArduinoLibraryVersion> getArduinoLibraries() {
55+
return myLibs.values();
4756
}
4857

4958
@Override
@@ -53,7 +62,7 @@ public IPath getCodeLocation() {
5362

5463
@Override
5564
public String getName() {
56-
return myName;
65+
return myExampleLocation.lastSegment();
5766
}
5867

5968
@Override
@@ -64,7 +73,6 @@ public String getID() {
6473
@Override
6574
public String[] getBreadCrumbs() {
6675
return myFQN.segments();
67-
6876
}
6977

7078
}

io.sloeber.tests/src/io/sloeber/core/CreateAndCompileLibraryExamplesTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public static Stream<Arguments> CreateAndCompileLibraryExamplesTestData() throws
5959
MCUBoard curBoard = Example.pickBestBoard(example, myBoards);
6060

6161
if (curBoard != null) {
62-
ret.add(Arguments.of( example.getLibName() + ":" + fqn + ":" + curBoard.getID(), curBoard,
62+
ret.add(Arguments.of(fqn + ":" + curBoard.getID(), curBoard,
6363
example ));
6464
}
6565
}

io.sloeber.tests/src/io/sloeber/core/Example.java

+40-79
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,62 @@
22

33
import java.util.ArrayList;
44
import java.util.HashMap;
5+
import java.util.HashSet;
56
import java.util.LinkedList;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Set;
910

1011
import org.eclipse.core.runtime.IPath;
12+
import org.eclipse.core.runtime.Path;
1113

12-
import io.sloeber.core.api.IArduinoLibraryVersion;
13-
import io.sloeber.core.api.IExample;
14+
import io.sloeber.core.api.LibraryManager;
1415
import io.sloeber.providers.ESP32;
1516
import io.sloeber.providers.MCUBoard;
1617
import io.sloeber.providers.Teensy;
1718

18-
@SuppressWarnings("nls")
19-
public class Example implements IExample{
20-
private String myFQN;
21-
private String myLibName;
22-
private IPath myPath;
19+
@SuppressWarnings({ "nls" })
20+
public class Example extends io.sloeber.core.internal.Example{
2321
private AttributesCode myRequiredBoardAttributes;
2422
private static int noBoardFoundCount = 0;
2523

24+
2625
public AttributesCode getRequiredBoardAttributes() {
2726
return myRequiredBoardAttributes;
2827
}
2928

3029
public Example(String fqn, IPath path) throws Exception {
31-
myFQN = fqn;
32-
myPath = path;
33-
calcLibName();
30+
myFQN = Path.fromPortableString(fqn);
31+
myExampleLocation = path;
32+
String libName=calcLibName();
33+
if(libName!=null &&(!libName.isBlank())) {
34+
Set<String>libNames=new HashSet<>();
35+
libNames.add(libName);
36+
myLibs=LibraryManager.getLatestInstallableLibraries(libNames);
37+
}
3438
myRequiredBoardAttributes = new AttributesCode(fqn);
35-
myRequiredBoardAttributes.serial = examplesUsingSerial().contains(myFQN);
36-
myRequiredBoardAttributes.serial1 = examplesUsingSerial1().contains(myFQN);
37-
myRequiredBoardAttributes.serialUSB = examplesUsingSerialUSB().contains(myFQN);
38-
myRequiredBoardAttributes.keyboard = examplesUsingKeyboard().contains(myFQN);
39-
myRequiredBoardAttributes.flightSim = examplesUsingFlightSim().contains(myFQN);
40-
myRequiredBoardAttributes.joyStick = examplesUsingJoyStick().contains(myFQN);
41-
myRequiredBoardAttributes.mouse = examplesUsingMouse().contains(myFQN);
42-
myRequiredBoardAttributes.tone = examplesUsingTone().contains(myFQN);
43-
myRequiredBoardAttributes.wire1 = examplesUsingWire1().contains(myFQN);
44-
myRequiredBoardAttributes.buildInLed = myFQN.contains("Blink")||examplesUsingBuildInLed().contains(myFQN);
45-
myRequiredBoardAttributes.midi = examplesUsingMidi().contains(myFQN) || myFQN.contains("USB_MIDI");
46-
// myRequiredBoardAttributes.teensy = myFQN.startsWith("Example/Teensy");
47-
myRequiredBoardAttributes.worksOutOfTheBox = !failingExamples().contains(myFQN);
48-
myRequiredBoardAttributes.myCompatibleBoardIDs.add( getRequiredBoardID(myFQN));
39+
myRequiredBoardAttributes.serial = examplesUsingSerial().contains(fqn);
40+
myRequiredBoardAttributes.serial1 = examplesUsingSerial1().contains(fqn);
41+
myRequiredBoardAttributes.serialUSB = examplesUsingSerialUSB().contains(fqn);
42+
myRequiredBoardAttributes.keyboard = examplesUsingKeyboard().contains(fqn);
43+
myRequiredBoardAttributes.flightSim = examplesUsingFlightSim().contains(fqn);
44+
myRequiredBoardAttributes.joyStick = examplesUsingJoyStick().contains(fqn);
45+
myRequiredBoardAttributes.mouse = examplesUsingMouse().contains(fqn);
46+
myRequiredBoardAttributes.tone = examplesUsingTone().contains(fqn);
47+
myRequiredBoardAttributes.wire1 = examplesUsingWire1().contains(fqn);
48+
myRequiredBoardAttributes.buildInLed = fqn.contains("Blink")||examplesUsingBuildInLed().contains(fqn);
49+
myRequiredBoardAttributes.midi = examplesUsingMidi().contains(fqn) || fqn.contains("USB_MIDI");
50+
// myRequiredBoardAttributes.teensy = fqn.startsWith("Example/Teensy");
51+
myRequiredBoardAttributes.worksOutOfTheBox = !failingExamples().contains(fqn);
52+
myRequiredBoardAttributes.myCompatibleBoardIDs.add( getRequiredBoardID(fqn));
4953
// myRequiredBoardAttributes.mo_mcu = examplesUsingMCUmo().contains(fqn);
50-
myRequiredBoardAttributes.rawHID = myFQN.contains("USB_RawHID");
54+
myRequiredBoardAttributes.rawHID = fqn.contains("USB_RawHID");
5155

52-
myRequiredBoardAttributes.myNumAD = getNumADCUsedInExample(myFQN);
53-
myRequiredBoardAttributes.directMode = examplesUsingDirectMode().contains(myFQN);
56+
myRequiredBoardAttributes.myNumAD = getNumADCUsedInExample(fqn);
57+
myRequiredBoardAttributes.directMode = examplesUsingDirectMode().contains(fqn);
5458

5559
myRequiredBoardAttributes.myCompatibleBoardIDs.remove(null);
56-
myRequiredBoardAttributes = myRequiredBoardAttributes.or(Libraries.getCodeAttributes(myPath));
60+
myRequiredBoardAttributes = myRequiredBoardAttributes.or(Libraries.getCodeAttributes(myExampleLocation));
5761
}
5862

5963

@@ -71,27 +75,19 @@ private static int getNumADCUsedInExample(String myFQN2) {
7175
}
7276
}
7377

74-
private void calcLibName() {
75-
myLibName = new String();
76-
String[] splits = myFQN.split("/");
77-
if (splits.length == 4) {
78-
if ("Library".equals(splits[0])) {
79-
myLibName = splits[2];
78+
String calcLibName() {
79+
if (myFQN.segmentCount() == 4) {
80+
if ("Library".equals(myFQN.segment(0))) {
81+
return myFQN.segment(2);
8082
}
8183
}
84+
return null;
8285
}
8386

8487

85-
public String getLibName() {
86-
return myLibName;
87-
}
8888

8989
public String getFQN() {
90-
return myFQN;
91-
}
92-
93-
public String getInoName() {
94-
return myPath.lastSegment();
90+
return myFQN.toString();
9591
}
9692

9793
private static LinkedList<String> examplesUsingMidi() {
@@ -455,7 +451,7 @@ private static LinkedList<String> failingExamples() {
455451
* empty returns the best known boarddescriptor to run this example
456452
*/
457453
public static MCUBoard pickBestBoard(Example example, MCUBoard myBoards[]) {
458-
String libName = example.getLibName();
454+
String libName = example.calcLibName();
459455
String fqn = example.getFQN();
460456
if (myBoards.length == 0) {
461457
//No boards =>no match
@@ -594,41 +590,6 @@ private static String getRequiredBoardID(String fqn) {
594590

595591
}
596592

597-
@Override
598-
public IArduinoLibraryVersion getArduinoLibrary() {
599-
// as these are examples (not from libs but ide examples
600-
//the lib is null
601-
//I may fake a lib in the future
602-
return null;
603-
}
604-
605-
@Override
606-
public IPath getCodeLocation() {
607-
return myPath;
608-
}
609-
610-
@Override
611-
public String getName() {
612-
return getInoName();
613-
}
614-
615-
@Override
616-
public String getID() {
617-
return "example "+getName();
618-
}
619-
620-
@Override
621-
public String[] getBreadCrumbs() {
622-
// Not needed for test as this is only used in the ui
623-
return null;
624-
}
625-
626-
@Override
627-
public String toSaveString() {
628-
// Not needed for test as this is only used in the ui
629-
return null;
630-
}
631-
632593
public boolean worksOnBoard(MCUBoard board) {
633594
if (board.getBoardDescriptor() == null) {
634595
return false;
@@ -648,7 +609,7 @@ public boolean worksOnBoard(MCUBoard board) {
648609
/*
649610
* the servo lib does not work on gemma
650611
*/
651-
if ("Servo".equalsIgnoreCase(getLibName())) {
612+
if ("Servo".equalsIgnoreCase(calcLibName())) {
652613
if ("gemma".equals( board.getBoardDescriptor().getBoardID()) ) {
653614
return false;
654615
}

0 commit comments

Comments
 (0)