text:
/* Ajout responsif mobile <799 px */
@media  (max-width : 799px){

	#spinner_mobile{
		z-index: 1000;
		padding: 10%;
		top: 50%;
		position: fixed;
		left: 50%;
		transform: translate(-50%, -50%);
		-webkit-transform: translate(-50%,-50%);
		-ms-transform: translate(-50%,-50%);
	}

	#spinner_mobile i{
		top: 50%;
		transform: translate(-50%, -50%);
		-webkit-transform: translate(-50%,-50%);
		-ms-transform: translate(-50%,-50%);
		left: 50%;
		font-size: 3em;
	}

	.noResult{
	padding-top : 10px;
	}

	#pagerBefore {
		display:none;
	}

	#pagerAfter {
		display:none;
	}

	.go_l {
		display:none;
	}

	.widgetContainer .annonce {padding: 3px;font-size: 0.6em;}

	#facets_mobile{
		display: block;
		position: absolute;
	    top: 0px;
	    width: 100%;
	 	z-index:100;
	    -webkit-animation-duration: 0.3s; /* Chrome, Safari, Opera */
	    animation-duration: 0.3s;
	}

	#facets_mobile #nav_mobile {
	    height:4em;
	}

	#facets_mobile ul{
		width: 100%;
		margin-top: 2px;
		padding-left: 8%;
		border:0px;
		border-bottom:0px;
		box-sizing: border-box;
 		-moz-box-sizing: border-box;
	}

	#facets_mobile li{
		border:0px;
		border-bottom:0px;
	}

	#facets_mobile #nav_mobile a {
		width : 95%;
		vertical-align: middle;
		display: inline-block;
		line-height: 3.7;
		margin-left: 5%;
		outline: 0px;
	}

	#facets_mobile #nav_mobile i{
		margin-right:3%;
	}

	#facets_mobile .facet.tableWidget.widget .facetName{
		position:relative;
		width:90%;
		padding: 2%;
		font-size:1.1em;
	}

	#facets_mobile .facet.tableWidget.widget{
		position:relative;
		min-width:86%;
		margin:7% 7% 5% 7%;
		padding-bottom:0px;
		box-shadow: 0px 2px 1px rgba(0, 0, 0, 0.1), 0px 0px 1px rgba(0, 0, 0, 0.1);
		background: #f8f8f8;
	}

	#facets_mobile .facet.hierarchicalWidget.widget .facetName{
		position:relative;
		width:90%;
		padding:5%;
		font-size:1.1em;
	}

	#facets_mobile .facet.hierarchicalWidget.widget{
		position:relative;
		min-width:86%;
		margin:7% 7% 5% 7%;
		padding-bottom:0px;
		box-shadow: 0px 2px 1px rgba(0, 0, 0, 0.1), 0px 0px 1px rgba(0, 0, 0, 0.1);
	}

	#facets_mobile .facet.tableWidget.widget .label{

	}

	#facets_mobile .checkboxIcon, #facets_mobile input[type="checkbox"]:checked + label span.checkboxIcon{
		font-size: 1.6em;
	}

	#facets_mobile .facet.tableWidget.widget .facetName i{
		-webkit-transform: translateY(-50%);
		-ms-transform: translateY(-50%);
		transform: translateY(-50%);
		top: 50%;
		position: absolute;
		right:5%;
		-webkit-animation-duration: 0.2s; /* Chrome, Safari, Opera */
	    animation-duration: 0.2s;
	}

	#facets_mobile .facet.hierarchicalWidget.widget .facetName i{
		-webkit-transform: translateY(-50%);
		-ms-transform: translateY(-50%);
		transform: translateY(-50%);
		top: 50%;
		position: absolute;
		right:5%;
		-webkit-animation-duration: 0.2s; /* Chrome, Safari, Opera */
	    animation-duration: 0.2s;
	}

	#results_nav_mobile{
		display:block;
		height:3em;
		box-shadow:0 2px 1px rgba(0,0,0,0.1), 0 0 1px rgba(0,0,0,0.1);
		position:relative;
	}

	#results{
		margin-top: 3%;
	}

	#results_nav_mobile #nav_facets_mobile a:active{
			text-decoration:none;
			border:0px;
			outline:0;
	}

	#results_nav_mobile #nav_facets_mobile a{
		font-size:1.3em;
		float:right;
		margin-right:3%;
		font-weight:normal;
		padding-right:3%;
		padding-left:3%;
		outline:0px;
	}

	#results .doc_list .doc .res .noResult{
		vertical-align: middle;
		text-decoration: none;
		line-height: 4em;
		overflow: visible;
	}

	#results .doc_list .doc.no{
		    text-align:center;
	}

	#results .doc_list .doc.no .res.no{
		   	text-align:center;
		   	padding:0px;
	}

	#results .doc_list .doc .res .noResult:hover{
		text-decoration:none
	}

	#number_results_mobile{
		display:inline-block;
		font-size:1.3em;
		line-height:2em;
		vertical-align:middle;
		margin-left:5%;
		top: 50%;
		position: absolute;
		transform: translateY(-50%);
		-ms-transform: translateY(-50%); /* IE 9 */
	    -webkit-transform: translateY(-50%); /* Safari */
	}

	#results_nav_mobile #nav_facets_mobile{
		width:30%;
		position: absolute;
		right: 2%;
		top: 50%;
		transform: translateY(-50%);
		-ms-transform: translateY(-50%); /* IE 9 */
	    -webkit-transform: translateY(-50%); /* Safari */
		vertical-align: middle;
		line-height: 2.8em;
		display: inline-block;
		padding-top: 2%;
		padding-bottom: 2%;
	}

	ul{
	      /* display:none; */
	}

	#solr { margin:0 auto; padding:0px; width:100%; }
	#solr .col.left { display:none }
	#solr .col.right { margin-left:10px; width:100%; margin-bottom:9%; }

	#logo-search { display:none;}

	/* Reset page */
	.page { margin:0; min-height:0; padding:0; width:0; }

	/**************************************/
	/*******	>>> Widgets <<<		*******/
	/**************************************/

	/***	>>> Search Bar Widget <<<	***/
	.searchBarWidget { clear: both; margin: 5% 2%; ; width: 100%; height:3em; position:relative; }

	.searchBarWidget  img{
		width:3em;
		position: absolute;
		top: 50%;
		transform: translateY(-50%);
		-webkit-transform: translateY(-50%);
		-ms-transform: translateY(-50%);
	}

	.searchBarWidget .searchBar {
		position:relative;
		border: 1px solid #ffffff;
		padding: 0px;
		width: 88%;
		/* Height changed from 100% to 3em to display correctly when resized */
		height: 3em;
		display:inline-block;
		margin-left:9%;
		vertical-align:top;
		box-shadow:0 2px 1px rgba(0,0,0,0.1), 0 0 1px rgba(0,0,0,0.1);
	}

	.searchBarWidget .searchBar .search-input { position:absolute;height: 100%; width:78%; padding: 0px;padding-left:2%; border: none; outline:none;  }

	.searchBarWidget .searchBar .search {  border: none; cursor: pointer; display: block; float: right;-webkit-appearance: none; border-radius: 0;
		height:100%; width:10%;
		text-align:center;
		-webkit-border-radius:0px;
		line-height:2.5em;
		position:relative;
	}

	.searchBarWidget .searchBar .search .fa-search{
		position: absolute;
		left: 50%;
		top: 50%;
		transform: translate(-50%, -50%);
		-ms-transform: translate(-50%,-50%); /* IE 9 */
	    -webkit-transform: translate(-50%,-50%); /* Safari */
		font-size:1.3em;
	}

	.searchBarWidget .searchMode { display:none; }
	.searchBarWidget #sortMode {display:none !important;}
	/**************************************/

	/***	>>> Collection Widget <<<	***/
	.collectionWidget { border: 1px solid; width: 50%; }
	.collectionWidget .title { margin: 5px 10px; }
	.collectionWidget .content { margin: 5px 0; }
	.collectionWidget .content li { border-top: 1px solid; cursor: pointer; display: block; padding: 3px 0 3px 15px; width: 40%; }
	.collectionWidget .content li.last { border-bottom: 1px solid; }
	/**************************************/

	/***	>>> Table Facet Widget <<<	***/
	.tableWidget { margin-bottom: 20px; }
	.tableWidget .facetName {  margin: 0; min-height: 21px; padding-bottom: 3px; width: 50%; cursor:pointer; }
	.tableWidget .facetName .label { cursor:pointer;}
	.tableWidget .facetName .hide_show {  display: inline-block; height: 11px; margin-right: 3px; width: 11px; }
	.tableWidget .facetName .hide_show.close {  cursor: pointer; }
	.tableWidget .facetSort { border-bottom: 1px solid; padding: 3px 0px; text-align: left; width: 100%; }

	.tableWidget ul li { border-bottom: 1px solid; padding: 3px 0 3px 0; }
	.tableWidget ul li .filterFacetCheck { float: left; vertical-align: top; cursor: pointer; float: left; line-height: 20px; margin-left: 5px; width: 182px;}
	/**************************************/

	/***	>>> Hierarchical Facet Widget <<<	***/
	.hierarchicalWidget { margin-bottom: 20px; }
	.hierarchicalWidget .facetName {  margin: 0; min-height: 21px; padding-bottom: 3px; width: 50%; cursor:pointer; }
	.hierarchicalWidget .facetName .label { cursor:pointer;}
	.hierarchicalWidget .facetName .hide_show {  display: inline-block; height: 11px; margin-right: 3px; width: 11px; }
	.hierarchicalWidget .facetName .hide_show.close {  cursor: pointer; }
	.hierarchicalWidget .facetSort { border-bottom: 1px solid; padding: 3px 0px; text-align: left; width: 100%; }
	.hierarchicalWidget li { border-bottom: 1px solid; padding: 3px 0 3px 0; }
	.hierarchicalWidget li .filterFacetCheck { cursor: pointer; }

	.hierarchicalWidget .expand {
		cursor: pointer;
		display: inline-block;
		width: 10px;
	}

	.hierarchicalWidget .collapse {
		cursor: pointer;
		display: inline-block;
		width: 10px;
		transform: rotate(90deg);
	}

	.hierarchicalWidget .collapse2expand {
		animation-name: col2ex;
	   	animation-duration: 0.2s;
	   	-webkit-animation-timing-function: linear;
	}

	.hierarchicalWidget .expand2collapse {
		animation-name: ex2col;
	   	animation-duration: 0.2s;
	   	-webkit-animation-timing-function: linear;
	}
	/**************************************/

	/******	>>> Result Widget <<<	*******/
	.resultWidget .doc,#promolink {
		width: 95%;
		margin-left: auto;
		margin-right: auto;
		display: inline-block;
		margin-bottom: 1%;
		padding-top: 1%;
	}

	.resultWidget .doc .connector { float: left; height: 100%; width: 5%; }

	.resultWidget .doc .res {
 		float: left;
 		height: 100%;
 		padding-left: 10px;
 		width: 100% !important;
 		position: relative;
 		text-align:justify;
 		line-height:20px;
	}

	.resultWidget .res .description , #promolink #snippet { margin-top: 3px;  }
	.resultWidget .res .title,#promolink .title {  word-wrap: break-word; }
	.resultWidget .res .icon span{vertical-align:top;}

	#snippet{
		width: 95%;
		line-height: 1.2;
		display: block; /* Fallback for non-webkit */
		display: -webkit-box;
		-webkit-line-clamp: 2;
		-webkit-box-orient: vertical;
		overflow: hidden;
		text-overflow: ellipsis;
		height:2.4em;
	}

	 #urlMobile{
		width: 95%;
		line-height: 1.4;
		display: block; /* Fallback for non-webkit */
		display: -webkit-box;
		-webkit-line-clamp: 1;
		-webkit-box-orient: vertical;
		overflow: hidden;
		text-overflow: ellipsis;
		position: absolute;
		bottom: 2%;
		left: 10px;
	}

	.resultWidget .doc .res .address { margin-top: 6px;  overflow:hidden; text-overflow: ellipsis; }
	.resultWidget .doc .res .address span,.title{
		width: 100%;
		display: inline-block;
		height: 1.5em;
		overflow: hidden;
		white-space: nowrap;
		text-overflow: ellipsis;
	}

	.title{
		max-width:83%;
	}

	.resultWidget .doc .res .tags { margin-top: 6px; }
	.resultWidget .bar-loader { display:block; height:32px; margin: auto; width:32px; }
	.resultWidget .res .moreLikeThis { cursor:pointer; }
	/**************************************/

	/***	>>> VideoResult Widget <<<	***/
	*.videoResultWidget .video { display: inline-block; padding: 10px; width: 600px; }
	.videoResultWidget .video .thumbnail { display: block; float: left; }
	.videoResultWidget .video .length { border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; float: left; opacity: 0.8; padding: 1px; position: absolute; margin-top: 2px; margin-left: 2px; }
	.videoResultWidget .video .res { float: left; height: 100%; padding-left: 5px; width: 440px; }
	.videoResultWidget .video .title { height: 20px; overflow: hidden; word-wrap: normal; white-space: nowrap; }
	.videoResultWidget .res .description { height: 45px; margin-top: 3px; overflow: hidden; }
	.videoResultWidget .video .res .address { margin-top: 6px; overflow: hidden; word-wrap: normal; white-space: nowrap; }
	.videoResultWidget .video .res .tags { margin-top: 6px; }
	.videoResultWidget .video:hover { border-radius: 2px; box-shadow: 1px 1px 3px #a1a1a1; cursor: pointer; }

	.videoResultWidget .video_list.mosaic .video { display: inline-block; margin-right: 4px; padding: 3px; width: 145px; }
	.videoResultWidget .video_list.mosaic .thumbnail { margin: auto; }
	.videoResultWidget .video_list.mosaic .res { padding-left: 0; width: 145px; }
	.videoResultWidget .video_list.mosaic .res .description { display: none; }
	.videoResultWidget .video_list.mosaic .res .address { display: none; }
	.videoResultWidget .video_list.mosaic .res .tags { display: none; }
	.videoResultWidget .video_list.mosaic .res a span { display: block; height: 30px; width: 145px; }
	/**************************************/

	/******	>>> Pager Widget <<<	*******/

	.pagerModule { margin-top: 10px; text-align: center; }
	.pagerModule .pages .page, .pagerModule .fn { cursor: pointer; display: inline-table; margin-right: 5px; min-width: 15px; padding: 0 2px; text-align: center; }
	.pagerModule .pages { display: none; overflow: hidden; }
	.pagerModule .pages .page { border: 1px solid; border-radius: 4px; height: 15px;  }
	.pagerModule .fn { height: 17px; }

	/**************************************/

	/**	>>> promolinkWidget Widget <<<	***/

	#promolink{margin-top:3%;}
	.promolinkWidget {padding-top: 1%;}
	.promolinkWidget .widgetContainer{padding-left:10px;}
	.promolinkWidget .title { display: block;  }
	.promolinkWidget .tips { display: block;  }
	/**************************************/

	/**	>>> spellcheckerWidget Widget <<<**/
	.spellcheckerWidget { margin: 15px 0;
		width: 95%;
		margin-left: auto;
		margin-right: auto;
		display: block;
		margin-bottom: 5px;
		padding-top: 1%;
		/* The height has been changed from 2em to 4em to contain the spellchecker corrected result */
		height: 4em;
		box-shadow: 0px 2px 1px rgba(0, 0, 0, 0.1), 0px 0px 1px rgba(0, 0, 0, 0.1);
	}

	.spellcheckerWidget > span{
		/* Margin-left changed from 1em to 3% to align original results and spellchecker results */
		margin-left:3%;
	}

	/**.spellcheckerWidget .result { cursor: pointer; }**/
	/**************************************/

	/**	>>> userMenuWidget Widget <<<	**/
	.menuWidget .menu { border: 1px solid; position: absolute; }
	.menuWidget .menu li { cursor: pointer; padding: 3px 10px; position: relative; z-index: 100; }
	.menuWidget .menuLink { cursor: default; }
	/**************************************/

	/******		>>> jQuery UI <<<	*******/
	/******	>>> Autocomplete <<<	*******/
	* html .ui-autocomplete { width:1px; }
	.ui-autocomplete { position: absolute; cursor: default; }
	.ui-autocomplete .ui-state-hover { cursor:pointer; }
	/**************************************/

	/******		>>> Slider <<<		*******/
	.ui-slider { position: relative; text-align: left; }
	.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
	.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }

	.ui-slider-horizontal { height: .8em; }
	.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
	.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
	.ui-slider-horizontal .ui-slider-range-min { left: 0; }
	.ui-slider-horizontal .ui-slider-range-max { right: 0; }

	.ui-slider-vertical { width: .8em; height: 100px; }
	.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
	.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
	.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
	.ui-slider-vertical .ui-slider-range-max { top: 0; }

	/**************************************/

	.ui-resizable-handle { height: 10px; }

 	#commonLinks{ display: none !important; }

 	#results_div{ margin-top: 20px; }

 	#searchBar #logo_desktop{ display: none; }

 	#status-div { display: none; }

 	#connectionLink{
 		margin-top: 5px !important;
 		text-align: center;
 	}

 	#connectionLink #logo_mobile{
 		display: inline-block !important;
 	}

 	#connectionLink #loginLink{
 		position: absolute;
 		top: 5px;
 		right: 20px;
 	}

 	#relevancy-div{
 		display: none;
 	}

 	#save_search{
 		display: none !important;
 	}

}

@media all and (max-width : 430px){
	.resultWidget .doc, #promolink{
		height:7em;
	}
}

@media all and (max-width : 221px){
	.resultWidget .doc, #promolink{
		height:6em;
	}
}

@media all and (max-width : 191px){
	.searchBarWidget{
		height:2em;
	}
	.searchBarWidget .searchBar .search .fa-search{
		font-size:1em;
	}
	#results_nav_mobile {
		height:2em;
	}
}

@media all and (max-width : 340px){

	.searchBarWidget  img{
		width:10%;
	}
	.searchBarWidget .searchBar{
		margin-left:12%;
	}
}

@media all and (min-width: 799px) and (max-width: 840px) {
	#searchBarContent{
		min-width:400px;
	}
	#solr .resultWidget .doc{
		max-width:300px;
	}
	#solr .col.right{
		max-width:300px;
	}

}

@media all and (max-width : 799px) and (min-width:701px){
	.searchBarWidget .searchBar{
		margin-left: 9%;
	}
	.searchBarWidget  img{
		width:4em;
	}
}

@media all and (min-width : 337px) and (max-width:522px){
	.searchBarWidget .searchBar{
	width:87%;
	margin-left:13%;
	}
}

/* VERSION DESKTOP
 * *
 *
 *
 *
 *
 *
 *
 */

@media all and (min-width: 799px){

	#spinner_mobile {
		display:none;
	}
	#header-wrapper { display:inline-block;  }
	#results_nav_mobile{
		display:none;
	}

	#facets_mobile{
	        display:none;
	}
	#facets ul{
		position:relative;
		margin-top: 2px;
		padding-left: 8%;
		border:0px;
		border-bottom:0px;
	}
	#facets li{
		width:100%;
		border:0px;
		border-bottom:0px;
	}
	#facets #nav_mobile a {
		width : 100%;
		vertical-align: middle;
		display: inline-block;
		line-height: 3.7;
		margin-left: 5%;
		outline: 0px;
	}
	#facets #nav_mobile i{
		margin-right:3%;
	}
	#facets .facet.tableWidget.widget .facetName{
		position:relative;
		width:90%;
		padding:5%;
		font-size:1.1em;
	}
	#facets .facet.tableWidget.widget{
		position:relative;
		min-width:86%;
		margin:0% 5% 5% 0%;
		padding-bottom:0px;
		box-shadow: 0px 2px 1px rgba(0, 0, 0, 0.1), 0px 0px 1px rgba(0, 0, 0, 0.1);
	}
	#facets .checkboxIcon, #facets_mobile input[type="checkbox"]:checked + label span.checkboxIcon{
		font-size: 1.6em;
	}
	#facets .facet.tableWidget.widget .facetName i{
		-webkit-transform: translateY(-50%);
		-ms-transform: translateY(-50%);
		transform: translateY(-50%);
		top: 50%;
		position: absolute;
		right:5%;
		-webkit-animation-duration: 0.2s; /* Chrome, Safari, Opera */
	    animation-duration: 0.2s;
	}
	#facets .facet.hierarchicalWidget.widget .facetName{
		position:relative;
		width:90%;
		padding:5%;
		font-size:1.1em;
	}
	#facets .facet.hierarchicalWidget.widget{
		position:relative;
		min-width:86%;
		margin:0% 5% 5% 0%;
		padding-bottom:0px;
		box-shadow: 0px 2px 1px rgba(0, 0, 0, 0.1), 0px 0px 1px rgba(0, 0, 0, 0.1);
	}
	#facets .facet.hierarchicalWidget.widget .facetName i{
		-webkit-transform: translateY(-50%);
		-ms-transform: translateY(-50%);
		transform: translateY(-50%);
		top: 50%;
		position: absolute;
		right:5%;
		-webkit-animation-duration: 0.2s; /* Chrome, Safari, Opera */
	    animation-duration: 0.2s;
	}
	#solr { margin:0 auto; padding-bottom:3%;  width:100%;}
	#solr .col.left { display:inline-block; width:25%; margin-top:1%; padding:0; margin-bottom: 50px;}
	#solr .col.right { position:relative; padding:0 10px; width:40%; float:left;margin-top:1%; }

	#logo-search {
	  	 margin-right: auto;
	     margin-bottom: 0pt;
	     margin-left: auto;
	     height:118px;
	     display:block;
	}

	/* Reset page */
	.page { margin:0; min-height:0; padding:0; width:0; }

	/**************************************/
	/*******	>>> Widgets <<<		*******/
	/**************************************/

	/***	>>> Search Bar Widget <<<	***/
	#searchBarContent{
		width: 70%;
		height:100%;
		vertical-align: top;
		margin: auto;
	}
	.searchBarWidget { clear: both; width: 80%; height:3em; position:relative;padding-bottom:2.2em;}
	.searchBarWidget .searchBar { border: 1px solid; padding: 5px 0 5px 2px; width: 620px; }
	.searchBarWidget .searchBar .search-input { border: none; height: 100%; width: 593px; }
	.searchBarWidget .searchBar input[type=button].search {  border: none; cursor: pointer; display: block; float: right; height: 17px; margin-right: 5px; width: 20px; }
	.searchBarWidget .searchMode { clear:both; margin-top: 3px; text-align: right; width: 420px; }
	.searchBarWidget .searchMode label { cursor:pointer; display: inline-block; height: 20px; line-height: 20px; margin-left: 5px; }
	.searchBarWidget .searchMode label input { margin-right: 3px; position: relative; top: 2px; }
	.searchBarWidget #sortMode {clear:both;margin-top:3px;text-align:right;padding-right:0.3em;}
	.searchBarWidget #sortMode:after{
	      content: "\f078";
	      font-family: 'FontAwesome';
	      font-size: 12px;
	}
	.searchBarWidget #sortMode select{
		 appearance: none;
	      -webkit-appearance: none;
	      -moz-appearance: none;
	      border: none;
	      outline: none;
	      padding: 6px;
	      padding-right:0px;
	      text-indent: 0.01px;
	      text-overflow: "";
	      cursor:pointer;
	      outline: none;
	}

	 /* This hides dropdown button arrow in IE */
	   .searchBarWidget  select::-ms-expand {
	      display: none;
	    }
	    /* This hides focus around selected option in FF */
	    .searchBarWidget select:-moz-focusring {
	      text-shadow: 0 0 0 #000;
	    }

	    .doc_list_pagination{
	    margin-top:12px;
	    }
	/**************************************/

	/***	>>> Collection Widget <<<	***/
	.collectionWidget { border: 1px solid; width: 210px; }
	.collectionWidget .title { margin: 5px 10px; }
	.collectionWidget .content { margin: 5px 0; }
	.collectionWidget .content li { border-top: 1px solid; cursor: pointer; display: block; padding: 3px 0 3px 15px; width: 195px; }
	.collectionWidget .content li.last { border-bottom: 1px solid; }
	/**************************************/

	/***	>>> Table Facet Widget <<<	***/
	.tableWidget { margin-bottom: 20px; }
	.tableWidget .facetName {  cursor: pointer; margin: 0; min-height: 21px; padding-bottom: 3px; width: 100%; }
	.tableWidget .facetName .hide_show {  display: inline-block; height: 11px; margin-right: 3px; width: 11px; }
	.tableWidget .facetName .hide_show.close {  }
	.tableWidget ul li { border-bottom: 1px solid; padding: 3px 0 3px 0; }
	.tableWidget ul li .filterFacetCheck { float: left; vertical-align: top; cursor: pointer; float: left; line-height: 20px; margin-left: 1%; width: 99%;}

	/**************************************/

	/***	>>> Hierarchical Facet Widget <<<	***/
	.hierarchicalWidget { margin-bottom: 20px; }
	.hierarchicalWidget .facetName {  cursor: pointer; margin: 0; min-height: 21px; padding-bottom: 3px; width: 100%; }
	.hierarchicalWidget .facetName .hide_show {  display: inline-block; height: 11px; margin-right: 3px; width: 11px; }
	.hierarchicalWidget .facetName .hide_show.close {  }
	.hierarchicalWidget li { border-bottom: 1px solid; padding: 3px 0 3px 0; }
	.hierarchicalWidget li .filterFacetCheck { cursor: pointer; }

	.hierarchicalWidget .expand {
		cursor: pointer;
		display: inline-block;
		width: 10px;
	}

	.hierarchicalWidget .collapse {
		cursor: pointer;
		display: inline-block;
		width: 10px;
		transform: rotate(90deg);
	}

	.hierarchicalWidget .collapse2expand {
		animation-name: col2ex;
    	animation-duration: 0.2s;
    	-webkit-animation-timing-function: linear;
	}

	.hierarchicalWidget .expand2collapse {
		animation-name: ex2col;
    	animation-duration: 0.2s;
    	-webkit-animation-timing-function: linear;
	}

	/**************************************/

	/******	>>> PrevisualizeResult Widget <<<	*******/

	div.res {border-bottom: thin dotted; }
	div.res:hover {text-decoration: none; background: #ffffff; z-index: 6; transition-delay:0.5s; }
	div.res div.previsualizetemplate {position: absolute; left: -9999px;
  	margin: -40px 0 0 0px; padding: 3px 3px 3px 3px;
  	border-style:solid; border-color:black; border-width:1px; z-index: 6;}
  	div.last>div.res>div.previsualizetemplate {margin: +40px 0 0 0px; }
	div.res:hover div.previsualizetemplate {left: 2%; background: #ffffff; transition-delay:0.5s;}

	/**************************************/

	/******	>>> ExternalResult Widget <<<	*******/

	@-moz-document url-prefix() {
    	.externalresults {
        	display: show;
    	}
	}

	@media screen and (-webkit-min-device-pixel-ratio:0) {
    	.externalresults {
        	display: show;
    	}
	}
	.externalmaintitle {margin-bottom:5px}
	.external {margin-bottom : 10px;}
	.externalresults { float: left; height: 100%; width:100%; padding-left: 5px;  position:relative;line-height: 20px; }
	.externalurl { margin-top: 6px; box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.1), 0px 0px 0px rgba(0, 0, 0, 0.1);}
	.datafariresultstitle { float: left; height: 100%; width:100%; padding-left: 5px;  position:relative;line-height: 20px; margin-bottom:20px }
	.externalmore { float: left; height: 100%; width:100%; padding-left: 5px;  position:relative;line-height: 20px; margin-top: 10px; margin-bottom:15px; font-style:italic;}
	/**************************************/

	/******	>>> Result Widget <<<	*******/
	.resultWidget .doc { display: inline-block; margin-bottom: 20px; width: 100%; }
	.resultWidget .doc .connector { float: left; height: 100%; width: 18px; }
	.resultWidget .doc .res { float: left; height: 100%; width:100%; padding-left: 5px;  position:relative;line-height: 20px; }
	.resultWidget .res .description { margin-top: 3px;margin-left: 6%;}
	.resultWidget .doc .res .address { margin-top: 6px; box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.1), 0px 0px 0px rgba(0, 0, 0, 0.1);}
	.resultWidget .doc .res .tags { margin-top: 6px; }
	.resultWidget .bar-loader { display:block; height:32px; margin: auto; width:32px; }
	.resultWidget .res .moreLikeThis { cursor:pointer; }
	.resultWidget .res .title{margin-left: 6%;}
	#results .res .icon{display: inline-block;position: absolute;top: 2%;width: 4.5%;}
	/**************************************/

	/***	>>> VideoResult Widget <<<	***/
	.videoResultWidget .video { display: inline-block; padding: 10px; width: 600px; }
	.videoResultWidget .video .thumbnail { display: block; float: left; }
	.videoResultWidget .video .length { border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; float: left; opacity: 0.8; padding: 1px; position: absolute; margin-top: 2px; margin-left: 2px; }
	.videoResultWidget .video .res { float: left; height: 100%; padding-left: 5px; width: 440px; }
	.videoResultWidget .video .title { height: 20px; overflow: hidden; word-wrap: normal; white-space: nowrap; }
	.videoResultWidget .res .description { height: 45px; margin-top: 3px; overflow: hidden; }
	.videoResultWidget .video .res .address { margin-top: 6px; overflow: hidden; word-wrap: normal; white-space: nowrap; }
	.videoResultWidget .video .res .tags { margin-top: 6px; }
	.videoResultWidget .video:hover { border-radius: 2px; box-shadow: 1px 1px 3px #a1a1a1; cursor: pointer; }

	.videoResultWidget .video_list.mosaic .video { display: inline-block; margin-right: 4px; padding: 3px; width: 145px; }
	.videoResultWidget .video_list.mosaic .thumbnail { margin: auto; }
	.videoResultWidget .video_list.mosaic .res { padding-left: 0; width: 145px; }
	.videoResultWidget .video_list.mosaic .res .description { display: none; }
	.videoResultWidget .video_list.mosaic .res .address { display: none; }
	.videoResultWidget .video_list.mosaic .res .tags { display: none; }
	.videoResultWidget .video_list.mosaic .res a span { display: block; height: 30px; width: 145px; }
	/**************************************/

	/******	>>> Pager Widget <<<	*******/
	.col.left .pagerModule { padding-top: 10px; text-align: center;padding-bottom:10px;}
	.pagerModule{text-align:center;}
	.pagerModule .pages .page, .pagerModule .fn { cursor: pointer; display: inline-table; margin-right: 5px; min-width: 15px; padding: 0 2px; text-align: center; }
	.pagerModule .pages { display: inline-block; overflow: hidden; vertical-align:middle}
	.pagerModule span{ vertical-align:middle;}
	.pagerModule i{ vertical-align:bottom;}
	.pagerModule .pages .page { /*border: 1px solid; border-radius: 4px;*/ height: 15px; }
	.pagerModule .fn { height: 17px; }
	/**************************************/

	/**	>>> promolinkWidget Widget <<<	***/
	.promolinkWidget { -moz-border-radius: 4px; border-radius: 4px; margin-bottom: 15px; padding: 10px; }
	.widgetContainer .annonce {padding: 3px;font-size: 0.6em;vertical-align:middle;}
	.promolinkWidget .title { display: block;  }
	.promolinkWidget .tips { display: block; text-align: justify;line-height: 1.6em;margin-top: 10px; }
	/**************************************/

	/**	>>> spellcheckerWidget Widget <<<**/
	.spellcheckerWidget { margin: 15px 0; width: 480px; }
	/**.spellcheckerWidget .result { cursor: pointer; }**/
	/**************************************/

	/**	>>> userMenuWidget Widget <<<	**/
	.menuWidget .menu { border: 1px solid; position: absolute; }
	.menuWidget .menu li { cursor: pointer; padding: 3px 10px; position: relative; z-index: 100; }
	.menuWidget .menuLink { cursor: default; }
	/**************************************/

	/******		>>> jQuery UI <<<	*******/
	/******	>>> Autocomplete <<<	*******/
	* html .ui-autocomplete { width:1px; }
	.ui-autocomplete { position: absolute; cursor: default; }
	.ui-autocomplete .ui-state-hover { cursor:pointer; }
	/**************************************/

	/******		>>> Slider <<<		*******/
	.ui-slider { position: relative; text-align: left; }
	.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
	.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }

	.ui-slider-horizontal { height: .8em; }
	.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
	.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
	.ui-slider-horizontal .ui-slider-range-min { left: 0; }
	.ui-slider-horizontal .ui-slider-range-max { right: 0; }

	.ui-slider-vertical { width: .8em; height: 100px; }
	.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
	.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
	.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
	.ui-slider-vertical .ui-slider-range-max { top: 0; }
	/**************************************/

	.ui-resizable-handle { height: 10px; }
		.searchBarWidget img,.advancedSearchWidget  img{
		margin-left: 3%;
		width: 2.9em;
		outline:0px none;
		}
		.searchBarWidget .searchBar {
		padding: 0px;
		box-shadow:0 2px 1px rgba(0,0,0,0.05), 0 0 1px rgba(0,0,0,0.05);
		position:relative;
		}
		#searchBarContent{
			min-width:550px;
		}
	.searchBarWidget .searchBar .search-input { border: none;  width:92%; padding:0px;padding-left: 1%; width:96; height:100%; position:absolute;  }

	.searchBarWidget .searchBar .search {  border: none; cursor: pointer; display: block; float: right;-webkit-appearance: none; border-radius: 0;
		height:100%; width:7%;
		text-align:center;
		-webkit-border-radius:0px;
		line-height:2.5em;
		position:absolute;
		right:0px;
		z-index:3;
		}
	.searchBarWidget .searchBar .search .fa-search{
		vertical-align:middle;
		font-size:1.3em;
	}

	.searchBarWidget .searchMode {float:right;}

	#header-wrapper #logo{
		display:none;
	}
	#header-wrapper #userSpace{
		position: absolute;
		top: 1em;
		right: 1em;
	}

	header #bar{
		display:none;
	}
	header{
		display:inline-block;
	}
	#results .doc_list{
		box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.1), 0px 0px 0px rgba(0, 0, 0, 0.1);
	}
}

#results .doc_list{
	padding-right:3%;
}

.favorite{
	color: #9B1919;
	position: absolute;
	right: 0px;
	top:0%;
	margin-left: 1%;
	cursor:pointer;
}

.liker {
    cursor: pointer;
    font-size: 11px;
    margin-right: 3px;
    color: #008CC9;
/*     padding-left:4px; */
}

.liker:hover{
	text-decoration:underline;
}

.liker:after{
	font-family : 'FontAwesome';
	color : grey;
	content : "\f111";
	font-size:2px;
	vertical-align:middle;
	margin-left:5px;
	text-decoration:none;
}
.metadonne{
	 display:none;
}
/*
.metadonne{
	 font-size: 10px;
	 padding-top:2px;
}

.metadonne .fa{
	margin-right: 2px;
	color:grey;
}
*/
 #urlMobile .address a{
/*  	box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.1), 0px 0px 0px rgba(0, 0, 0, 0.1); */
	padding-bottom: 4px;
 }

#containerError{
	height: 100vh;
	background: rgba(0, 0, 0, 0.5) none repeat scroll 0% 0%;
	width: 100%;
	position: fixed;
	display: block;
	top: 0px;
	z-index: 100;
}

#containerError #smallContainerError{
	position: absolute;
	background: white none repeat scroll 0% 0%;
	text-align: center;
	padding: 5em;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	-webkit-transform: translate(-50%,-50%);
	-ms-transform: translate(-50%,-50%);
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	overflow: hidden;
}

#error_title{
	width: 100%;
	display: inline-block;
	position: absolute;
	top: 0px;
	left: 0px;
	background: rgb(254, 73, 73) none repeat scroll 0% 0%;
	color: white;
	padding-top: 5px;
	padding-bottom: 5px;
}

.searchModeLink { width: 250px; }

#connectionLink #logo_desktop{ display: none; }

.arrow_box {
	position: relative;
	background: #f9f9f9;
	border: 2px solid #ccc;
}
.arrow_box:after, .arrow_box:before {
	right: 100%;
	top: 12%;
	border: solid transparent;
	content: " ";
	height: 0;
	width: 0;
	position: absolute;
	pointer-events: none;
}

.arrow_box:after {
	border-color: rgba(255, 255, 255, 0);
	border-right-color: #f9f9f9;
	border-width: 15px;
	margin-top: -15px;
}
.arrow_box:before {
	border-color: rgba(204, 204, 204, 0);
	border-right-color: #e9e9e9;
	border-width: 18px;
	margin-top: -18px;
}


text:
"use strict";

const babelLoader = require(`babel-loader`);

const {
  prepareOptions,
  getCustomOptions,
  mergeConfigItemOptions
} = require(`./babel-loader-helpers`);

const {
  getBrowsersList
} = require(`./browserslist`);
/**
 * Gatsby's custom loader for webpack & babel
 *
 * Gatsby allows sites to either use our Babel setup (the default)
 * or to add a .babelrc to take control.
 *
 * Our default setup is defined in the fallbackPlugins/fallbackPresets arrays
 * below.
 *
 * After using either the fallback or user supplied setup, we add on a handful
 * of required plugins and finally merge in any presets/plugins supplied
 * by Gatsby plugins.
 *
 * You can find documentation for the custom loader here: https://babeljs.io/docs/en/next/babel-core.html#loadpartialconfig
 */

module.exports = babelLoader.custom(babel => {
  const toReturn = {
    // Passed the loader options.
    customOptions({
      stage = `test`,
      reactRuntime = `classic`,
      rootDir = process.cwd(),
      ...options
    }) {
      return {
        custom: {
          stage,
          reactRuntime
        },
        loader: {
          cacheIdentifier: JSON.stringify({
            browerslist: getBrowsersList(rootDir),
            babel: babel.version,
            gatsbyPreset: require(`babel-preset-gatsby/package.json`).version,
            env: babel.getEnv()
          }),
          sourceType: `unambiguous`,
          ...getCustomOptions(stage),
          ...options
        }
      };
    },

    // Passed Babel's 'PartialConfig' object.
    config(partialConfig, {
      customOptions
    }) {
      let {
        options
      } = partialConfig;
      const [reduxPresets, reduxPlugins, requiredPresets, requiredPlugins, fallbackPresets] = prepareOptions(babel, customOptions); // If there is no filesystem babel config present, add our fallback
      // presets/plugins.

      if (!partialConfig.hasFilesystemConfig()) {
        options = { ...options,
          plugins: requiredPlugins,
          presets: [...fallbackPresets, ...requiredPresets]
        };
      } else {
        // With a babelrc present, only add our required plugins/presets
        options = { ...options,
          plugins: [...options.plugins, ...requiredPlugins],
          presets: [...options.presets, ...requiredPresets]
        };
      } // Merge in presets/plugins added from gatsby plugins.

      reduxPresets.forEach(preset => {
        options.presets = mergeConfigItemOptions({
          items: options.presets,
          itemToMerge: preset,
          type: `preset`,
          babel
        });
      });
      reduxPlugins.forEach(plugin => {
        options.plugins = mergeConfigItemOptions({
          items: options.plugins,
          itemToMerge: plugin,
          type: `plugin`,
          babel
        });
      });
      return options;
    }

  };
  return toReturn;
});
//# sourceMappingURL=babel-loader.js.map

redpajama_set_name: RedPajamaGithub


text:
class PrefChangeRegistrar;
class Profile;

using file_manager::util::EntryDefinition;

namespace base {
class ListValue;
}

namespace chromeos {
class NetworkState;
}

namespace drive {
class FileChange;
}

namespace file_manager {

// Monitors changes in disk mounts, network connection state and preferences
// affecting File Manager. Dispatches appropriate File Browser events.
class EventRouter : public KeyedService,
                    public chromeos::NetworkStateHandlerObserver,
                    public drive::FileSystemObserver,
                    public drive::DriveServiceObserver,
                    public VolumeManagerObserver {
 public:
  typedef base::Callback<void(const base::FilePath& virtual_path,
                              const drive::FileChange* list,
                              bool got_error,
                              const std::vector<std::string>& extension_ids)>
      DispatchDirectoryChangeEventImplCallback;

  explicit EventRouter(Profile* profile);
  ~EventRouter() override;

  // KeyedService overrides.
  void Shutdown() override;

  typedef base::Callback<void(bool success)> BoolCallback;

  // Adds a file watch at |local_path|, associated with |virtual_path|, for
  // an extension with |extension_id|.
  //
  // |callback| will be called with true on success, or false on failure.
  // |callback| must not be null.
  //
  // Obsolete. Used as fallback for files which backends do not implement the
  // storage::WatcherManager interface.
  void AddFileWatch(const base::FilePath& local_path,
                    const base::FilePath& virtual_path,
                    const std::string& extension_id,
                    const BoolCallback& callback);

  // Removes a file watch at |local_path| for an extension with |extension_id|.
  //
  // Obsolete. Used as fallback for files which backends do not implement the
  // storage::WatcherManager interface.
  void RemoveFileWatch(const base::FilePath& local_path,
                       const std::string& extension_id);

  // Called when a copy task is completed.
  void OnCopyCompleted(
      int copy_id, const GURL& source_url, const GURL& destination_url,
      base::File::Error error);

  // Called when a copy task progress is updated.
  void OnCopyProgress(int copy_id,
                      storage::FileSystemOperation::CopyProgressType type,
                      const GURL& source_url,
                      const GURL& destination_url,
                      int64 size);

  // Called when a notification from a watcher manager arrives.
  void OnWatcherManagerNotification(
      const storage::FileSystemURL& file_system_url,
      const std::string& extension_id,
      storage::WatcherManager::ChangeType change_type);

  // chromeos::NetworkStateHandlerObserver overrides.
  void DefaultNetworkChanged(const chromeos::NetworkState* network) override;

  // drive::DriveServiceObserver overrides.
  void OnRefreshTokenInvalid() override;
  void OnReadyToSendRequests() override;

  // drive::FileSystemObserver overrides.
  void OnDirectoryChanged(const base::FilePath& drive_path) override;
  void OnFileChanged(const drive::FileChange& changed_files) override;
  void OnDriveSyncError(drive::file_system::DriveSyncErrorType type,
                        const base::FilePath& drive_path) override;

  // VolumeManagerObserver overrides.
  void OnDiskAdded(const chromeos::disks::DiskMountManager::Disk& disk,
                   bool mounting) override;
  void OnDiskRemoved(
      const chromeos::disks::DiskMountManager::Disk& disk) override;
  void OnDeviceAdded(const std::string& device_path) override;
  void OnDeviceRemoved(const std::string& device_path) override;
  void OnVolumeMounted(chromeos::MountError error_code,
                       const Volume& volume) override;
  void OnVolumeUnmounted(chromeos::MountError error_code,
                         const Volume& volume) override;
  void OnFormatStarted(const std::string& device_path, bool success) override;
  void OnFormatCompleted(const std::string& device_path, bool success) override;

  // Set custom dispatch directory change event implementation for testing.
  void SetDispatchDirectoryChangeEventImplForTesting(
      const DispatchDirectoryChangeEventImplCallback& callback);

  // Returns a weak pointer for the event router.
  base::WeakPtr<EventRouter> GetWeakPtr();

 private:
  typedef std::map<base::FilePath, FileWatcher*> WatcherMap;

  // Starts observing file system change events.
  void ObserveEvents();

  // Called when prefs related to file manager change.
  void OnFileManagerPrefsChanged();

  // Process file watch notifications.
  void HandleFileWatchNotification(const drive::FileChange* list,
                                   const base::FilePath& path,
                                   bool got_error);

  // Sends directory change event.
  void DispatchDirectoryChangeEvent(
      const base::FilePath& path,
      const drive::FileChange* list,
      bool got_error,
      const std::vector<std::string>& extension_ids);

  // Default implementation of DispatchDirectoryChangeEvent.
  void DispatchDirectoryChangeEventImpl(
      const base::FilePath& path,
      const drive::FileChange* list,
      bool got_error,
      const std::vector<std::string>& extension_ids);

  // Sends directory change event, after converting the file definition to entry
  // definition.
  void DispatchDirectoryChangeEventWithEntryDefinition(
      const linked_ptr<drive::FileChange> list,
      const std::string* extension_id,
      bool watcher_error,
      const EntryDefinition& entry_definition);

  // Dispatches the mount completed event.
  void DispatchMountCompletedEvent(
      extensions::api::file_manager_private::MountCompletedEventType event_type,
      chromeos::MountError error,
      const Volume& volume);

  // If needed, opens a file manager window for the removable device mounted at
  // |mount_path|. Disk.mount_path() is empty, since it is being filled out
  // after calling notifying observers by DiskMountManager.
  void ShowRemovableDeviceInFileManager(VolumeType type,
                                        const base::FilePath& mount_path);

  // Sends onFileTransferUpdate event right now if |immediate| is set. Otherwise
  // it refrains from sending for a short while, and after that it sends the
  // most recently scheduled event once.
  // The delay is for waiting subsequent 'added' events to come after the first
  // one when multiple tasks are added. This way, we can avoid frequent UI
  // update caused by differences between singular and plural cases.
  void ScheduleDriveFileTransferEvent(const drive::JobInfo& job_info,
                                      const std::string& status,
                                      bool immediate);

  // Sends the most recently scheduled onFileTransferUpdated event to
  // extensions.
  // This is used for implementing ScheduledDriveFileTransferEvent().
  void SendDriveFileTransferEvent();

  base::Time last_copy_progress_event_;

  WatcherMap file_watchers_;
  scoped_ptr<PrefChangeRegistrar> pref_change_registrar_;
  Profile* profile_;

  scoped_ptr<DeviceEventRouter> device_event_router_;
  scoped_ptr<JobEventRouter> job_event_router_;

  DispatchDirectoryChangeEventImplCallback
      dispatch_directory_change_event_impl_;

  // Note: This should remain the last member so it'll be destroyed and
  // invalidate the weak pointers before any other members are destroyed.
  base::WeakPtrFactory<EventRouter> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(EventRouter);
};

}  // namespace file_manager

#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_EVENT_ROUTER_H_


text:
package well

import (
	"context"
	"errors"
	"testing"
)

func TestEnvironmentStop(t *testing.T) {
	t.Parallel()

	env := NewEnvironment(context.Background())
	waitCh := make(chan struct{})

	env.Go(func(ctx context.Context) error {
		return nil
	})
	env.Go(func(ctx context.Context) error {
		<-waitCh
		return nil
	})

	env.Stop()
	close(waitCh)
	err := env.Wait()
	if err != nil {
		t.Error(err)
	}
}

func TestEnvironmentError(t *testing.T) {
	t.Parallel()

	env := NewEnvironment(context.Background())

	testError := errors.New("test")

	stopCh := make(chan struct{})

	go func() {
		err := env.Wait()
		if err != testError {
			t.Error(`err != testError`)
		}
		close(stopCh)
	}()

	waitCh := make(chan struct{})

	env.Go(func(ctx context.Context) error {
		close(waitCh)
		return nil
	})

	<-waitCh
	env.Cancel(testError)

	<-stopCh
}

func TestEnvironmentGo(t *testing.T) {
	t.Parallel()

	env := NewEnvironment(context.Background())

	testError := errors.New("test")

	waitCh := make(chan struct{})

	env.Go(func(ctx context.Context) error {
		<-ctx.Done()
		return nil
	})

	env.Go(func(ctx context.Context) error {
		<-ctx.Done()
		// uncomment the next line delays test just 2 seconds.
		//time.Sleep(2 * time.Second)
		return nil
	})

	env.Go(func(ctx context.Context) error {
		<-waitCh
		return testError
	})

	close(waitCh)
	err := env.Wait()
	if err != testError {
		t.Error(`err != testError`)
	}
}

func TestEnvironmentID(t *testing.T) {
	t.Parallel()

	env := NewEnvironment(context.Background())

	idch := make(chan interface{}, 1)
	env.GoWithID(func(ctx context.Context) error {
		idch <- ctx.Value(RequestIDContextKey)
		return nil
	})

	env.Stop()
	err := env.Wait()
	if err != nil {
		t.Fatal(err)
	}

	id := <-idch
	if id == nil {
		t.Fatal(`id == nil`)
	}

	sid, ok := id.(string)
	if !ok {
		t.Error(`id is not a string`)
	}
	if len(sid) != 36 {
		t.Error(`len(sid) != 36`)
	}
}