11/* eslint-disable no-unused-expressions */
22import * as chai from 'chai' ;
3- import * as chaiAsPromised from 'chai-as-promised' ;
3+ import chaiAsPromised = require ( 'chai-as-promised' ) ;
44import * as path from 'path' ;
55
66chai . use ( chaiAsPromised ) ;
@@ -240,6 +240,139 @@ suite('Kits scan test', () => {
240240 } ) . timeout ( 10000 ) ;
241241 } ) ;
242242
243+ suite ( 'getKitDetect vendor detection from binary path' , ( ) => {
244+ test ( 'Detect ClangCl vendor from clang-cl binary path' , async ( ) => {
245+ const testKit : kit . Kit = {
246+ name : 'Custom Kit Name' ,
247+ compilers : {
248+ C : 'C:/path/to/clang-cl.exe' ,
249+ CXX : 'C:/path/to/clang-cl.exe'
250+ } ,
251+ isTrusted : false
252+ } ;
253+ const detect = await kit . getKitDetect ( testKit ) ;
254+ // Name doesn't match known prefixes, so vendor is detected from binary path
255+ expect ( detect . vendor ) . to . eq ( 'ClangCl' ) ;
256+ } ) ;
257+
258+ test ( 'Detect Clang vendor from clang binary path' , async ( ) => {
259+ const testKit : kit . Kit = {
260+ name : 'Custom Kit Name' ,
261+ compilers : {
262+ C : '/usr/bin/clang' ,
263+ CXX : '/usr/bin/clang++'
264+ } ,
265+ isTrusted : false
266+ } ;
267+ const detect = await kit . getKitDetect ( testKit ) ;
268+ expect ( detect . vendor ) . to . eq ( 'Clang' ) ;
269+ } ) ;
270+
271+ test ( 'Detect GCC vendor from gcc binary path' , async ( ) => {
272+ const testKit : kit . Kit = {
273+ name : 'Custom Kit Name' ,
274+ compilers : {
275+ C : '/usr/bin/gcc' ,
276+ CXX : '/usr/bin/g++'
277+ } ,
278+ isTrusted : false
279+ } ;
280+ const detect = await kit . getKitDetect ( testKit ) ;
281+ expect ( detect . vendor ) . to . eq ( 'GCC' ) ;
282+ } ) ;
283+
284+ test ( 'Detect GCC vendor from versioned gcc binary path' , async ( ) => {
285+ const testKit : kit . Kit = {
286+ name : 'Custom Kit Name' ,
287+ compilers : {
288+ C : '/usr/bin/gcc-11' ,
289+ CXX : '/usr/bin/g++-11'
290+ } ,
291+ isTrusted : false
292+ } ;
293+ const detect = await kit . getKitDetect ( testKit ) ;
294+ expect ( detect . vendor ) . to . eq ( 'GCC' ) ;
295+ } ) ;
296+
297+ test ( 'Detect Clang vendor from versioned clang binary path' , async ( ) => {
298+ const testKit : kit . Kit = {
299+ name : 'Custom Kit Name' ,
300+ compilers : {
301+ C : '/usr/bin/clang-14' ,
302+ CXX : '/usr/bin/clang++-14'
303+ } ,
304+ isTrusted : false
305+ } ;
306+ const detect = await kit . getKitDetect ( testKit ) ;
307+ expect ( detect . vendor ) . to . eq ( 'Clang' ) ;
308+ } ) ;
309+
310+ test ( 'Detect ClangCl vendor from versioned clang-cl binary path' , async ( ) => {
311+ const testKit : kit . Kit = {
312+ name : 'Custom Kit Name' ,
313+ compilers : {
314+ C : 'C:/LLVM/bin/clang-cl-14.exe' ,
315+ CXX : 'C:/LLVM/bin/clang-cl-14.exe'
316+ } ,
317+ isTrusted : false
318+ } ;
319+ const detect = await kit . getKitDetect ( testKit ) ;
320+ expect ( detect . vendor ) . to . eq ( 'ClangCl' ) ;
321+ } ) ;
322+
323+ test ( 'Detect GCC vendor from cross-compiler gcc binary path' , async ( ) => {
324+ const testKit : kit . Kit = {
325+ name : 'Custom Kit Name' ,
326+ compilers : {
327+ C : '/opt/toolchain/arm-linux-gnueabihf-gcc' ,
328+ CXX : '/opt/toolchain/arm-linux-gnueabihf-g++'
329+ } ,
330+ isTrusted : false
331+ } ;
332+ const detect = await kit . getKitDetect ( testKit ) ;
333+ expect ( detect . vendor ) . to . eq ( 'GCC' ) ;
334+ } ) ;
335+
336+ test ( 'Detect GCC vendor from versioned cross-compiler gcc binary path' , async ( ) => {
337+ const testKit : kit . Kit = {
338+ name : 'Custom Kit Name' ,
339+ compilers : {
340+ C : '/opt/toolchain/arm-linux-gnueabihf-gcc-12' ,
341+ CXX : '/opt/toolchain/arm-linux-gnueabihf-g++-12'
342+ } ,
343+ isTrusted : false
344+ } ;
345+ const detect = await kit . getKitDetect ( testKit ) ;
346+ expect ( detect . vendor ) . to . eq ( 'GCC' ) ;
347+ } ) ;
348+
349+ test ( 'Do not falsely detect GCC from unrelated binary with gcc in name' , async ( ) => {
350+ const testKit : kit . Kit = {
351+ name : 'Custom Kit Name' ,
352+ compilers : {
353+ C : '/usr/bin/not-gcc-related' ,
354+ CXX : '/usr/bin/not-gcc-related'
355+ } ,
356+ isTrusted : false
357+ } ;
358+ const detect = await kit . getKitDetect ( testKit ) ;
359+ expect ( detect . vendor ) . to . be . undefined ;
360+ } ) ;
361+
362+ test ( 'Return original kit when vendor cannot be detected' , async ( ) => {
363+ const testKit : kit . Kit = {
364+ name : 'Unknown Kit' ,
365+ compilers : {
366+ C : '/usr/bin/unknown-compiler' ,
367+ CXX : '/usr/bin/unknown-compiler++'
368+ } ,
369+ isTrusted : false
370+ } ;
371+ const detect = await kit . getKitDetect ( testKit ) ;
372+ expect ( detect . vendor ) . to . be . undefined ;
373+ } ) ;
374+ } ) ;
375+
243376 suite ( 'VS Generator mapping' , ( ) => {
244377 test ( 'returns correct generator for VS 2022' , ( ) => {
245378 expect ( kit . vsGeneratorForVersion ( '17' ) ) . to . eq ( 'Visual Studio 17 2022' ) ;
@@ -371,7 +504,6 @@ suite('Kits scan test', () => {
371504 compilers : { C : 'gcc' } ,
372505 isTrusted : true
373506 } ;
374-
375507 expect ( shouldKeepUserKitAfterScan ( existingKit , new Set < string > ( ) , true ) ) . to . be . false ;
376508 } ) ;
377509
@@ -382,7 +514,6 @@ suite('Kits scan test', () => {
382514 keep : true ,
383515 isTrusted : true
384516 } ;
385-
386517 expect ( shouldKeepUserKitAfterScan ( existingKit , new Set < string > ( ) , true ) ) . to . be . true ;
387518 } ) ;
388519
@@ -392,8 +523,48 @@ suite('Kits scan test', () => {
392523 toolchainFile : 'toolchain.cmake' ,
393524 isTrusted : true
394525 } ;
395-
396526 expect ( shouldKeepUserKitAfterScan ( existingKit , new Set < string > ( ) , true ) ) . to . be . true ;
397527 } ) ;
398528 } ) ;
529+
530+ suite ( 'getKitDetect vendor detection from kit name' , ( ) => {
531+ test ( 'Detect GCC vendor from kit name starting with GCC' , async ( ) => {
532+ const testKit : kit . Kit = {
533+ name : 'GCC 12.2.0 x86_64-linux-gnu' ,
534+ compilers : {
535+ C : '/usr/bin/gcc-12' ,
536+ CXX : '/usr/bin/g++-12'
537+ } ,
538+ isTrusted : false
539+ } ;
540+ const detect = await kit . getKitDetect ( testKit ) ;
541+ expect ( detect . vendor ) . to . eq ( 'GCC' ) ;
542+ } ) ;
543+
544+ test ( 'Detect Clang vendor from kit name starting with Clang' , async ( ) => {
545+ const testKit : kit . Kit = {
546+ name : 'Clang 14.0.0 x86_64-pc-linux-gnu' ,
547+ compilers : {
548+ C : '/usr/bin/clang-14' ,
549+ CXX : '/usr/bin/clang++-14'
550+ } ,
551+ isTrusted : false
552+ } ;
553+ const detect = await kit . getKitDetect ( testKit ) ;
554+ expect ( detect . vendor ) . to . eq ( 'Clang' ) ;
555+ } ) ;
556+
557+ test ( 'Detect ClangCl vendor from kit name starting with Clang-cl' , async ( ) => {
558+ const testKit : kit . Kit = {
559+ name : 'Clang-cl 14.0.0 (MSVC CLI)' ,
560+ compilers : {
561+ C : 'C:/LLVM/bin/clang-cl.exe' ,
562+ CXX : 'C:/LLVM/bin/clang-cl.exe'
563+ } ,
564+ isTrusted : false
565+ } ;
566+ const detect = await kit . getKitDetect ( testKit ) ;
567+ expect ( detect . vendor ) . to . eq ( 'ClangCl' ) ;
568+ } ) ;
569+ } ) ;
399570} ) ;
0 commit comments