nareshmlx/opencv-pr huggingface dataset:
**File:** cmake/OpenCVFindOpenEXR.cmake
**Change Type:** modified
**Context:** PR #16294: cmake: fix Linux system OpenEXR detection

**Code Changes:**
```diff
@@ -20,6 +20,8 @@ if(WIN32)
     elseif(MSVC)
         SET(OPENEXR_LIBSEARCH_SUFFIXES Win32/Release Win32 Win32/Debug)
     endif()
+elseif(UNIX)
+    SET(OPENEXR_LIBSEARCH_SUFFIXES ${CMAKE_LIBRARY_ARCHITECTURE})
 endif()
 
 SET(SEARCH_PATHS
@@ -39,6 +41,25 @@ MACRO(FIND_OPENEXR_LIBRARY LIBRARY_NAME LIBRARY_SUFFIX)
```

Review comment:
This would re-introduce mess with names again. All libraries for found components must have the same suffix. Different subsets must be forbidden.
**File:** modules/imgcodecs/src/loadsave.cpp
**Change Type:** modified
**Context:** PR #16309: Added resize flag handlers for imread and imdecode | Issue #16203 - # This pullrequest changes 1. Added flag handler for imdecode which was...

**Code Changes:**
```diff
@@ -423,12 +423,12 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
     int scale_denom = 1;
     if( flags > IMREAD_LOAD_GDAL )
     {
-    if( flags & IMREAD_REDUCED_GRAYSCALE_2 )
-        scale_denom = 2;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_4 )
-        scale_denom = 4;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_8 )
-        scale_denom = 8;
```

Review comment:
Not readable. Not maintainable (after enum refactoring code may become broken).
**File:** modules/imgcodecs/src/loadsave.cpp
**Change Type:** modified
**Context:** PR #16309: Added resize flag handlers for imread and imdecode | Issue #16203 - # This pullrequest changes 1. Added flag handler for imdecode which was...

**Code Changes:**
```diff
@@ -423,12 +423,12 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
     int scale_denom = 1;
     if( flags > IMREAD_LOAD_GDAL )
     {
-    if( flags & IMREAD_REDUCED_GRAYSCALE_2 )
-        scale_denom = 2;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_4 )
-        scale_denom = 4;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_8 )
-        scale_denom = 8;
```

Review comment:
if( flags > IMREAD_LOAD_GDAL ) is good here ( to make usage like `IMREAD_REDUCED_GRAYSCALE_4 | IMREAD_IGNORE_ORIENTATION` acceptable ) I recommend that you do not make any changes to the `imread ` function
**File:** modules/imgcodecs/src/loadsave.cpp
**Change Type:** modified
**Context:** PR #16309: Added resize flag handlers for imread and imdecode | Issue #16203 - # This pullrequest changes 1. Added flag handler for imdecode which was...

**Code Changes:**
```diff
@@ -423,12 +423,12 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
     int scale_denom = 1;
     if( flags > IMREAD_LOAD_GDAL )
     {
-    if( flags & IMREAD_REDUCED_GRAYSCALE_2 )
-        scale_denom = 2;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_4 )
-        scale_denom = 4;
-    else if( flags & IMREAD_REDUCED_GRAYSCALE_8 )
-        scale_denom = 8;
```

Review comment:
if( flags > IMREAD_LOAD_GDAL )
**File:** modules/imgcodecs/test/test_read_write.cpp
**Change Type:** modified
**Context:** PR #16309: Added resize flag handlers for imread and imdecode | Issue #16203 - # This pullrequest changes 1. Added flag handler for imdecode which was...

**Code Changes:**
```diff
@@ -5,6 +5,95 @@
 
 namespace opencv_test { namespace {
 
+/* < <file_name, image_size>, <imread mode, scale> > */
+typedef tuple< tuple<string, Size>, tuple<ImreadModes, int> > Imgcodecs_Resize_t;
+
+typedef testing::TestWithParam< Imgcodecs_Resize_t > Imgcodecs_Resize;
+
+/* resize_flag_and_dims = <imread_flag, scale>*/
```

Review comment:
Please add `#ifdef HAVE_JPEG` guard for these tests (to avoid test failures in some configurations).
**File:** modules/photo/src/seamless_cloning_impl.cpp
**Change Type:** modified
**Context:** PR #16199: Compute gradient x - resolves #16168 ### This pull request adds cvtColor function to the computeGradient functions to make it more efficien...

**Code Changes:**
```diff
@@ -57,12 +57,8 @@ void Cloning::computeGradientX( const Mat &img, Mat &gx)
     }
     else if (img.channels() == 1)
     {
-        Mat tmp[3];
-        for(int chan = 0 ; chan < 3 ; ++chan)
-        {
-            filter2D(img, tmp[chan], CV_32F, kernel);
-        }
-        merge(tmp, 3, gx);
```

Review comment:
Shouldn't it be `gx` instead of `tmp[chan]`?
**File:** modules/photo/src/seamless_cloning_impl.cpp
**Change Type:** modified
**Context:** PR #16199: Compute gradient x - resolves #16168 ### This pull request adds cvtColor function to the computeGradient functions to make it more efficien...

**Code Changes:**
```diff
@@ -57,12 +57,8 @@ void Cloning::computeGradientX( const Mat &img, Mat &gx)
     }
     else if (img.channels() == 1)
     {
-        Mat tmp[3];
-        for(int chan = 0 ; chan < 3 ; ++chan)
-        {
-            filter2D(img, tmp[chan], CV_32F, kernel);
-        }
-        merge(tmp, 3, gx);
```

Review comment:
There should be `gy`
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...
**Review Line:** 6

**Code Changes:**
```diff
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
+
+
```

Review comment:
Please import `numpy` before `cv2` (there are some reports related to importing order).
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
```

Review comment:
uint8, int8, uint16
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...
**Review Line:** 12

**Code Changes:**
```diff
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
+
+
+def norm_inf(x, y=None):
+    def norm(vec):
+        return np.linalg.norm(vec.flatten(), np.inf)
+
+    x = x.astype(np.float64)
+    return norm(x) if y is None else norm(x - y.astype(np.float64))
```

Review comment:
It make sense to convert x/y to doubles before passing to numpy (issue can be observed with `uint8`): ``` x = x.astype(np.float64) y = y if y is None else y.astype(np.float64) ``` (here and below, except hamming)
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
```

Review comment:
We need reproducible tests, so we need reproducible tests input. `np.random.randint` generates different numbers on each test launch. Fix `np.random` seed or use `cv.randu` / `cv.randn`
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
```

Review comment:
May be add some 2D size? (like `(3,5)`)
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
```

Review comment:
It make sense to dump `element_type` too.
**File:** modules/python/test/test_norm.py
**Change Type:** added
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+from itertools import product
+from functools import reduce
+
+import numpy as np
+import cv2 as cv
+
+from tests_common import NewOpenCVTests
```

Review comment:
`CVNormTests` => `norm_test` (like other tests)
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -13,11 +13,14 @@
 #   define Py_LIMITED_API 0x03030000
 #endif
 
-#include <math.h>
+#include <cmath>
 #include <Python.h>
+#include <limits>
 
 #if PY_MAJOR_VERSION < 3
```

Review comment:
Currently "None" may be used for parameters with default values. Lets try to keep this behavior. However, it is not Pythonic and should be deprecated/removed (it is not good for "strict" overloads selector). Perhaps: - we can extent `ArgInfo` with "hasDefaultValue" field. ``` if (obj == Py_None && info.hasDefaultValue) { return true; // keep default value from declaration } else { failmsg... } ```
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -13,11 +13,14 @@
 #   define Py_LIMITED_API 0x03030000
 #endif
 
-#include <math.h>
+#include <cmath>
 #include <Python.h>
+#include <limits>
 
 #if PY_MAJOR_VERSION < 3
```

Review comment:
Looks like it is not used.
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -13,11 +13,14 @@
 #   define Py_LIMITED_API 0x03030000
 #endif
 
-#include <math.h>
+#include <cmath>
 #include <Python.h>
+#include <limits>
 
 #if PY_MAJOR_VERSION < 3
```

Review comment:
I've got your point and agree with it. I will add default value check for None as a separate PR.
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...

**Code Changes:**
```diff
@@ -13,11 +13,14 @@
 #   define Py_LIMITED_API 0x03030000
 #endif
 
-#include <math.h>
+#include <cmath>
 #include <Python.h>
+#include <limits>
 
 #if PY_MAJOR_VERSION < 3
```

Review comment:
Perhaps "return false;" is missing here. Also it make sense to extend tests to cover this branch too.
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...
**Review Line:** 284

**Code Changes:**
```diff
+    {
+        // According to the numpy documentation:
+        // There are 21 statically-defined PyArray_Descr objects for the built-in data-types
+        // So descriptor pointer is not owning.
+        PyArray_Descr* to = getNumpyTypeDescriptor<T>();
+        if (canBeSafelyCasted<T>(obj, to))
+        {
+            PyArray_CastScalarToCtype(obj, &value, to);
+            return true;
+        }
+    }
```

Review comment:
> `canBeSafelyCasted<T>` This looks over complicated. Code doesn't use all 21 types, because it is OpenCV code (I see only 3 specializations for `parseNumpyScalar` - `size_t`, `float`, `double`). I suggest to remove "stdx" replacement and just write these specializations (or overloads).
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...
**Review Line:** 284

**Code Changes:**
```diff
+    {
+        // According to the numpy documentation:
+        // There are 21 statically-defined PyArray_Descr objects for the built-in data-types
+        // So descriptor pointer is not owning.
+        PyArray_Descr* to = getNumpyTypeDescriptor<T>();
+        if (canBeSafelyCasted<T>(obj, to))
+        {
+            PyArray_CastScalarToCtype(obj, &value, to);
+            return true;
+        }
+    }
```

Review comment:
The underlying idea of this generalized approach is to reduce code repetition and have a set well tested functions as building blocks. Basically, it is possible to cover all primitive types by 3 general functions: - For signed integral types; - For unsigned integral types; - For floating point types. And 1 specialized function for `size_t`. After primitive all primitive types are covered by this set of functions, it is possible to cover other cases with their combination. For instance, `vector<type>` can be parsed as a sequence without fixed size, `cv::Size` can be parsed as a sequence with size 2. To parse a single element generalized function should be called. If a new type (e.g. `int64_t` can not be parsed now) will be added, it automatically be covered by signed integral parser, so the contributor should provide only tests for it. These functions are not introduced in the current PR, but will be in further. If you are against this idea, I'm OK to rewrite this part with parsers specializations.
**File:** modules/python/src2/cv2.cpp
**Change Type:** modified
**Context:** PR #15915: Fix implicit conversion from array to scalar in python bindings - ### This pullrequest changes numpy array was implicitly converted by `PyA...
**Review Line:** 284

**Code Changes:**
```diff
+    {
+        // According to the numpy documentation:
+        // There are 21 statically-defined PyArray_Descr objects for the built-in data-types
+        // So descriptor pointer is not owning.
+        PyArray_Descr* to = getNumpyTypeDescriptor<T>();
+        if (canBeSafelyCasted<T>(obj, to))
+        {
+            PyArray_CastScalarToCtype(obj, &value, to);
+            return true;
+        }
+    }
```

Review comment:
1. Vector conversions is another story. I still didn't get problems with them. 2. > If a new type Set of types for bindings should be limited to cover other than PYthon languages too. --- Lets keep patch as much simple as possible.
**File:** samples/python/tutorial_code/core/file_input_output/file_input_output.py
**Change Type:** added
**Context:** PR #14666: Python code examples for file IO in xml and yml format - resolves #14665 ### This pullrequest changes the fact that Python tutorials do not...
**Review Line:** 3

**Code Changes:**
```diff
@@ -0,0 +1,156 @@
+from __future__ import print_function
+
+import numpy as np
+import cv2 as cv
+import sys
+
+def help(filename):
+    print (
```

Review comment:
It is better to import numpy before cv2 (we have reports where this order of imports doesn't work)
**File:** samples/python/tutorial_code/core/file_input_output/file_input_output.py
**Change Type:** added
**Context:** PR #14666: Python code examples for file IO in xml and yml format - resolves #14665 ### This pullrequest changes the fact that Python tutorials do not...

**Code Changes:**
```diff
@@ -0,0 +1,156 @@
+from __future__ import print_function
+
+import numpy as np
+import cv2 as cv
+import sys
+
+def help(filename):
+    print (
+        '''
```

Review comment:
Please use normal print from Python3 (+ `from __future__ import print_function` for Python 2.7). Also it is better to use docstring.
**File:** doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.markdown
**Change Type:** modified
**Context:** PR #14666: Python code examples for file IO in xml and yml format - resolves #14665 ### This pullrequest changes the fact that Python tutorials do not...

**Code Changes:**
```diff
@@ -17,7 +17,7 @@ You'll find answers for the following questions:
 
 Source code
 -----------
-
+@add_toggle_cpp
 You can [download this from here
 ](https://github.com/opencv/opencv/tree/3.4/samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp) or find it in the
 `samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp` of the OpenCV source code
@@ -26,102 +26,122 @@ library.
```

Review comment:
> master Please use "3.4" in URLs (as patch is targeted to 3.4 branch).
**File:** modules/gapi/perf/common/gapi_core_perf_tests_inl.hpp
**Change Type:** modified
**Context:** PR #15695: Fix incorrect use of std::move() in g-api perf tests - Replace c.apply(); With cc = c.compile(); cc(); In g-api performance tests. Change g...

**Code Changes:**
```diff
@@ -35,12 +35,17 @@ PERF_TEST_P_(AddPerfTest, TestPerformance)
     out = cv::gapi::add(in1, in2, dtype);
     cv::GComputation c(GIn(in1, in2), GOut(out));
 
+    // There is no need to qualify gin, gout, descr_of with namespace (cv::)
+    // as they are in the same namespace as their actual argument (i.e. cv::Mat)
+    // and thus are found via ADL, as in the examples below.
     // Warm-up graph engine:
-    c.apply(gin(in_mat1, in_mat2), gout(out_mat_gapi), std::move(compile_args));
+    auto cc = c.compile(descr_of(gin(in_mat1, in_mat2)),
```

Review comment:
please remove
**File:** modules/gapi/perf/common/gapi_core_perf_tests_inl.hpp
**Change Type:** modified
**Context:** PR #15695: Fix incorrect use of std::move() in g-api perf tests - Replace c.apply(); With cc = c.compile(); cc(); In g-api performance tests. Change g...

**Code Changes:**
```diff
@@ -35,12 +35,17 @@ PERF_TEST_P_(AddPerfTest, TestPerformance)
     out = cv::gapi::add(in1, in2, dtype);
     cv::GComputation c(GIn(in1, in2), GOut(out));
 
+    // There is no need to qualify gin, gout, descr_of with namespace (cv::)
+    // as they are in the same namespace as their actual argument (i.e. cv::Mat)
+    // and thus are found via ADL, as in the examples below.
     // Warm-up graph engine:
-    c.apply(gin(in_mat1, in_mat2), gout(out_mat_gapi), std::move(compile_args));
+    auto cc = c.compile(descr_of(gin(in_mat1, in_mat2)),
```

Review comment:
let's stick to common pattern : i.e. use `gin()` and `gout()` explicitly. i.e. ```cpp auto cc = c.compile(descr_of(gin(ginin_mat1, in_mat2)), std::move(compile_args)); cc(gin(in_mat1, in_mat2), gout(out_mat_gapi)); ``` please note that no need to qualify `gin`, `gout` , `descr_of` with namespace (`cv::`) as they are in the same namespace as their actual argument (i.e. `cv::Mat`) and thus are found via [ADL](https://en.cppreference.com/w/cpp/language/adl)
**File:** modules/gapi/perf/common/gapi_core_perf_tests_inl.hpp
**Change Type:** modified
**Context:** PR #15695: Fix incorrect use of std::move() in g-api perf tests - Replace c.apply(); With cc = c.compile(); cc(); In g-api performance tests. Change g...

**Code Changes:**
```diff
@@ -35,12 +35,17 @@ PERF_TEST_P_(AddPerfTest, TestPerformance)
     out = cv::gapi::add(in1, in2, dtype);
     cv::GComputation c(GIn(in1, in2), GOut(out));
 
+    // There is no need to qualify gin, gout, descr_of with namespace (cv::)
+    // as they are in the same namespace as their actual argument (i.e. cv::Mat)
+    // and thus are found via ADL, as in the examples below.
     // Warm-up graph engine:
-    c.apply(gin(in_mat1, in_mat2), gout(out_mat_gapi), std::move(compile_args));
+    auto cc = c.compile(descr_of(gin(in_mat1, in_mat2)),
```

Review comment:
please apply this to all the changed calls
**File:** modules/gapi/perf/common/gapi_core_perf_tests_inl.hpp
**Change Type:** modified
**Context:** PR #15695: Fix incorrect use of std::move() in g-api perf tests - Replace c.apply(); With cc = c.compile(); cc(); In g-api performance tests. Change g...

**Code Changes:**
```diff
@@ -35,12 +35,17 @@ PERF_TEST_P_(AddPerfTest, TestPerformance)
     out = cv::gapi::add(in1, in2, dtype);
     cv::GComputation c(GIn(in1, in2), GOut(out));
 
+    // There is no need to qualify gin, gout, descr_of with namespace (cv::)
+    // as they are in the same namespace as their actual argument (i.e. cv::Mat)
+    // and thus are found via ADL, as in the examples below.
     // Warm-up graph engine:
-    c.apply(gin(in_mat1, in_mat2), gout(out_mat_gapi), std::move(compile_args));
+    auto cc = c.compile(descr_of(gin(in_mat1, in_mat2)),
```

Review comment:
let's use the same (i.e. main one) overload of `operator()` in performance test cycles as well. I.e. one that utilized easily with use of `gin()` and `gout()`. Please update rest of the path accordingly
**File:** modules/gapi/perf/common/gapi_core_perf_tests_inl.hpp
**Change Type:** modified
**Context:** PR #15695: Fix incorrect use of std::move() in g-api perf tests - Replace c.apply(); With cc = c.compile(); cc(); In g-api performance tests. Change g...

**Code Changes:**
```diff
@@ -35,12 +35,17 @@ PERF_TEST_P_(AddPerfTest, TestPerformance)
     out = cv::gapi::add(in1, in2, dtype);
     cv::GComputation c(GIn(in1, in2), GOut(out));
 
+    // There is no need to qualify gin, gout, descr_of with namespace (cv::)
+    // as they are in the same namespace as their actual argument (i.e. cv::Mat)
+    // and thus are found via ADL, as in the examples below.
     // Warm-up graph engine:
-    c.apply(gin(in_mat1, in_mat2), gout(out_mat_gapi), std::move(compile_args));
+    auto cc = c.compile(descr_of(gin(in_mat1, in_mat2)),
```

Review comment:
please revert this change, as unrelated to the issue
**File:** modules/js/test/run_puppeteer.js
**Change Type:** added
**Context:** PR #15503: Js test puppeteer - * js - tests and docs only * adds support to run js tests with puppeteer (headless chrome - with a single command) * di...
**Review Line:** 168

**Code Changes:**
```diff
+
+By default will run a headless browser silently printing a small report in the terminal.
+But it could used to debug the tests in the browser, take screenshots, global tool or
+targeting external servers exposing the tests.
+
+TIP: you could install the tool globally (npm install --global build_js/bin) to execute it from any local folder.
+
+# Options
+
+ * port?: number. Default 8080
+ * buildFolder?: string. Default __dirname (this folder)
```

Review comment:
Could you please clarify how this can be used?
**File:** doc/js_tutorials/js_setup/js_setup/js_setup.markdown
**Change Type:** modified
**Context:** PR #15503: Js test puppeteer - * js - tests and docs only * adds support to run js tests with puppeteer (headless chrome - with a single command) * di...

**Code Changes:**
```diff
@@ -91,21 +91,60 @@ Building OpenCV.js from Source
     python ./platforms/js/build_js.py build_js --build_test
     @endcode
 
-    To run tests, launch a local web server in \<build_dir\>/bin folder. For example, node http-server which serves on `localhost:8080`.
+Running OpenCV.js Tests
+---------------------------------------
 
-    Navigate the web browser to `http://localhost:8080/tests.html`, which runs the unit tests automatically.
+Remember to launch the build command passing `--build_test` as mentioned previously. This will generate test source code ready to run together with `opencv.js` file in `build_js/bin`
```

Review comment:
build => build_js ?